我正在制作一个用户应该躲避物品的游戏。但是,我无法弄清楚当用户移动时如何使障碍物随机移动到屏幕周围。以下是我使用的代码
package javagame;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
public class Play extends BasicGameState{
int spriteXPos = 0;
int spriteYPos = 422;
int bulletXPos = 690;
int bulletYPos = 400;
public Play (int state) {
}
public void init(GameContainer gameContainer, StateBasedGame stateBasedGame)
throws SlickException {
}
public void render(GameContainer gameContainer, StateBasedGame
stateBasedGame, Graphics g) throws SlickException {
Image castle = new Image("res/rsz_1background02.png");
Image spriteWalking = new Image("res/marioWalking.png");
Image spriteJumping = new Image("res/marioJumping.png");
Image bullet = new Image("res/bullet.png");
g.drawImage(castle, 0, 0);
g.drawImage(spriteWalking, spriteXPos, spriteYPos);
g.drawImage(bullet, bulletXPos, bulletYPos);
g.drawString("X-Coordinate: " + spriteXPos + "\nY-Coordinate: " +
spriteYPos, 620, 30);
}
public void update(GameContainer gameContainer, StateBasedGame
stateBasedGame, int delta) throws SlickException {
Input input = gameContainer.getInput();
if (input.isKeyDown(input.KEY_UP)) {
spriteYPos -= 2;
if (spriteYPos < 222)
spriteYPos += 2;
} else if (input.isKeyDown(input.KEY_DOWN)) {
spriteYPos += 2;
if (spriteYPos > 422)
spriteYPos -= 2;
} else if (input.isKeyDown(input.KEY_LEFT)) {
spriteXPos -= 2;
if (spriteXPos < 0)
spriteXPos += 2;
} else if (input.isKeyDown(input.KEY_RIGHT)) {
spriteXPos += 2;
if (spriteXPos > 496)
spriteXPos -= 2;
}
}
public int getID() {
return 1;
}
}
答案 0 :(得分:0)
在 update 方法中移动(更改x&amp; y)实体时要小心,因为它不会每秒调用一次。它被称为每个帧,并且每个帧之间的时间不固定(取决于很多东西,例如您的计算机)。
所以你不能只做“spriteYPos - = 2”,因为有时它会在一秒钟内被调用10次,有时会被调用11或12次;让你的动画生涩。
如何面对这个问题?以下是更新方法的 delta 参数。 delta对应于每帧之间的毫秒数。所以基本上你只需要将它与X和Y的更新一起使用。
例如 spriteYPos - = 0.2 * delta;
最后,要在屏幕上随机移动或不移动障碍物,您必须使用delta参数在更新方法中增加/减少障碍物的X / Y.
这样的事情:
public void update(GameContainer gameContainer, StateBasedGame stateBasedGame, int delta) throws SlickException {
[...]
bulletXPos += 0.1 * delta;
bulletYPos += 0.1 * delta;
}
您可以在此处找到有关delta(有关如何使用以及如何使用)的更多信息:LWJGL Basic Timing