尝试沿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轴移动时,任何精灵都会消失的主要内容,如果未能解决你的问题,请参考以下文章

如何沿 y 轴 iphone 向下移动按钮操作

Cocos2d V3 - 获取当前精灵位置?

UIView 沿 Y 轴平移手势

沿X轴移动

六边形地图Cube coordinates理解

unity中如何让物体以一定速度沿y轴旋转90度?