gpt4 book ai didi

java - 光滑的物体运动

转载 作者:太空宇宙 更新时间:2023-11-04 14:03:11 25 4
gpt4 key购买 nike

我正在制作一款游戏,用户应该躲避物体。但是,我无法弄清楚如何让障碍物随着用户移动而在屏幕上随机移动。下面是我使用过的代码

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;
}

}

最佳答案

  1. 在 update 方法中移动(更改 x 和 y)实体时要小心,因为它不会每秒调用一次。它被称为每,每帧之间的时间不是固定的(取决于很多因素,比如你的电脑)。

    所以你不能只做“spriteYPos -= 2”,因为有时一秒钟会调用10次,有时是11或12次;让你的动画变得生涩。

  2. 如何面对这个问题?这里是您的更新方法的delta参数。 delta 对应于每帧之间的毫秒数。所以基本上你只需将它与 X 和 Y 的更新一起使用即可。

    例如 spriteYPos -= 0.2 * delta;

  3. 最后,要在屏幕上随机移动或不移动障碍物,您必须使用 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

关于java - 光滑的物体运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112956/

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