2012-06-02 2 views
0

내가 가지고있는 것은 무언가입니다. 비트 맵을 클릭하고 드래그하면 손가락을 따라갈 수 있지만 실제로는 오른쪽으로 옮길 수 있습니다. 아래쪽 각도로 약간 움직일 수 있습니다. 왼쪽뿐만 아니라 내가 원한다면 다른 것들을 움직이는 것이 거의 불가능하다. 나는 모든 방향으로 그것을 움직일 수 있어야한다. 그러나 나를 도와 줄 수 있니? 이건 내 코드입니다 :모든 방향으로 비트 맵 이동

@Override 
    protected void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 
     clear.setARGB(0, 0, 0, 0); 
     AndroidDudeHitbox.set(AndroidX, AndroidY, AndroidX + AndroidDude.getWidth(), AndroidY + AndroidDude.getHeight()); 
     canvas.drawRect(AndroidDudeHitbox, clear); 
     canvas.drawBitmap(AndroidDude, AndroidX - (AndroidDude.getWidth()/2), AndroidY - (AndroidDude.getHeight()/2), null); 
     if (AndroidX > canvas.getWidth() || AndroidX < 0 || AndroidY > canvas.getHeight() || AndroidY < 0) {AndroidX = 30; AndroidY = canvas.getHeight()/2;} 
     invalidate(); 
    } 
@Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     try { 
      Thread.sleep(30); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     if (AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY())) 
     { 
      switch (event.getAction()) 
      { 
      case MotionEvent.ACTION_MOVE: 
       AndroidX = (int) event.getX(); 
       AndroidY = (int) event.getY(); 
       break; 
      } 
     } 

     return true; 
    } 

편집 : 난 그냥 바로 오른쪽에 비트 맵을 이동할 수 없습니다 것을 알아 냈다. 나는 그것을 아래 및 오른쪽으로 직접 이동할 수 있습니다. 그러나 다른 것은 없었다.

답변

0

의 감동 경우 AndroidDudeHitbox 포인트가 포함되어있는 경우 귀하의 확인, 아직 도면 그 위에 AndroidDude. 아래 if 문을 제거하거나 AndroidDude 상단에 히트 박스를 그립니다. 모든

if (AndroidDudeHitbox.contains((int)event.getX(), (int) event.getY())){

+0

이건 내 probablem을 고칠 수는 없지만, 처음으로 그려지는 것을 움직여 야 할 때 shouldnt는 차이를 만들지 만, 내상은 hitbox의 픽셀 내에서 어디서 만지면 나는 묻는다. 왜 내가 단지 그를 아래로 또는 아래로 그리고 오른쪽으로 끌게 할 것인지를 아는 것. 그러나 응답에 감사드립니다. –

0

먼저 :는 '잠'을하지 마십시오 onTouch 메서드에서 호출합니다. 이것은 문제를 요구하고 있습니다.

첫 번째 일시적으로 AndroidDudeHitbox.contains ((int) event.getX(), (int) event.getY()를 확인하는 if 문을 제거하십시오. event.getX() 및 event.getY()로 AndroidX 및 AndroidY를 항상 업데이트하십시오.

마지막으로 onTouch에서 AndroidX 및/또는 AndroidY 값을 변경 한 후에 가장 중요하게 생각하는 점은 invalidate()입니다. 'invalidate()'를 호출하면 나중에 onDraw가 다시 호출됩니다.

'invalidate()'에 대한 호출을 추가하는 경우 일시적으로 제거한 'if'문을 다시 추가하고 모든 것이 여전히 작동하는지 확인하십시오.