我正在开发一款游戏,角色可以跳跃。他可以使用Vector2完美地沿x轴移动,但是一旦我添加了y分量(能够向上移动),我的精灵就消失了。我这样执行他的x轴运动:
position.add(200 * dt, velocity.y * dt);
其中200是速度,dt是自上一帧渲染以来经过的时间。
对于上移,我有一个称为“跳转”的方法,它是通过以下方式实现的:
public void jump () {
velocity.y = 20;
}
因此,在我的PlayScreen中,我将其称为Jump(跳跃),并且角色应该向上移动,但是消失了。我对游戏中的其他对象进行了尝试,它们的行为均相同-当我尝试将它们向上或向下移动时,它们就会消失。我真的不明白是什么问题。
P.S我的世界的尺寸为136像素(宽度)*设备的屏幕高度
更新更多信息: 这是我的整个角色类别:
public class Astroboy{
public Vector2 velocity;
public Vector2 position;
public Animation<TextureRegion> heroAnim;
private TextureAtlas atlas;
public Rectangle astroRect;
public Astroboy (float x, float y){
velocity = new Vector2(200, 0);
position = new Vector2(x, y);
atlas = new TextureAtlas("Anims/Hero_Anim.atlas");
heroAnim = new Animation<TextureRegion>(0.15f, atlas.findRegions("HeroRunning") , Animation.PlayMode.LOOP); // animation
}
public void update (float dt) {
position.add(velocity.x * dt, velocity.y * dt);
}
public void jump () {
velocity.y = 10;
}
public Animation<TextureRegion> getAnimation () {
return heroAnim;
}
}
SpriteBatch在PlayState屏幕上使用用于绘制运动对象的摄像机绘制了一个字符:
//SETTING CAMERAS
fixedCamera1 = new OrthographicCamera(); // camera for static background
fixedCamera1.setToOrtho(false, WORLD_WIDTH, WORLD_HEIGHT);
stageCamera1 = new OrthographicCamera(); // camera for a character in motion
stageCamera1.setToOrtho(false, WORLD_WIDTH, WORLD_HEIGHT);
//--------------------
batch.setProjectionMatrix(stageCamera1.combined);
batch.begin();
batch.draw(astroboy.getAnimation().getKeyFrame(stateTime, true), astroboy.position.x, astroboy.position.y, WORLD_WIDTH / 4, WORLD_HEIGHT / 4);
batch.end
只需
即可实现跳跃运动if (Gdx.input.justTouched()) {
astroboy.jump();
}
答案 0 :(得分:0)
猜测,dt比您想象的要高,并且乘法将精灵超出了范围。首先-使用x和y变量,并为其分配值200 * dt和velocity.y * dt,以便您了解发生了什么。
int x = 200 * dt;
int y = velocity.y * dt;
System.out.println("x="+x+", y="+y);
position.add(x, y);
修改
libgdx中的Screen#render定义如下:
/** Called when the screen should render itself.
* @param delta The time in seconds since the last render. */
public void render (float delta);
因此不太可能传递给dt的参数真的很高。
仍然保留原始建议-在调试器中逐步执行代码或打印出值,以便您查看正在发生的事情。