2012-06-27 2 views
0

씬이 수정되는 동안 스프라이트의 스케일을 증가시키기 위해 씬 업데이트 핸들러를 돌리고 있습니다. 사용자가 손가락을 떼면 멈추지 만 내 행동은 결코 등록되지 않습니다. 스프라이트는 스크린이 다시 터치 될 때까지 크기가 계속 증가합니다. 그 시점에서 오래된 스프라이트가 멈추고 새로운 스프라이트가 시작됩니다. 어떤 아이디어?작업을 등록하지 않는 이유는 무엇입니까?

scene.registerUpdateHandler(new IUpdateHandler() { 

     @Override 
     public void reset() {   
     } 

     @Override 
     public void onUpdate(float pSecondsElapsed) { 
      if(fillerNum>-1){ 
       if(filler[fillerNum].active){ 
        mPhysicsWorld.unregisterPhysicsConnector(mPhysicsWorld.getPhysicsConnectorManager().findPhysicsConnectorByShape(filler[fillerNum].sprite)); 
        mPhysicsWorld.destroyBody(filler[fillerNum].body); 

        filler[fillerNum].sprite.setScale(filler[fillerNum].scale+=pSecondsElapsed*.5); 

        filler[fillerNum].body = PhysicsFactory.createCircleBody(mPhysicsWorld, filler[fillerNum].sprite, BodyType.DynamicBody, FIXTURE_DEF); 
        mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(filler[fillerNum].sprite, filler[fillerNum].body, true, true)); 
       } 
      }    
     } 
    }); 






@Override 
    public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { 
     if(this.mPhysicsWorld != null) { 
       if(pSceneTouchEvent.isActionDown()) { 
        createFiller(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()); 
        return true; 
       } 
       if(pSceneTouchEvent.isActionUp()){ 
//Never executed 
        Log.e("Action UP", Boolean.toString(filler[fillerNum].active)); 
        createStationaryFiller(); 
       } 
      } 
     return false; 
    } 
+0

필러 번호는 무엇입니까? –

+0

fillerNum은 어떤 스프라이트가 활성 상태이고 얼마나 많은 스프라이트가 장면에 있는지 추적하는 데 필요한 참조 (정수)입니다. – rphello101

답변

0

업데이트 처리기를 등록하려고합니다! 즉, 장면이 엔진에 등록되어있는 한이 onUpdate 메서드를 계속 호출하는 것입니다. fillNum이 -1보다 작아 질 때만 멈 춥니 다. 필러 번호에 대한 동작을 살펴 봐야합니다.

scene.setOnSceneTouchListener(new IOnSceneTouchListener() { 
     @Override 
     public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) { 
      switch(pSceneTouchEvent.getAction()) { 
       case TouchEvent.ACTION_DOWN: 
        //sprite.setScale() code 
        break; 
       case TouchEvent.ACTION_UP: 
        //sprite.setScale() code 
        break; 
      } 
      return true; 
     } 
    }); 
+0

올바르지 않습니다. 필러 [fillerNum] .active가 false 일 때 중지됩니다. – rphello101

0

당신은 부드럽게, 당신은 단지 스프라이트를 확장하기 위해 코드로 줌 부분을 교체해야 당신이 장면을 터치하면, 카메라가 확대됩니다, 당신의 참고를위한 ZoomExample을 사용할 수 있습니다 결과적으로, onAreaTouched 메소드에서 isActionUp 메소드를 추가해야하고, onSpeneTouchEvent에 포함시켜야합니다. 전자가 없으면 스프라이트는 다른 터치가 추가 될 때까지 계속 성장했습니다. 후자가 없으면 스프라이트에서 손가락을 드래그 할 수 있으며 여전히 커집니다.

0

많은 사람들이이 문제에 대해 머리를 아프게했습니다. 실수를하면 자신을 때려 눕힐 것입니다! onSceneTouchEvent() 방법을 확인하십시오. 결국 return false입니다. 메서드에 대한 false 값이 반환되면 TouchListener는 사용자가 수행중인 TouchEvent (동작 중지)가 INVALID임을 알립니다! 따라서 TouchListener는 모든 다음 이벤트 등록을 중지합니다 (조치 이동, 조치 위로 ... 등)!

왜 두 번째 if 문장의 코드가 실행되지 않습니다! 당신이해야 할 일은 return false에서 return true으로 변경하여 터치리스트에 이벤트 등록을 원한다는 것을 알려주는 것입니다.

그런 어리석은 문제는 아직 실망 스럽습니다!

관련 문제