0

わかりました、ontouchlistenerクラスを作成しました:

package drop.out.Game;

import android.view.MotionEvent;

import android.view.View;

import drop.out.Game.Model.Player;

public final class TrackingTouchListener 

 implements View.OnTouchListener{

//player class
private final Player mplayer;
Player plyr;

//constructor bringing in the player
TrackingTouchListener(Player plyr){mplayer = plyr;}

    //on touch stuff
     public boolean onTouch(View v, MotionEvent evt) {

         /**@if touching/moving on the left side of screen */
         if(MotionEvent.ACTION_DOWN== evt.getAction() && evt.getX() < (v.getWidth()/2) || MotionEvent.ACTION_MOVE== evt.getAction() && evt.getX() <(v.getWidth()/2)){
             moveL(mplayer);
         }
         /**@if touching/moving on the right side of the screen */
         if(MotionEvent.ACTION_DOWN== evt.getAction() && evt.getX() > (v.getWidth()/2) || MotionEvent.ACTION_MOVE== evt.getAction() && evt.getX() >(v.getWidth()/2)){
             moveR(mplayer);
         } 

         return true; 
     }

     //call functions in the player class that moves the player x by -1
     private void moveL(Player player){
         player.moveL();
         //e.g. player_x -=10;
     }

     private void moveR(Player player){
         player.moveR();  
         //e.g.player_x +=10;
     }

}

残念ながら、player_xは、画面が押されたとき、または画面をドラッグしたときにのみ更新されます。指が画面のエーテル側にあるときに移動することを望んでいました。何か案は?

4

2 に答える 2

0

指を動かしていない場合は、更新の取得を停止します。

moveTouchListenerから呼び出す代わりに、のようなブールフラグを設定し、trueのshouldMove場合shouldMoveは一定の間隔でmoveコマンドを発行する必要があります。

そうすれば、タッチイベントの受信を停止しても、キャラクターは動き続けます。指を離すか、特定の領域から移動するときに、このブール値をクリアするだけです。

于 2012-12-07T23:33:18.280 に答える
0

また、タッチリスナーにx値を設定し、その位置を確認してメインループの左または右を判別し(タッチリスナー内にいる場合と同様)、指を持ち上げたときに0に設定することもできます。

編集:そう

if(MotionEvent.ACTION_DOWN== evt.getAction()  || MotionEvent.ACTION_MOVE== evt.getAction()) 
{
    moveX = evt.getX();
}

次に、moveXを後で確認し、moveXを0に設定します。MotionEvent.ACTION_UPで

于 2012-12-07T23:39:30.580 に答える