0

次のように設定されたゲームにホイールコントロールがあります。

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    if (CGRectContainsPoint(wheel.boundingBox, location))
    {
        CGPoint firstLocation = [touch previousLocationInView:[touch view]];
        CGPoint location = [touch locationInView:[touch view]];

        CGPoint touchingPoint = [[CCDirector sharedDirector] convertToGL:location];
        CGPoint firstTouchingPoint = [[CCDirector sharedDirector] convertToGL:firstLocation];

        CGPoint firstVector = ccpSub(firstTouchingPoint, wheel.position);
        CGFloat firstRotateAngle = -ccpToAngle(firstVector);
        CGFloat previousTouch = CC_RADIANS_TO_DEGREES(firstRotateAngle);

        CGPoint vector = ccpSub(touchingPoint, wheel.position);
        CGFloat rotateAngle = -ccpToAngle(vector);
        CGFloat currentTouch = CC_RADIANS_TO_DEGREES(rotateAngle);

        wheelRotation += (currentTouch - previousTouch) * 0.6; //limit speed 0.6
    }
}

次のようにして、更新メソッドでホイールの回転を更新します。

wheel.rotation = wheelRotation;

ユーザーがホイールを離したら、ユーザーが行ったスワイプの速度を考慮せずに、以前の場所に回転させたいと思います。これは、私が本当に理解できないビットです。したがって、スワイプが多くの速度を生成する場合、ホイールを開始位置に引き戻す全体的な力が作動するまで、ホイールはその方向にわずかに移動し続けます.

アイデア/コードスニペットはありますか?

4

1 に答える 1

1

ホイールの回転を制限する += currentTouch - previousTouch;
つまり

if (currentTouch - previousTouch > wantedLimit) {
wheelrotation += wantedLimit;
}
else {
wheelrotation += currentTouch - previousTouch;
}
于 2012-06-30T22:32:48.570 に答える