0

こんにちは、私は小さなゲームを作成していますが、この問題が発生しました。通常の動きや遅い動きをするとイベントは正常に実行されますが、非常に速い動きをするとイベントがクラッシュします。どうすればいいですか?これは私のスプライトの onAreaTouch イベントです:

@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
    int posInicial=estadoCarta;
        switch(pSceneTouchEvent.getAction()) {
             case MotionEvent.ACTION_DOWN:
                 posX=getX()-getWidth()/2;
                 posY=getY()-getHeight()/2;
                 this.setScale(1.2f);
                 break;
             case MotionEvent.ACTION_MOVE:
                 switch(estadoCarta){
                    case POS_PJ1:
                        this.setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
                        if(pSceneTouchEvent.getY()<=430){
                             this.setAlpha((float) 0.5);
                             estadoCarta=POS_SELECIONADO_MESA;
                        }
                    break;
                    case POS_SELECIONADO_MESA:
                        this.setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
                        if(pSceneTouchEvent.getY()>430){
                             this.setAlpha((float) 1);
                             estadoCarta=POS_PJ1;
                        }
                    break;
                 }
                 break;


            case MotionEvent.ACTION_UP:
                this.setScale(1.0f);

                switch(estadoCarta){
                    case POS_PJ1:
                        setPosition(posX+getWidth()/2,posY+getHeight()/2);
                        estadoCarta=posInicial;
                    break;
                    case POS_SELECIONADO_MESA:
                        Posicion pos=escena.getPosicionLibre();
                        this.setPosition(pos.x,  pos.y);
                        escena.Juega(this);
                    break;
                 }
                 break;
            default:
                this.setScale(1.0f);
                switch(estadoCarta){
                    case POS_PJ1:
                        setPosition(posX+getWidth()/2,posY+getHeight()/2);
                        estadoCarta=posInicial;
                    break;
                    case POS_SELECIONADO_MESA:
                        Posicion pos=escena.getPosicionLibre();
                        this.setPosition(pos.x,  pos.y);
                        escena.Juega(this);
                    break;
                    case POS_MESA:
                        this.setAlpha(0.5f);
                        estadoCarta=POS_PARA_JUGAR;
                    break;
                    case POS_PARA_JUGAR:
                         this.setAlpha(1f);
                         estadoCarta=POS_MESA;
                    break;
                 }
                break;
         }
    return true;
}

繰り返しますが、問題は素早い動きをしたときだけです。

4

1 に答える 1

0

解決しました!!! メインのゲーム アクティビティの EngineOptions onCreateEngineOptions() でこのコードを使用します。

public EngineOptions onCreateEngineOptions()
{
    camera = new BoundCamera(0, 0, 800, 480);
    EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(), this.camera);
    engineOptions.getAudioOptions().setNeedsMusic(true).setNeedsSound(true);
    engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
    engineOptions.getTouchOptions().setTouchEventIntervalMilliseconds(1);
    return engineOptions;
}

これは、通常の 20 ミリ秒の遷移を 1 に短縮するのに役立ちます。その後、タッチ効果の応答が速くなります!!

于 2013-07-17T03:43:27.867 に答える