2012-03-14 14 views
1

私の更新方法は継続的に更新されます。ビットマップの移動がスムーズでなく、ぎくしゃくしています

@Override 
public void update(float deltaTime) { 
    Graphics g = game.getGraphics(); 
    List<TouchEvent> touchEvents = game.getInput().getTouchEvents(); 
    game.getInput().getKeyEvents(); 

    redPin.moveX(deltaTime); 

    int len = touchEvents.size(); 
    for (int i = 0; i < len; i++) { 
     TouchEvent event = touchEvents.get(i); 
     if (event.type == TouchEvent.TOUCH_UP) { 
      if (inBounds(event, 0, 360, 800, 120)) { 
       if (gameOver) { 
        // TODO game over methods 
       } else { 
        // TODO game is not over methods 
        level++; 
        blackBacking.randomizeX(); 
        blackBacking.setWidth(level + 1); 
       } 
       return; 
      } 
     } 
    } 
} 

マイマップクラス

public class RedPin { 
    private int xTracker = 400; 
    private int x = 400; 
    private int y = 85; 
    private int height = 111; 
    private long speed = 1000; 
    private float deltaTime; 
    private int direction = 1; 

    protected int getX() { 
     if (xTracker <= 86) { 
      x = -10; 
     } else if (xTracker >= 714) { 
      x = -10; 
     } else if (xTracker <= 713 && xTracker >= 87) { 
      x = xTracker; 
     } 
     return this.x; 
    } 

    protected int getY() { 
     if (this.xTracker == 86 || this.xTracker == 714) { 
      this.y = 88; 
     } else if (this.xTracker == 87 || this.xTracker == 713) { 
      this.y = 87; 
     } else if (this.xTracker == 88 || this.xTracker == 89 || this.xTracker == 712 || this.xTracker == 711) { 
      this.y = 86; 
     } else { 
      this.y = 85; 
     } 
     return this.y; 
    } 

    protected int getHeight() { 
     if (this.xTracker == 86 || this.xTracker == 714) { 
      this.height = 104; 
     } else if (this.xTracker == 87 || this.xTracker == 713) { 
      this.height = 105; 
     } else if (this.xTracker == 88 || this.xTracker == 712) { 
      this.height = 106; 
     } else if (this.xTracker == 89 || this.xTracker == 711) { 
      this.height = 107; 
     } else if (this.xTracker == 90 || this.xTracker == 710) { 
      this.height = 109; 
     } else if (this.xTracker == 91 || this.xTracker == 709) { 
      this.height = 110; 
     } else { 
      this.height = 111; 
     } 
     return this.height; 
    } 

    protected void moveX() { 
     if (this.xTracker >= 734) { 
      direction = 1; 
     } else if (this.xTracker <= 66) { 
      direction = -1; 
     } 
     xTracker = (int) direction * ((xTracker + 1)*deltaTime); 
     x = (int) direction * ((x + 1)*deltaTime); 
    } 

} 

g.drawPixmap(Assets.gameRedPin、redPin.getX()、redPin.getY()、0、0、2、redPin.getHeight())。

私はx + 1 * deltaTimeだけでコードを実行すると、ジャークの動きが少しあります。 私はそれをx + 2に設定するか、それ以上の動きをすると動きがさらに大きくなります。どのような 私は動きを滑らかにすることができますか?

+0

あなたはあまりにも懸命に働いていると思います。 [Lerp](http://developer.android.com/reference/android/view/animation/LinearInterpolator.html)は、あなたがここで達成しようとしていることのほとんどを行うようです。 – Thomas

答えて

0

deltaTimeの値をログに記録できますか?リフレッシュレートが低すぎる(つまり20FPS)、またはdeltaTime値が大きく変動している可能性があります。両方ともジャーキネスを引き起こします。また、エミュレータでコードをテストすると、間違いなくジャーキーになります。

+0

でも物理デバイスで動作していますが、デバッガが接続されているとパフォーマンスに問題が発生する可能性があります –

+0

Nexus Sで実行しています。補間を含める必要があるとお伝えしましたか? –

+0

補間はおそらくあなたのアニメーションをスムーズにするのに役立たないでしょう。そこにどのような種類のdeltaTimeが渡されてポストされているのかを投稿すれば、問題の原因を理解できます。 – Kai

関連する問題