通过单点触摸移动对象--Libgdx

时间:2016-12-08 06:44:15

标签: libgdx

可能这是一个非常基本的问题,但作为一个新手,我对此感到困惑。

在我的libGDX项目中,我想移动播放器。 最初的玩家在左侧。对于第一个点击玩家应该移动到另一侧并占据那里的位置。对于下一个点击它应该移动到左边。并将继续这样。

我实现了这个逻辑。现在的问题是我的播放器根本没有移动但只是占据了相反的位置。我使用了速度值,但它对代码没有任何影响。

我想让它一路走来,而不仅仅是占据这个位置。 请帮忙。

 public  float ninjaX = Constants.W_WIDTH;
public  float ninjaY =Constants.WORLD_HEIGHT/2+Constants.WORLD_HEIGHT/4;
public  float ninjaVelocity =100f;
public boolean isLeftBool=true;

public void ninjaMove() {
    if (isLeftBool) {


            ninjaX = ninjaX+ ninjaVelocity;
            setPosition(Constants.WORLD_WIDTH - (Constants.W_WIDTH+Constants.PLAYER_HEIGHT/2), ninjaY);

        isLeftBool = false;

    }
    else 
    {
        ninjaX=ninjaX-ninjaVelocity;
        setPosition(ninjaX,ninjaY);
        isLeftBool = true;
    }

}

在渲染中更新玩家:

if (MyInputProcessor.isTap) {
        MyInputProcessor.isTap = false;
        ninja.ninjaMove();

    }

2 个答案:

答案 0 :(得分:3)

您的球员坐标变化应取决于增量时间:

  

x1 = x0 + v t

x1 - 是新坐标

x0 - 是当前坐标

v - 速度

Δ t - x0 x1 之间的时间跨度

LibGDX provides获取当前帧和最后帧之间时间跨度的方法:

  

Gdx.graphics.getDeltaTime();

因此,相应地更改代码应该让您的播放器顺利移动(取决于速度):

ninjaX = ninjaX + ninjaVelocity * Gdx.graphics.getDeltaTime();

else 块中的减法相同。

你也可能想要设置x坐标(ninjaX)和y(目前你没有在 setPosition 方法中传递它):

setPosition(ninjaX, ninjaY);

*我猜这里是因为我不知道该方法的作用

答案 1 :(得分:0)

这只是你如何解决这个问题的一个例子。 你没有解释setPosition()的作用以及调用它的原因所以我会忽略它。

在你的渲染()中:

public void render(float delta){
    ....
    ninja.update(delta);
}

在你的Ninja.class

private final Vector2 leftPos = new Vector(20, 60);
private final Vector2 rightPos = new Vector(80, 60);
private Rectangle bound = new Rectangle(80,60,32,32);
private Vector2 currentPos;
private float moveSpeed = 100f;

public Ninja(){
    currentPos = leftPos;
}

public void update(float delta){
   if(bound.x > currentPos.x)bound.x += moveSpeed * delta;
   else bound.x -= moveSpeed * delta;
}

public void move(){
    if(currentPos == leftPos)currentPos = rightPos;
    else currentPos = leftPos;
}

然后在touchDown()

中输入处理器调用ninja.move()

这些都没有经过测试。

你需要将moveSpeed与delta时间相乘的原因是使移动独立于fps。这样,无论游戏运行多少fps,忍者都会在同一时间内移动相同的距离。