Вращение спрайта с помощью Touch - Cocos2d - PullRequest
1 голос
/ 20 сентября 2011

Я знаю, что этот вопрос задавался несколько раз, поверьте мне, я искал. Я нашел один ответ на вращение спрайта касанием, но должен быть более простой способ.

Все, что мне нужно, это чтобы мой спрайт вращался одним касанием. Максимальное вращение 0 Минимальное вращение 0.

Я знаю, что мне понадобится несколько проверок.

int maxRot = 0;
int minRot = 0;

    if (arrowRotation > maxRot)
    {
    //do or don't do something
    } else if (arrowRotation < minRot)
    {
    //do or don't do something
    }

Может ли кто-нибудь направить меня в правильном направлении к вращению спрайта касанием, с минимальным и максимальным вращением?

Вот код, который я считаю сложным или может быть выполнен более простым способом.

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    //acquire the previous touch location
    CGPoint firstLocation = [touch previousLocationInView:[touch view]];
    CGPoint location = [touch locationInView:[touch view]];

    //preform all the same basic rig on both the current touch and previous touch
    CGPoint touchingPoint = [[CCDirector sharedDirector] convertToGL:location];
    CGPoint firstTouchingPoint = [[CCDirector sharedDirector] convertToGL:firstLocation];

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

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

    //keep adding the difference of the two angles to the dial rotation
    arrowRotation += currentTouch - previousTouch;
}

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

использовать KTOneFingerRotationGestureRecognizer ...

KTOneFingerRotationGestureRecognizer *rotation;

rotation = [[KTOneFingerRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotating:)];
[[self Wheel] addGestureRecognizer:rotation];
[rotation release];

Метод

- (void)rotating:(KTOneFingerRotationGestureRecognizer *)recognizer {
    view = [recognizer view];
    if(isRotating == FALSE) {
        [view setTransform:CGAffineTransformRotate([view transform], [recognizer rotation])];
    }
}
0 голосов
/ 21 сентября 2011

Я не думаю, что вы можете упростить вращение во что-нибудь более простое.Я, честно говоря, не понял, как вы хотите, чтобы минимальное и максимальное вращения были равны нулю.Они не могут иметь одинаковую ценность.Если вы хотите ограничить вращение до максимума и минимума, добавьте следующее в конец вашего ccTouchesMoved: метода:

if (arrowRotation >= maxRot) {

    arrowRotation = maxRot; 
}

else if (arrowRotation <= minRot) {

    arrowRotation = minRot;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...