Java 如何降低一种方法的速度而不影响程序的其余部分?
我正在用Java制作一个游戏,我想创建一个随机移动的角色。我做的那个很痉挛。我基本上想在生成的随机数之间加一个延迟。我是一个初学者,所以不要评判我的代码lolJava 如何降低一种方法的速度而不影响程序的其余部分?,java,random,Java,Random,我正在用Java制作一个游戏,我想创建一个随机移动的角色。我做的那个很痉挛。我基本上想在生成的随机数之间加一个延迟。我是一个初学者,所以不要评判我的代码lol public class Monster extends Entity{ private World world; Image monster; public Monster(int x, int y, World world) { super(x, y, world); w = 32;
public class Monster extends Entity{
private World world;
Image monster;
public Monster(int x, int y, World world) {
super(x, y, world);
w = 32;
h = 32;
this.world = world;
}
public void render(GameContainer gc, Graphics g) throws SlickException{
super.render(gc, g);
monster = new Image("gfx/world/monster.png");
g.drawImage(monster, x, y);
}
public void update(GameContainer gc, int delta) throws SlickException{
super.update(gc, delta);
Random move = new Random();
int number;
for(int counter=1; counter<=1;counter++){
number = move.nextInt(4);
System.out.println(number);
if(number == 0){
setDy(-1);
}else if(number == 1){
setDx(-1);
}else if(number == 2){
setDy(5);
}else if(number == 3){
setDx(5);
}else{
setDx(0);
setDy(0);
}
}
}
}
公共类怪物扩展实体{
私人世界;
形象怪物;
公共怪物(整数x,整数y,世界){
超级(x,y,世界);
w=32;
h=32;
这个世界=世界;
}
公共void渲染(GameContainer gc、Graphics g)引发异常{
超级渲染(gc,g);
怪物=新图像(“gfx/world/monster.png”);
g、 drawImage(怪物,x,y);
}
公共无效更新(GameContainer gc,int delta)引发异常{
超级更新(gc、delta);
随机移动=新随机();
整数;
对于(int counter=1;counter尝试添加
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
e.printStackTrace();
}
wherems
-需要多少毫秒,例如1000将NPC移动封装在一个单独的线程中,并在该线程中调用thread.sleep暂停移动
这是一个很好的教程,并展示了一个休眠线程的示例。这是游戏中使用的一种常用技术,用于具有不同的更新和渲染速率。
您需要做的是(伪代码中的示例):
1-初始化时间变量-DateTime lastUpdate=new DateTime()
每次进入循环时:
2-检查是否已过某个时间-lastUpdate.hasPassed(X_time,new DateTime())
3-如果时间已过(最后一行为true),lastUpdate=new DateTime()
4-Else返回调用更新函数的内容。看起来您希望减慢调用该函数的内容,而不是在方法更新内部的任何地方减慢更新本身。请参阅上面的代码更新。此解决方案的问题(在当前线程上插入睡眠)当您可以计算其他内容/渲染时,所有程序都将休眠。@NunoPinheiroThread#sleep
只延迟当前线程的执行,而不是程序处理的所有线程。@Vulcan,这是真的。我的意思是,在这种情况下,他可能在单线程游戏引擎/fr中只运行一个线程amework调用它的代码。所以在这种情况下,我相信整个程序都会休眠。如果你正在实现线程,这是个好主意——不过,这看起来像是编写基本游戏的练习,线程可能会使事情过于复杂。