2012-06-19 44 views
0

如何獲得精靈做一些事情,而它的被感動(具體而言,我希望它增加的大小)。我想:如何讓精靈在觸摸時執行某些操作(Android AndEngine)?

private void createSpriteOnTap(float x, float y) 
    { 
     final Sprite yourSprite = new Sprite(x, y, textureRegionForYourSprite, getVertexBufferObjectManager()) 
     {   
      @Override 
      public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) 
      { 
       //if(pSceneTouchEvent.isActionDown()){ 
        if (pSceneTouchEvent.isActionMove()) 
        { 
         // while player is touching our sprite 
         setScale(scale += 0.1); 
         setPosition(pSceneTouchEvent.getX() - getWidth()/2, pSceneTouchEvent.getY() - getHeight()/2); 
        } 

        if(pSceneTouchEvent.isActionDown()) 
          setScale(scale += 0.1); 
       return true; 
      } 
     }; 

但精靈,只有當它的移動或者被竊聽的大小增加,沒有舉行。我如何才能使其尺寸增加,直到用戶舉起手指?

回答

1

那麼,如果你捕捉精靈區域內的mousedown事件,你可以使用CountDownTimer來開始放大精靈。鼠標向上將停止計時器。 參見:http://developer.android.com/reference/android/os/CountDownTimer.html

所以在這裏你可以從mousedown開始。

CountDownTimer spriteScaleTimer = new CountDownTimer(30000, 1000) { 

public void onTick(long millisUntilFinished) { 
    mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
    // put scaling here 
} 

public void onFinish() { 
    mTextField.setText("done!"); 
    // Max scale size. 
} 
}.start(); 

然後onMouseUp:

spriteScaleTimer.cancel(); 
0

我覺得下面爲你的代碼工作,因爲我已經測試,它爲我工作。

final Sprite sprite = new Sprite(centerX, centerY, mFaceTextureRegion) { 

     @Override 
     public boolean onAreaTouched(TouchEvent pSceneTouchEvent, 
       float pTouchAreaLocalX, float pTouchAreaLocalY) { 

      if(pSceneTouchEvent.isActionDown()) 
       flagTouch = true; 

      if(pSceneTouchEvent.isActionUp()) 
       flagTouch = false; 

      setPosition(pSceneTouchEvent.getX() - getWidth()/2, 
        pSceneTouchEvent.getY() - getHeight()/2); 
      return true; 
     } 

     @Override 
     protected void onManagedUpdate(float pSecondsElapsed) { 
      super.onManagedUpdate(pSecondsElapsed); 

      if(flagTouch) 
       setScale(scale+=0.1f); 
     } 
    }; 
1

我做它像下面這個 -

@Override 
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, 
     float pTouchAreaLocalX, float pTouchAreaLocalY) { 

    if(pSceneTouchEvent.isActionDown()){ 
     flagTouch=true; 
    } 
    if(pSceneTouchEvent.isActionMove()) { 
     flagTouch=false; 
     setScale(1f); 
    } 
    if (pSceneTouchEvent.isActionUp()) { 
     flagTouch=false; 
     setScale(1f); 
    } 
    return true; 
} 

@Override 
protected void onManagedUpdate(float pSecondsElapsed) { 
    if(flagTouch){ 
     setScale(1.5f); 
    } 
}