2012-11-20 3 views
0

나는 andengine과 안드로이드 게임 개발에 익숙하지 않다. 상자로 스프라이트를 만들었습니다. 이제이 코딩을 사용하여이 상자를 드래그 할 수 있습니다. 그것은 잘 작동합니다.멀티 터치를 사용하여 회전하는 객체

하지만이 상자에 2 손가락으로 스프라이트를 회전시키고 자하는 멀티 터치를 원한다. 심지어 드래그 할 수 있어야한다. .... plz 도움 누군가 ...

나는 많은 것을 시도하고 있지만 아무 생각이 없습니다.

final float centerX = (CAMERA_WIDTH - this.mBox.getWidth())/2; 

    final float centerY = (CAMERA_HEIGHT - this.mBox.getHeight())/2; 
    Box= new Sprite(centerX, centerY, this.mBox, 
      this.getVertexBufferObjectManager()) { 

    public boolean onAreaTouched(TouchEvent pSceneTouchEvent, 
       float pTouchAreaLocalX, float pTouchAreaLocalY) { 
      this.setPosition(pSceneTouchEvent.getX() - this.getWidth()/ 2, 
          pSceneTouchEvent.getY() - this.getHeight()/2); 

      float pValueX = pSceneTouchEvent.getX(); 
      float pValueY = CAMERA_HEIGHT-pSceneTouchEvent.getY(); 

      float dx = pValueX - gun.getX(); 
      float dy = pValueY - gun.getY(); 

      double Radius = Math.atan2(dy,dx); 
      double Angle = Radius * 360 ; 

       Box.setRotation((float)Math.toDegrees(Angle)); 
       return true; 
     } 
+0

Plz 누구든지이 의심을 분명히 할 수 있습니다. 모든 안드로이드 사람들에게 중요합니다 – sam786

답변

1

게임에서 멀티 터치를 사용하도록 설정했는지 확인하십시오. onLoadEngine 메서드에서 MultiTouchExample에 사용 된 것과 동일한 코드를 사용할 수 있습니다.

알고리즘은 여기에 게시 한 것과 매우 간단합니다.

  1. onAreaTouched 방법으로 얻을 수있는 최대 2 개의 포인터 ID를 추적하십시오. (포인터 ID는 pSceneTouchEvent.getPointerID()으로 호출하여 얻을 수 있습니다.)
  2. 포인터의 상태 (현재 접촉/접촉하지 않음) 및 위치 (pTouchAreaLocalXpTouchAreaLocalY)를 추적합니다.
  3. 2 개의 포인터가 접촉 할 때마다 (사용자가 ACTION_DOWN을 받음) 초기 각도를 저장하십시오. (Math.tan2(pointer1Y - pointer2Y, pointer1X - pointer2X)).
  4. 포인터에 대해 ACTION_UP이 호출되지 않는 한 모든 ACTION_MOVE 이벤트에서 새 각도를 업데이트하고 각도 델타 (delta = currentAngle - initialAngle)를 얻습니다. 그런 다음 setRotation(Math.toDegrees(delta))으로 전화하십시오.

2 개의 포인터로 스프라이트를 드래그 가능하게하려면 각 포인터가 이동 한 거리보다 작은 스프라이트를 이동해야합니다. 예를 들면, :

pointer1.dX = 50; 
pointer1.dY = -20; 
pointer2.dX = 40; 
pointer2.dY = -10; 

스프라이트는 X 축에서 +40 단위 및 Y 축에서 -10 유닛을 이동한다.

+0

답장을 보내 주셔서 감사합니다 .... 그것의 작동 .... 감사합니다 jong – sam786

+0

유료화 할 수 있습니까? 두 포인터 ID를 얻는 방법을 이해하지 못합니까? 두 손가락으로 터치하고 pSceneTouchEvent.getMotionEvent.getCount();로 계산합니다. 그래서 그것은 1을 준다. pSceneTouchEvent.getPointerID()를 쓰면; 다음 그것은 첫 번째 포인터 ID, 어떻게 두 번째를 제공합니까? – Tahreem

+0

'MultiTouchController.java'의 코드를 살펴보면 AndEngine은'MotionEvent'에서 각 포인터에 대한 TouchEvent를 발생 시키므로 터치 이벤트 메소드를 두 번 호출해야합니다. – Jong

관련 문제