我使用slick2d來製作mario類型的克隆遊戲。我們有50x50的圖像,我們正在使用的塊將會在地板上。無論何時將此代碼放入for循環,我都可以看到正在繪製的塊,並一直重繪到指定區域的末尾,而不是每隔50個像素繪製一個塊。使用for循環繪製地面上的塊
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);
你能發表更多的代碼嗎? –
另外,在單個名稱中大寫單詞是一種很好的做法;例如'imagePositionX'而不是'imagepositionx'。 –
您的圖片有輪廓?可能是它畫的框,但你無法看到。 – CRazyProgrammer