我正在尝试制作一款蛇型游戏而且我在制作"颗粒时遇到了麻烦。以固定的间隔出现在随机的地方(我想让它达到10秒)。当我在短暂的延迟后运行程序时(1000毫秒),颗粒开始出现在不同位置的屏幕上极快地闪烁。我想要做的是让颗粒每10秒钟在一个随机位置出现一个,而不是快速闪烁。任何帮助将不胜感激。
P.S。我之前从未做过这样的事情,如果代码看起来有点粗糙,我会道歉。一般编码的任何建议也非常感谢。
编辑:我知道这仍然是错误的,但我只是想知道我到目前为止是否至少在正确的轨道上。现在" pellet"只是坐在框架的右上角。我的计时器或列表现在是否存在问题,或者只是一般的问题。顺便说一句,如果更新我的代码只是为了显示新问题,请不要在本网站上告诉我,我只是在评论部分寻求帮助,然后停止编辑。
package snake;
import java.awt.* ;
import java.awt.event.*;
import java.util.* ;
import javax.swing.*;
import javax.swing.Timer;
/**
*
* @author Carlos
*/
public class Pellet extends JPanel
{
Random randomNumber = new Random() ;
int x = 0 ;
int y = 0 ;
private Game game ;
private Timer timer ;
private final int DELAY = 100 ;
private ArrayList<Pellet> al = new ArrayList<>() ;
public Pellet(Game game)
{
this.game = game ;
}
@Override
public void paint(Graphics g)
{
super.paintComponent(g);
g.fillOval(x, y, 10, 10);
for(int i = 0 ; i < al.size() ; i++)
{
Pellet p = al.get(i) ;
p.paintComponent(g);
}
}
public void pelletTimer()
{
timer = new Timer(DELAY, new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
x = randomNumber.nextInt(game.getWidth()) ;
y = randomNumber.nextInt(game.getHeight()) ;
Pellet p = new Pellet(game) ;
al.add(p) ;
repaint() ;
}
}) ;
timer.start();
}
}
答案 0 :(得分:5)
您的代码尝试存在很多问题,所以让我们尝试一下。
java.util.Timer
会做的事情。java.util.Timer
,这是永远不应该做的事情,因为这个方法只用于绘画和绘画,不应该减速或涉及非绘画代码。 建议:
javax.swing.Timer
或"Swing" Timer来推动您的动画。repaint()
,它将告诉JVM重新绘制你的GUI,因此它将自动为你调用paintComponent方法。