簡體   English   中英

Java:GridLayout上的動畫精靈第2部分

[英]Java: Animated Sprites on GridLayout Part 2

這是我上一篇文章Java的延續:GridLayout上的Animated Sprites 多虧了一個答復,它使我有了一個想法,我只需要在觸發條件中插入一個循環並在其中調用pi [i] .repaint()。 到目前為止,它有效。 盡管我嘗試將其集成到由多個精靈組成的游戲中,但並沒有任何改進。 沒有動畫,精靈將毫無問題地顯示在網格上。 我在GridFile類中插入了動畫循環,但沒有顯示。 我還嘗試在MainFile中插入動畫循環,它顯示了不規則的動畫,有點像小故障。 有人可以告訴我我哪里出了錯嗎? 歡迎提出想法。

MainFile類

public class MainFile {

JFrame mainWindow = new JFrame();

public JPanel gridPanel;

public MainFile() { 
    gridPanel= new GridFile();

    mainWindow.add(gridPanel,BorderLayout.CENTER);

    mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainWindow.setSize(700,700);
    mainWindow.setResizable(false);
    mainWindow.setVisible(true);

}

public static void main(String[]args){

    new MainFile();

}

}

GridFile類

public class GridFile extends JPanel{   

ImageIcon gameBackground = new ImageIcon(getClass().getResource("Assets\\GridBackground.png"));
Image gameImage; 
int[] pkmArray = new int[12];
int random = 0;
Pokemon[] pkm = new Pokemon[36];
JPanel[] pokeball = new JPanel[36];
int j = 0;

public GridFile(){

    setLayout(new GridLayout(6,6,6,6));
    setBorder(BorderFactory.createEmptyBorder(12,12,12,12));
    gameImage = gameBackground.getImage();      


    for(int i = 0;i < 36;i++){  
        do{
            random = (int)(Math.random() * 12 + 0);

            if(pkmArray[random] <= 3){      
                pokeball[i] = new Pokemon(random);
                pokeball[i].setOpaque(false);
                pokeball[i].setLayout(new BorderLayout());
                pkmArray[random]++;
            }
        }while(pkmArray[random] >= 4);

        add(pokeball[i],BorderLayout.CENTER);
    } 

    while(true){
        for(int i = 0; i < 36; i++){
            pokeball[i].repaint();
        }
    }

}



public void paintComponent(Graphics g){

    if(gameImage != null){
        g.drawImage(gameImage,0,0,getWidth(),getHeight(),this);   
    }   
}

}

  1. 使用擺動計時器進行重新繪制,並在幀之間留出一點時間進行擺動以完成繪制工作。 試圖畫出比顯示任何東西都快的東西是沒有意義的。 如果在main()具有動畫循環,則重新繪制管理器將嘗試刪除一些看起來彼此接近的重新繪制請求,這可能是您看到不規則動畫的原因。
  2. 您應該僅在事件分發線程中創建和訪問swing組件。 您當前的做法是違反線程規則。

另外:當動畫循環現在就在其中時, GridFile構造函數將永遠不會返回,這說明您將看不到任何東西,因為代碼永遠不會足夠遠以顯示窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM