gpt4 book ai didi

Java:GridLayout 上的动画 Sprite 第 2 部分

转载 作者:行者123 更新时间:2023-12-01 23:34:38 27 4
gpt4 key购买 nike

这是我上一篇文章的延续 Java: Animated Sprites on GridLayout 。感谢回复,它给了我一个想法,我只需在触发条件中插入一个循环并在其中调用 pi[i].repaint() 即可。到目前为止它有效。虽然我尝试将它集成到我的由多个 Sprite 组成的游戏中,但它没有任何改进。如果没有动画, Sprite 会毫无问题地显示在网格上。我在 GridFile 类中插入了动画循环,但它没有显示。我还尝试在 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. 使用 Swing Timer以便重新绘制,并在帧之间留出一点时间来进行绘制工作。尝试以比显示速度更快的速度绘制是没有意义的。如果你有 main() 中的动画循环,重绘管理器将尝试删除一些看起来彼此接近的重绘请求,这可能是您看到的不规则动画的原因。
  2. 您应该仅在 event dispatch thread 中创建和访问 swing 组件。您当前的方法违反了线程规则。

补充:当动画循环处于现在的位置时,GridFile构造函数永远不会返回,这说明您将看不到任何内容,因为代码永远无法显示窗口。

关于Java:GridLayout 上的动画 Sprite 第 2 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com