尝试沿y轴移动时,任何精灵都会消失
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试沿y轴移动时,任何精灵都会消失相关的知识,希望对你有一定的参考价值。
我正在开发一个角色能够跳跃的游戏。他可以使用Vector2完美地沿x轴移动,但是只要我添加y分量(为了能够向上移动),我的精灵就会消失。我通过这种方式实现他的x轴运动:
position.add(200 * dt, velocity.y * dt);
其中200是速度,dt是自上一帧渲染以来经过的时间。
为了向上移动,我有一个名为“jump”的方法,它以这种方式实现:
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();
}
答案
猜测,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中的屏幕#render定义如下:
/** Called when the screen should render itself.
* @param delta The time in seconds since the last render. */
public void render (float delta);
因此传递给dt的参数真的很高。
原始建议仍然存在 - 在调试器中逐步执行代码或打印出值,以便您可以看到正在发生的事情。
以上是关于尝试沿y轴移动时,任何精灵都会消失的主要内容,如果未能解决你的问题,请参考以下文章