我正在使用 slick2d 制作马里奥类型的克隆游戏。我们有 50x50 的图像用作将要放在地板上的块。每当我将此代码放入 for 循环中时,我都可以看到正在绘制并重绘的块一直到指定区域的末尾,而不是每 50 个像素绘制一个块。
package edu.bsu.cs222.finalProject.states;
public class GameState extends BasicGameState {
int stateID = 1;
Image background;
Image block;
float x = 0;
float y = -370;
float Dx = x + 200;
float Dy = y + 810;
private float verticalSpeed = 0.0f;
private float horizontalSpeed = 1.8f;
private float imagepositionx=0;
private float imagepositiony=500;
boolean jumping = false;
Animation cowboy, movingLeft, movingRight, movingUp, stoppedLeft,
stoppedRight;
int[] animationDuration = { 200, 200 };
public GameState(int stateID) {
this.stateID = stateID;
}
@Override
public void init(GameContainer gc, StateBasedGame sbg)
throws SlickException {
background = new Image("res/ui/background.png");
block = new Image("res/obj/block.png");
Image[] walkLeft = { new Image("res/char/cowboyleft1.png"),
new Image("res/char/cowboyleft2.png") };
Image[] walkRight = { new Image("res/char/cowboyright1.png"),
new Image("res/char/cowboyright2.png") };
Image[] stopLeft = { new Image("res/char/cowboyleft1.png"),
new Image("res/char/cowboyleft2.png") };
Image[] stopRight = { new Image("res/char/cowboyright1.png"),
new Image("res/char/cowboyright2.png") };
movingLeft = new Animation(walkLeft, animationDuration, true);
movingRight = new Animation(walkRight, animationDuration, true);
stoppedLeft = new Animation(stopLeft, animationDuration, false);
stoppedRight = new Animation(stopRight, animationDuration, false);
cowboy = stoppedRight;
}
@Override
public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
throws SlickException {
background.draw(x, y);
g.drawString("Cowboy's X:" + x + "\nCowboy's Y: " + y, 400, 20);
cowboy.draw(Dx, Dy);
if(imagepositionx <3000)
{
g.drawImage(block, imagepositionx, imagepositiony);
imagepositionx += 50;
}
//pillar1
block.draw(600, 450);
block.draw(600, 400);
g.drawImage(block, 600, 400);
g.drawImage(block, 600, 350);
//3 in air
g.drawImage(block, 800, 250);
g.drawImage(block, 850, 250);
g.drawImage(block, 900, 250);
//pillar2
g.drawImage(block, 1100, 450);
g.drawImage(block, 1100, 400);
g.drawImage(block, 1100, 350);
}
@Override
public void update(GameContainer gc, StateBasedGame sbg, int delta)
throws SlickException {
Input input = gc.getInput();
if (input.isKeyDown(Input.KEY_LEFT)) {
cowboy = movingLeft;
x += horizontalSpeed;
if (x > 0) {
x -= delta * horizontalSpeed;
}
}
if (input.isKeyDown(Input.KEY_RIGHT)) {
cowboy = movingRight;
x -= horizontalSpeed;
if (x < -2975.0) {
x += delta * horizontalSpeed;
}
}
if (input.isKeyDown(Input.KEY_UP) && !jumping) {
verticalSpeed = -3.0f;
jumping = true;
}
if (jumping) {
verticalSpeed += .03f * delta;
}
if (Dy > 470) {
jumping = false;
verticalSpeed = 0;
Dy = 470;
}
Dy += verticalSpeed;
}
@Override
public int getID() {
return stateID;
}
}
使用此代码也遇到问题,他们在屏幕上移动而不是停留在固定位置。
g.drawImage(block, 600, 400);