2016-05-04 12 views
1

私は、回ってきたそれらのクリッカーゲームのゲームに似たゲームを作成しようとしています。私はコーディングには非常に新しいので、特定の問題を解決する方法を知らないようです。これは一つです。 私はお詫びしますが、私は以下に余分なコードを置くかもしれません。私のJPanelは、JFrameのサイズが変更されるたびに常に更新されます。

問題は、ウィンドウを右上に移動するたびに問題になります。私はウィンドウを左下にドラッグし、次に右上にドラッグします。私のイメージとテキストは絶え間なくリフレッシュされます。彼らはリストからランダムに設定されていることを念頭に置いてください。したがって、テキストは画像と共に他のランダムな選択に完全に変更されました。

私はそれらを欲しいときに、どうすれば更新できるのですか? monsterHealthが0になったのはいつですか? また、ウィンドウを動かすと、他のすべてのウィンドウが最小化されますか?

import javax.swing.*; 
    import javax.swing.event.*; 
    import java.awt.event.*; 
    import java.awt.*; 
    import java.awt.image.*; 

    public class RPGClicker 
    {  
    static int attackLevel = 1; 
    static int defenceLevel = 1; 
    static int hitpointsLevel = 1; 

    static int xp = 0; 
    static int gold = 0; 
    static int dps = 0; 
    static int clickDamage = attackLevel; 
    static int health = hitpointsLevel * 100; 
    static int healthRecovery = 1; 
    static int room = 1; 

    public static void main(String[] args) 
    {  
     SwingUtilities.invokeLater(
      new Runnable() 
      { 
       public void run() 
       { 
       //Calls the mainGameScene method. 
       mainGameScene(); 
       } 
      }); 
    } 

    public static void mainGameScene() 
    {    
     JFrame window; 
     mainGamePanel mainGameInstance; 

     window = new JFrame("RPGClicker: An Unknown Quest!"); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setLayout(new BorderLayout()); 
     window.setResizable(false); 

     mainGameInstance = new mainGamePanel(); 

     window.add(mainGameInstance, BorderLayout.CENTER); 

     window.pack(); 
     window.setLocationRelativeTo(null); 
     window.setVisible(true); 
    } 
    } 

これはグラフィックを含むコードです。

import javax.swing.*; 
    import javax.swing.event.*; 
    import java.awt.event.*; 
    import java.awt.*; 
    import java.awt.image.*; 
    import java.io.*; 
    import javax.imageio.*; 
    import java.util.*; 

    class mainGamePanel extends JPanel 
    { 
    BufferedImage background, user; 

    public Dimension getPreferredSize() 
    { 
     return new Dimension(1280, 720); 
    } 

    public void paintComponent(Graphics pencil) 
    { 
     super.paintComponent(pencil); 

     background = ImageLoader.loadImage("rec/alpha/background0.png"); 

     user = ImageLoader.loadImage("rec/alpha/user.png"); 

     pencil.drawImage(background, 0, 0, null); 
     pencil.drawImage(user, 100, 450, null); 

     Monster monster = new Monster(); 
     pencil.drawImage(monster.monsterSprite, 900, 50, null); 
     pencil.drawString(monster.monsterName, 900, 60); 
    } 

    public mainGamePanel() 
    { 

    } 
    } 

コードモンスタークラスです。

import javax.swing.*; 
    import javax.swing.event.*; 
    import java.awt.event.*; 
    import java.awt.*; 
    import java.awt.image.*; 
    import java.io.*; 
    import javax.imageio.*; 
    import java.util.*; 

    public class Monster 
    { 
    static final double BASE_MONSTER_HEALTH = 10; 

    static double monsterHealth = Math.pow(RPGClicker.room, 2) * BASE_MONSTER_HEALTH; 
    static double monsterDamage = RPGClicker.room + 1 - RPGClicker.defenceLevel; 

    BufferedImage monsterSprite; 
    String monsterName; 
    Random rand = new Random(); 

    public Monster() 
    { 
     String monster[] = {"Ork", "Mermaid", "Goblin", "Fish", "Griffen", "Cerberus", "Empousai", "Gorgon", "Stymphalian Bird", "Chimera", "Ichthyocentaurs", "Typhon", "Minotaur", "Fury", "Hydra", "Sphinx"}; 
     String monsterType = monster[rand.nextInt(monster.length)]; 
     monsterSprite = ImageLoader.loadImage("rec/alpha/monster/" + monsterType + ".png"); 

     String[] firstName = {"Lucas", "Ben", "Caytlynn", "Fay", "Seth", "Jostien", "Paige", "Luis", "Josefiina", "Patricia", "Angus", "David", "Manjit", "Matt", "Maya", "Richard", "Roman", "Rudy", "Téa", "Fi"}; 
     String connection1 = " the "; 
     String[] secondName = {"Powerful ", "Unstoppable ", "Almighty ", "Vigourous ", "Formidible ", "Mighty ", "Cowardly ", "Intoxicated "}; 
     String connection2 = " of "; 
     String[] thirdName = {"Death", "America", "Pride", "Greed", "Lust", "Envy", "Gluttony"}; 

     monsterName = firstName[rand.nextInt(firstName.length)] + connection1 + secondName[rand.nextInt(secondName.length)] + monsterType + connection2 + thirdName[rand.nextInt(thirdName.length)]; 
    } 
    } 

答えて

3

あなたのペインティング方法を過度にしています。それを理解してください:

  • 塗装方法(例えば、paintComponent)は、絵画やのみを描くためのものです。
  • これらの方法でイメージファイルを読み込んだり、他のファイル入出力を実行したりしないでください。レンダリングが非常に遅くなるため、GUIの応答性が悪いように見えます。とにかく、一度に読んで読んでおく必要があるときに、なぜイメージを再読み込みするのはなぜですか。
  • ペインティングメソッドが起動されたとき、またはペイントメソッドが起動されている場合でも完全に制御できないため、モンスター作成などのプログラムロジックをこれらのメソッドに入れないでください。ロジックとオブジェクトの作成を別の場所に置く。
関連する問題