gpt4 book ai didi

java slick2D 模拟重力跳跃

转载 作者:行者123 更新时间:2023-12-02 08:13:30 26 4
gpt4 key购买 nike

所以我用 slick2D 用 java 做了一个小游戏,但我希望我的角色能够跳跃。现在我有这个:

if (container.getInput().isKeyPressed(Input.KEY_UP) && !jumping) { 
verticalSpeed = -1.0f * delta;//negative value indicates an upward movement
jumping = true;

}
if (jumping) {
verticalSpeed += .007f * delta;//change this value to alter gravity strength

}

playerY += verticalSpeed;
playerPoly.setY(playerY);

好吧,这让我的 Sprite 跳跃并坠落......永远。那么怎样才能让它在落地时不再掉落呢?我试过这个:

if (entityCollisionWith()){
jumping = false;
}

但它不起作用:(

我的跳跃代码:

import org.newdawn.slick.Animation;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;
import org.newdawn.slick.geom.Polygon;
import org.newdawn.slick.tiled.TiledMap;


public class Game extends BasicGame {

public BlockMap map;
Image player = null;
float playerX = 320;
float playerY = 288;
float scale = 1f;
private Polygon playerPoly;
boolean jumping = false;
float verticalSpeed = 0.0f;


public Game() {
super("my game");
}
public void init(GameContainer container) throws SlickException {
map = new BlockMap("data/Map01.TMX");
player = new Image("data/rightSprite.png");

playerPoly = new Polygon(new float[]{
playerX,playerY,
playerX+17,playerY,
playerX+17,playerY+48,
playerX,playerY+48
});

}
public void update(GameContainer container, int delta) throws SlickException {
if (container.getInput().isKeyDown(Input.KEY_LEFT)) {
playerX-=0.15;
playerPoly.setX(playerX);
if (entityCollisionWith()){
playerX+=0.15;
playerPoly.setX(playerX);
}
}
if (container.getInput().isKeyDown(Input.KEY_RIGHT)) {

playerX+=0.15;
playerPoly.setX(playerX);
if (entityCollisionWith()){
playerX-=0.15;
playerPoly.setX(playerX);
}
}
if (container.getInput().isKeyPressed(Input.KEY_UP) && !jumping) {
verticalSpeed = -1.0f * delta;//negative value indicates an upward movement
jumping = true;

}
if (entityCollisionWith()){
jumping = false;
verticalSpeed = -1.1f;
verticalSpeed = 0;
}

if (jumping) {
verticalSpeed += .01f * delta;//change this value to alter gravity strength

}

playerY += verticalSpeed;
playerPoly.setY(playerY);

if (entityCollisionWith()){
jumping = false;
verticalSpeed = 0;
}

}



public boolean entityCollisionWith() throws SlickException {
for (int i = 0; i < BlockMap.entities.size(); i++) {
Block entity1 = (Block) BlockMap.entities.get(i);
if (playerPoly.intersects(entity1.poly)) {
return true;
}
}
return false;
}


public void render(GameContainer container, Graphics g) {
BlockMap.tmap.render(0, 0);
player.draw(playerX, playerY, scale);
g.draw(playerPoly);
}
public static void main(String[] argv) throws SlickException {

AppGameContainer container = new AppGameContainer(new Game(), 640, 480, false);
container.start();
}
}

最佳答案

停止跳跃后您还应该重置速度变量:

if (entityCollisionWith()){
jumping = false;
verticalSpeed = 0;
}

关于java slick2D 模拟重力跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890799/

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