Java 如何降低一种方法的速度而不影响程序的其余部分?

Java 如何降低一种方法的速度而不影响程序的其余部分?,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;

我正在用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;
        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();
    }

where
ms
-需要多少毫秒,例如1000

将NPC移动封装在一个单独的线程中,并在该线程中调用thread.sleep暂停移动


这是一个很好的教程,并展示了一个休眠线程的示例。

这是游戏中使用的一种常用技术,用于具有不同的更新和渲染速率。 您需要做的是(伪代码中的示例):

1-初始化时间变量-DateTime lastUpdate=new DateTime()

每次进入循环时:

2-检查是否已过某个时间-lastUpdate.hasPassed(X_time,new DateTime())

3-如果时间已过(最后一行为true),lastUpdate=new DateTime()


4-Else返回

调用更新函数的内容。看起来您希望减慢调用该函数的内容,而不是在方法更新内部的任何地方减慢更新本身。请参阅上面的代码更新。此解决方案的问题(在当前线程上插入睡眠)当您可以计算其他内容/渲染时,所有程序都将休眠。@NunoPinheiro
Thread#sleep
只延迟当前线程的执行,而不是程序处理的所有线程。@Vulcan,这是真的。我的意思是,在这种情况下,他可能在单线程游戏引擎/fr中只运行一个线程amework调用它的代码。所以在这种情况下,我相信整个程序都会休眠。如果你正在实现线程,这是个好主意——不过,这看起来像是编写基本游戏的练习,线程可能会使事情过于复杂。