1

私は持っています:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        synchronized (event)  
        {  

        try {
            Thread.sleep(16);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if(event.getAction() == MotionEvent.ACTION_DOWN){

          isDown = true;
        }else if(event.getAction() == MotionEvent.ACTION_MOVE){

          isDown = true;
        }else if(event.getAction() == MotionEvent.ACTION_UP){

         isDown = false;
        }

        return true;
        } 

    }

それから私の中で私MainGame threadは使用しますsetCharacterPosition();

 public void setCharacterPosition(){
    if(isDown){
CharacterX += 32;
}
    }

しかし、これは私のキャラクターをあまりにも速く実行させるので、私は追加しようとしました:

Thread.sleep(500);

なぜなら、私は自分のキャラクターをセンコンドの半分ごとに32ずつ増やしたいだけだからです。

ITは機能しますが、FPSを2〜3に下げます。

どうすれば正しくできますか?

//サイモン

4

2 に答える 2

3

私はJavaやAndroidについてほとんど知りませんが、これは間違った方法のようです。

あなたが求めているのは、ゲームループ(ゲームロジックをフレームごとに継続的に実行および更新するループ)を設定することです。

このループは、時間間隔で実行されます(通常、1秒あたり60フレーム、またはモバイルプラットフォームではそれ以下)。

各フレームで、最後のフレームからの経過時間に基づいてゲームオブジェクトの動きをスケーリングできます。

これにより、使用しているデバイスのクロック速度に関係なく、スケーリングされた動きが得られます。

これらの優れたリソースで、アボットゲームループの詳細をご覧ください。

シンプルなJavaAndroidゲームループ

ゲームループ

Androidゲームループ

于 2011-07-14T20:45:31.817 に答える
0

Android UIはシングルスレッドモデルに基づいているため、UIスレッドをブロックしないでください。onTouchEventはUIスレッドで実行されます...Thread.sleepを呼び出すと、UIスレッドがその特定の期間スリープするようになります。

この助けを願っています。参照:痛みのない糸脱毛

于 2011-07-14T20:52:30.303 に答える