1


タッチ、ドラッグ、スロー アクションを定義したストーン スプライト クラスがあります。画面上で石のスプライトをタッチしてドラッグすると、石のスプライトがうまく動きます。私の予想では、スプライトは限られた円形領域 (可視/不可視) 内でのみ移動する必要があります。
これは以下の私のコードです

@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY)
{
    if (pSceneTouchEvent.isActionMove() || pSceneTouchEvent.isActionDown() || pSceneTouchEvent.isActionOutside())
    {

        this.setX(pSceneTouchEvent.getX() - this.getWidth() / 2);
        this.setY(pSceneTouchEvent.getY() - this.getHeight() / 2);

    }
    else if (pSceneTouchEvent.isActionUp())
    {
        mPhysicsHandler.setVelocityX((originX - getX()) * 5);
        mPhysicsHandler.setVelocityY((originY - getY()) * 5);
        mPhysicsHandler.setAccelerationY(100);  
    }
    return true;
}


助けてください。

4

1 に答える 1

1

ドラッグ時に移動を適用する前に、タッチ イベントが円内にあるかどうかを確認します。これを行うには、円の中心からの距離を測定します。距離が円の半径より小さい場合は、オブジェクトを移動します。そうでない場合は、何もしません。@Override public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { if (pSceneTouchEvent.isActionMove() || pSceneTouchEvent.isActionDown() ||

pSceneTouchEvent.isActionOutside())
    {
        // Use Pythagorean theorem to get distance between 2 points;
        // center is a point you declare
        // radius is a value you declare that is the radius of the circular area
        Float distance = (pSceneTouchEvent.getX() - center.x)*(pSceneTouchEvent.getX() - center.x) + (pSceneTouchEvent.getY() - center.y) * (pSceneTouchEvent.getY() - center.y);
        distance = Math.sqr(distance);
        if(distance < radius){
             // Only move if touch event is inside the circle area    
             this.setX(pSceneTouchEvent.getX() - this.getWidth() / 2);
             this.setY(pSceneTouchEvent.getY() - this.getHeight() / 2);
        }

    }
    else if (pSceneTouchEvent.isActionUp())
    {
        mPhysicsHandler.setVelocityX((originX - getX()) * 5);
        mPhysicsHandler.setVelocityY((originY - getY()) * 5);
        mPhysicsHandler.setAccelerationY(100);  
    }
    return true;
}
于 2013-10-14T20:34:57.167 に答える