尝试在Java中设置骰子滚动动画
我正在尝试用Java“动画化”掷骰子。我目前设置了一个图标(称为“diceImage”),当点击一个按钮(称为“diceRoll”)时,它会更新到一个新的模具面随机图像。我想做的是让它在几秒钟内多次改变图像(变成一个随机的模具面),然后在最终图像上停止 我遇到的问题不是生成一个随机数,或者多次滚动它,而是在一个循环中多次更新图像。到目前为止,我掌握了以下代码,它将模具旋转10次:尝试在Java中设置骰子滚动动画,java,image,dice,Java,Image,Dice,我正在尝试用Java“动画化”掷骰子。我目前设置了一个图标(称为“diceImage”),当点击一个按钮(称为“diceRoll”)时,它会更新到一个新的模具面随机图像。我想做的是让它在几秒钟内多次改变图像(变成一个随机的模具面),然后在最终图像上停止 我遇到的问题不是生成一个随机数,或者多次滚动它,而是在一个循环中多次更新图像。到目前为止,我掌握了以下代码,它将模具旋转10次: private void diceRollActionPerformed(java.awt.event.Action
private void diceRollActionPerformed(java.awt.event.ActionEvent evt) {
for (int i = 1; i <= 10; i++) {
rollDice();
pause(100);
}
}
下面的方法是“假定”在更新图像之间短暂暂停程序(这是从我参加的一个编程课程中获取的,在该课程中,我们必须为屏幕上移动的汽车图像设置动画):
这个程序所要做的就是暂停,然后打印最后的骰子卷。它不显示任何“中间”面。有人知道为什么这不起作用吗
非常感谢您的帮助。这个问题一天要问好几次。如果您在事件调度线程中休眠,则会阻止它执行其工作:对事件作出反应并重新绘制屏幕 你的动画应该在另一个线程中完成。阅读有关的教程,并使用摆动计时器。您使用的暂停()是指当您需要为移动的物体(例如汽车)设置动画时,但只需更改此处的骰子JLabel图标不需要暂停(除非您只想让它延迟一点) 但无论如何,要解决您的问题,您需要在JLabel或updateGraphics()上调用repaint()。设置JLabel的图标不会显示新图标,只需重新绘制它 当然,正如JB Nizet所说,要想让应用程序不挂起,你需要在一个新线程上调用repaint。我想你必须学会如何使用好线程,因为有时候会非常棘手。
祝你好运diceImage是什么类型的?diceImage是JLabel为什么不制作一个BuffereImage然后将其放入diceImage?然后将BuffereImage更新为新的以使其更改映像?
private void rollDice() {
Random r = new Random();
int randomNumber = r.nextInt(6) + 1;
diceImage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Game/Images/Dice " + randomNumber + ".png")));
}
private void pause(int sleepTime) {
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
System.exit(-1);
}
}