Игрок двигается только тогда, когда экран в ACTION_DOWN или ACTIONMOVE должен двигаться при прикосновении
Хорошо, я создал класс 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 обновляется только при нажатии или перетаскивании экрана, я надеялся, что он будет двигаться, когда палец находится на эфирной стороне экрана. Есть идеи?
2 ответа
Если вы не двигаете пальцем, вы перестанете получать обновления.
Вместо звонка move
из TouchListener, вы должны установить логический флаг, как shouldMove
и затем с фиксированным интервалом введите команду перемещения, если shouldMove
правда.
Тогда ваш персонаж будет продолжать двигаться, даже когда вы перестанете получать сенсорные события. Просто очистите это логическое значение, когда вы поднимаете палец или выходите из определенной области.
Вы также можете просто установить значение x на сенсорном листе, затем проверить его местоположение, чтобы определить левое или правое в основном цикле (как вы находитесь в сенсорном слушателе) и просто установить его на 0, когда палец поднят вверх
редактировать: так
if(MotionEvent.ACTION_DOWN== evt.getAction() || MotionEvent.ACTION_MOVE== evt.getAction())
{
moveX = evt.getX();
}
затем проверьте moveX позже и установите moveX в 0; на MotionEvent.ACTION_UP