2016-12-30 1 views
0

CanvasSurfaceView을 사용하여 간단한 볼 게임을 만들려고합니다. 나는 공을 화면 주위로 움직이기를 원한다. 나는 이것을 onTouchEvent()으로 구현했다. 나는 화면 어디에서나 볼을 성공적으로 움직일 수 있습니다. 하지만 내 문제는 내가 화면을 터치하고 볼을 움직이기 시작했을 때 볼이 화면을 터치 한 지점에서부터 움직이기 시작하는 것입니다.캔버스에서 안드로이드의 현재 위치를 얻는 방법

현재 위치에서 공을 이동하고 싶습니다. 이사를 시작할 때 어떻게 현재 위치를 알 수 있습니까?

private void draw(int updatedValue) { 
     canvas = surfaceHolder.lockCanvas(); 
     canvas.drawColor(Color.RED); 
     canvas.drawBitmap(ball.getBitmap(), updatedValue, screenY - ball.getBitmap().getHeight() - 260, paint); 
     surfaceHolder.unlockCanvasAndPost(canvas); 
    } 

여기 내 Ball.java 클래스 :

public class Ball { 

    private int ball_x, ball_y; 
    private Bitmap bitmap; 
    private int minX, maxX; 

    public Ball(Context context, int screenX, int screenY) { 

     bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon_ball); 
     maxX = screenX - bitmap.getHeight(); 
     minX = 0; 

    } 
+0

당신의''ball'' 객체의 현재 x와 y..what을 가져와야합니까? –

+0

''int previous_x = ballObject.getX();'''previous_x = event.getX()''와 같은 것 –

+0

나는 그것을 얻지 못한다. – AbhayBohra

답변

0

여기서 문제가 있다는 것입니다 여기에

onTouchEvent()

@Override 
    public boolean onTouchEvent(MotionEvent event) { 

     int updated_x = (int) event.getX(); 

     switch (event.getAction() & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_UP: 
       System.out.println("Action Up"); 
       break; 

      case MotionEvent.ACTION_DOWN: 

       break; 

      case MotionEvent.ACTION_MOVE: 

       draw(updated_x); 
       System.out.println("Action Move"); 
       break; 
     } 
     return true; 
    } 

draw 방법입니다 updatedValue은 절대 값입니다. 위치. 대신 델타 값이어야합니다. 위의 코드에서

public boolean onTouchEvent(MotionEvent event) { 

    int updated_x = (int) event.getX(); 

    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_UP: 
      System.out.println("Action Up"); 
      break; 

     case MotionEvent.ACTION_DOWN: 
      mInitial_x = updated_x; 
      break; 

     case MotionEvent.ACTION_MOVE: 
      final int delta_x = mInitial_x - updated_x; 
      draw(delta_x); 
      System.out.println("Action Move"); 
      break; 
    } 
    return true; 
} 

, 난 당신이 감동 초기 위치를 추적하기 위해 INT 필드 mInitial_x의 사용을 만들었습니다. 이제 이것을 바탕으로 x 변화의 델타 값을 얻습니다. draw() 메서드에서이 델타 값을 사용하여 ball_x을 변경 한 다음 그립니다.

여기의 키는 ABSOLUTE 값을 사용하는 것이 아니라 RELATIVE 값을 사용하는 것입니다. 희망이 도움이됩니다.

+0

작동하지 않습니다. 공이 사라집니다. – AbhayBohra

관련 문제