2015-12-29 4 views
0

Я пытаюсь сделать растровое изображение, хранящееся в классе Player, следовать за пальцем, не давая ему возможность «телепортироваться». Я первый попробовал этот блок кода:Проблемы с растровым изображением после моего пальца

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    pointerX = (int)event.getX(); 
    pointerY = (int)event.getY(); 
    switch (event.getAction()) { 

     case MotionEvent.ACTION_DOWN: 

      pointerX = (int)event.getX(); 
      pointerY = (int)event.getY(); 
      if (player.playerAlive) { 
       if((event.getX() > player.getX() || event.getX() < player.getX() + player.getWidth()) && 
        (event.getY() > player.getY() || event.getY() < player.getY() + player.getHeight())) { 
        isDown = true; 
       } 
      } 

      break; 

     case MotionEvent.ACTION_MOVE: 
       if(isDown){ 
        player.move(true); 
       } 

      break; 

     case MotionEvent.ACTION_UP: 
      isDown = false; 
      break; 
    } 
    return true; 
    } 

Однако я заметил, что даже малейшее смещение пальца при касании приведет к Action_MOVE, поэтому я заменил код в ACTION_MOVE на это:

if(isDown){ 
    if(event.getX() < pointerX - 20 || event.getX() > pointerX + 20) 
     player.move(true); 
    if(pointerY < event.getY() - 20 || pointerY > event.getY() + 20) 
     player.move(true); 
} 

Но это привело к тому, что игрок не двигался вообще, когда игрок правильно следил за пальцем, но он также «телепортировался», если бы я удалился от игрока. Как я могу правильно избавиться от «телепортации»?

ответ

1

Вы правильно используете ACTION_MOVE, но вы сравниваете event.getX() с указателемX, когда pointerX установлен равным event.getX(). Вы хотели сравнить его с player.getX()?