gpt4 book ai didi

java - 如何在单个方法内延迟而不延迟 java 中的整个程序?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:44 26 4
gpt4 key购买 nike

我正在用 java 编写一个绘制一系列矩形的蛇程序。我不明白如何按顺序延迟 block 的方向更改,以便蛇形矩形在按下箭头键的同一位置全部更改方向。我需要在一种方法中等待,而程序的其余部分继续运行。当按下箭头键时,它会触发此方法来更改我的矩形的方向(u 向上,d 向下...)

`public void changeDirection(String dir)
{
for(int i = 0; i<snakearray.size(); i++)
{
//checks to make sure youre not changing straight from l to r or u to d
if(dir.equals("r")||dir.equals("l"))
{
if(//direction of currect element is up or down)
//makes the current element of the array change to the new direction
{snakearray.set(i, snakearray.get(i).newDirection(dir));}
}
else if(dir.equals("u")||dir.equals("d"))
{
if(//current element's direction is right or left)
{snakearray.set(i, snakearray.get(i).newDirection(dir));}
}
//pause method but not game method needed here????
}
}`

有没有办法实现我需要的暂停?我已经尝试过 thread.sleep(20) 方法,但这会暂停我的整个程序...

最佳答案

忘记只为一个简单的方法创建一个新线程。你想要一个执行移动的时间,例如每秒一次,你应该改变你移动蛇的方式。

首先是时间:

swing.Timer:https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html它非常易于使用,并且具有很多功能。

或者您可以通过测量自上次移动以来的时间来实现非常基本的计时。

您将需要一个 lastTime 和一个 now 变量。

now = currentTime();
if(now - lastTime > delay){
moveSnakeParts();
lastTime = currentTime();
}

其次,你不想拖延蛇的部分。蛇有一个你可以控制的头和一系列 body 部位。您所要做的就是移动头部以存储其先前的位置,将第一个 body 部位移动到头部的先前位置并存储第一个 body 部位的先前位置等等……我希望您明白了。

关于java - 如何在单个方法内延迟而不延迟 java 中的整个程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43382660/

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