如何让我的图像停止重复随机生成坐标边界值?
How can I get my image to stop repeatedly randomly generating co-ordinate boundary values?
我正在使用 Slick2D 库在 Java 中创建游戏,我是这方面的真正初学者。
我一直在尝试让我创建的图像对象在屏幕上随机生成,这很有效,除了它会不断随机生成循环图像的坐标。
我希望它随机生成一次,直到另一个对象接触到它,在这种情况下它会消失,并且同一图像对象的另一个实例会在随机位置生成。
到目前为止,我已尝试为图像的 x 和 y 坐标创建随机对象。
Image enemy;
int enemyX = 800;
int enemyY = 500;
int RandomX;
int RandomY;
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
enemy = new Image("C:\Users\User\IdeaProjects\Slick2D\src\main\resources\enemy.png");
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
background.draw();
blobfish.draw(RandomX, RandomY);
enemy.draw(RandomX, RandomY);
ninja.draw(characterX, characterY);
g.drawString("X pos: " + characterX + "\nY pos: " + characterY, 400, 200);
Random enemyX = new Random();
Random enemyY = new Random();
RandomX = enemyX.nextInt(1500);
RandomY = enemyY.nextInt(1000);
public void update(GameContainer gc, StateBasedGame sbg, int delta) {
enemy.startUse();
}
没有错误信息。但是我希望它只生成一次但是它生成了很多次所以它看起来像在页面上闪烁。
非常感谢任何帮助!
看起来您每次渲染图像时都在更新 RandomX
和 RandomY
,而不是仅在触摸到敌人时更新它们。你通常不想在渲染函数中更新状态,因为它可以在一秒钟内被调用多次。相反,您有一个循环事件处理程序(例如 Timer)来处理状态更新,并在呈现方法中不可变地呈现状态。
我已经制作了一些您可能需要的快速伪代码:
Image enemy;
int enemyX = 800;
int enemyY = 500;
Random random = new Random();
int RandomX = random.nextInt(1500);
int RandomY = random.nextInt(1000);
...
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
//draw things
...
Point enemyLoc = game.getEnemy().getLocation();
enemy.draw(enemyLoc.x, enemyLoc.y);
}
//UPDATE FUNCTION
public void ???(game, ???) {
...
//update OUTSIDE of render function
if(game.getEnemy().isTouched()) {
game.getEnemy().setLocation(random.nextInt(1500), random.nextInt(1000));
}
...
}
我正在使用 Slick2D 库在 Java 中创建游戏,我是这方面的真正初学者。
我一直在尝试让我创建的图像对象在屏幕上随机生成,这很有效,除了它会不断随机生成循环图像的坐标。 我希望它随机生成一次,直到另一个对象接触到它,在这种情况下它会消失,并且同一图像对象的另一个实例会在随机位置生成。
到目前为止,我已尝试为图像的 x 和 y 坐标创建随机对象。
Image enemy;
int enemyX = 800;
int enemyY = 500;
int RandomX;
int RandomY;
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
enemy = new Image("C:\Users\User\IdeaProjects\Slick2D\src\main\resources\enemy.png");
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
background.draw();
blobfish.draw(RandomX, RandomY);
enemy.draw(RandomX, RandomY);
ninja.draw(characterX, characterY);
g.drawString("X pos: " + characterX + "\nY pos: " + characterY, 400, 200);
Random enemyX = new Random();
Random enemyY = new Random();
RandomX = enemyX.nextInt(1500);
RandomY = enemyY.nextInt(1000);
public void update(GameContainer gc, StateBasedGame sbg, int delta) {
enemy.startUse();
}
没有错误信息。但是我希望它只生成一次但是它生成了很多次所以它看起来像在页面上闪烁。
非常感谢任何帮助!
看起来您每次渲染图像时都在更新 RandomX
和 RandomY
,而不是仅在触摸到敌人时更新它们。你通常不想在渲染函数中更新状态,因为它可以在一秒钟内被调用多次。相反,您有一个循环事件处理程序(例如 Timer)来处理状态更新,并在呈现方法中不可变地呈现状态。
我已经制作了一些您可能需要的快速伪代码:
Image enemy;
int enemyX = 800;
int enemyY = 500;
Random random = new Random();
int RandomX = random.nextInt(1500);
int RandomY = random.nextInt(1000);
...
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
//draw things
...
Point enemyLoc = game.getEnemy().getLocation();
enemy.draw(enemyLoc.x, enemyLoc.y);
}
//UPDATE FUNCTION
public void ???(game, ???) {
...
//update OUTSIDE of render function
if(game.getEnemy().isTouched()) {
game.getEnemy().setLocation(random.nextInt(1500), random.nextInt(1000));
}
...
}