我正在做一个非常简单的蛇游戏,我有一个叫做Apple的对象,我想每隔X秒移动一个随机位置。所以我的问题是,每隔X秒执行此代码的最简单方法是什么?
apple.x = rg.nextInt(470);
apple.y = rg.nextInt(470);
感谢。
编辑:
确实有一个像这样的计时器:
Timer t = new Timer(10,this);
t.start();
它的作用是在游戏开始时绘制我的图形元素,它运行以下代码:
@Override
public void actionPerformed(ActionEvent arg0) {
Graphics g = this.getGraphics();
Graphics e = this.getGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
e.fillRect(0, 0, this.getWidth(), this.getHeight());
ep.drawApple(e);
se.drawMe(g);
答案 0 :(得分:6)
我会使用执行者
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable toRun = new Runnable() {
public void run() {
System.out.println("your code...");
}
};
ScheduledFuture<?> handle = scheduler.scheduleAtFixedRate(toRun, 1, 1, TimeUnit.SECONDS);
答案 1 :(得分:1)
最简单的方法是使用sleep
。
apple.x = rg.nextInt(470);
apple.y = rg.nextInt(470);
Thread.sleep(1000);
循环运行上面的代码。
这会给你近似(可能不准确)一秒延迟。
答案 2 :(得分:1)
你应该有某种负责处理游戏的游戏循环。您可以在每个 x 毫秒内触发在此循环内执行的代码,如下所示:
while(gameLoopRunning) {
if((System.currentTimeMillis() - lastExecution) >= 1000) {
// Code to move apple goes here.
lastExecution = System.currentTimeMillis();
}
}
在此示例中,if语句中的条件将每1000毫秒计算为true
。
答案 3 :(得分:1)
使用计时器:
Timer timer = new Timer();
int begin = 1000; //timer starts after 1 second.
int timeinterval = 10 * 1000; //timer executes every 10 seconds.
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//This code is executed at every interval defined by timeinterval (eg 10 seconds)
//And starts after x milliseconds defined by begin.
}
},begin, timeinterval);