光滑的物体运动

时间:2015-03-18 02:02:35

标签: java slick2d

我正在制作一个用户应该躲避物品的游戏。但是,我无法弄清楚当用户移动时如何使障碍物随机移动到屏幕周围。以下是我使用的代码

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 个答案:

答案 0 :(得分:0)

  1. update 方法中移动(更改x&amp; 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;
    }
    
  4. 您可以在此处找到有关delta(有关如何使用以及如何使用)的更多信息:LWJGL Basic Timing