我正在实施一个游戏,我正在使用加速计移动水桶来收集随机掉落的鸡蛋。我已经实现了可以正常工作的代码但问题是底部的铲斗在移动时摇晃很多。我很新到libgdx游戏开发所以我无法追踪问题。请帮我解决这个问题。谢谢
这是我的渲染方法:
public void render(float delta) {
switch(state)
{
case Running:
{
camera.update();
game.batch.setProjectionMatrix(camera.combined);
game.batch.begin();
game.batch.draw(splsh, 0,0,800,500);
game.batch.draw(bucketImage, bucket.x, bucket.y);
lastpos=bucket.x;
for (Rectangle raindrop : raindrops) {
game.batch.draw(dropImage, raindrop.x, raindrop.y);
}
game.batch.end();
stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f));
stage.draw();
Table.drawDebug(stage);
float accelX = Gdx.input.getAccelerometerX();
bucket.x=accelX*(-200); // reading the accelerometer values
if (Gdx.input.isKeyPressed(Keys.LEFT))
bucket.x -= 200 * Gdx.graphics.getDeltaTime();
if (Gdx.input.isKeyPressed(Keys.RIGHT))
bucket.x += 200 * Gdx.graphics.getDeltaTime();
if (bucket.x < 0)
{
bucket.x = 0;
}
if (bucket.x >Gdx.graphics.getWidth())
{
bucket.x = 800 - 64;
}
if (TimeUtils.nanoTime() - lastDropTime > 1000000000)
{ total++;
spawnRaindrop();
}
Iterator<Rectangle> iter = raindrops.iterator();
while (iter.hasNext()) {
Rectangle raindrop = iter.next();
raindrop.y -=100 * Gdx.graphics.getDeltaTime();
if (raindrop.y + 64 < 0)
{
iter.remove();
dispose();
game.setScreen(new EndScreen(game));
}
if (raindrop.overlaps(bucket)) {
dropsGathered++;
// dropSound.play();
iter.remove();
}
}
break;
}
}
}
答案 0 :(得分:3)
我不确定这是不是你的问题,但我想是的。您根据手机倾斜度/加速度计值而不是 SPEED 来设置铲斗的 POSITION 。一个人不能在没有移动的情况下握住手机,他的手总是摇晃一下。这可能就是你的水桶晃动的原因。尝试使用键盘控件:
bucket.x+=accelX*20*delta;
为什么* 20而不是* 200?这是因为accelX的最大值为10.因此,如果您将手机倾斜到最大accelX,则它是10 * 20 * delta,就像您按下键盘上的键一样。
请注意:您正在调用Gdx.graphics.getDeltaTime();
,但您处于渲染方法中,并且渲染方法具有参数float delta
,这正是Gdx.graphics.getDeltaTime();
。