2015-12-29 5 views
0

У меня есть этот класс, который расширяет SurfaceView. Код, который я до сих пор заставляет игрока следить за моим пальцем, но он также позволяет игроку «телепортироваться» туда, куда палец идет, и я этого не хочу.Как сделать изображение (нарисованное) следовать за моим пальцем?

@Override 
public boolean onTouchEvent(MotionEvent event) { 

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

     case MotionEvent.ACTION_DOWN: 

       if (!player.getPlaying()) { 
        player.setPlaying(true); 

       } 
       if (!player.playerAlive) { 
        if ((pointerX >= rescaleX(600) && pointerX <= rescaleX(842)) && (pointerY >= rescaleY(900) && pointerY <= rescaleY(1142))) { 
         //newGame(); 
         player.setX(600); 
         player.setY(900); 
        } 
       } 
       if (player.playerAlive) { 
        // player.move(true); 
       } 

      break; 

     case MotionEvent.ACTION_MOVE: 

       if (!player.getPlaying()){ 
        player.setPlaying(true); 
        player.move(true); 
       } else { 
        player.move(true); 
       } 

      break; 

     case MotionEvent.ACTION_UP: 
      //player.move(true); 
      if (!player.playerAlive) { 
       if ((pointerX >= rescaleX(600) && pointerX <= rescaleX(842)) && (pointerY >= rescaleY(900) && pointerY <= rescaleY(1142))) { 
        newGame(); 
        player.setX(600); 
        player.setY(900); 
       } 
      } 
      break; 
    } 
    return true; 
    //return super.onTouchEvent(event); 
    } 

Вот метод перемещения() в классе игрока:

public void move(boolean b) { 
    if(b){ 
     if((GamePanel.pointerX * GamePanel.WIDTH/MainActivity.dispX) - 141 >= 1380 - getWidth()){setX(1380-getWidth());} 
     if((GamePanel.pointerY * GamePanel.HEIGHT/MainActivity.dispY) - 141 >= 1880 - getHeight()){setY(1880 - getHeight());} 
      setX((int) ((GamePanel.pointerX * GamePanel.WIDTH/MainActivity.dispX) - 141)); 
      setY((int) ((GamePanel.pointerY * GamePanel.HEIGHT/MainActivity.dispY) - 141)); 

    } 

ответ

0

Не «напрямую» перевести входы пальца в «логику» для перемещения вещей.

Вам необходимо, чтобы ваш метод onTouchEvent считывал значения X и Y, где находится отпечаток пальца, а затем передает это на некоторую логику. Затем эта логика должна решить, следует ли передавать эту информацию новому методу moveCharacterTo(x,y) «Логика», о которой я упоминал выше, может быть несколько вещей. Вы можете использовать шаблон стратегии, чтобы решить, что такое стратегия/политика (алгоритм) для обработки экрана. Или у вас может быть только один класс с методом сравнения событий касания и посмотреть, насколько они «близки» к персонажу или нет, а затем реагируют соответственно.

+0

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