Вращающееся колесо с сенсорным добавлением скорости

У меня есть управление колесом в игре, которое настроено так:

- (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;

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

Любые идеи/фрагменты кода?


person dev6546    schedule 30.06.2012    source источник
comment
Вы были бы в порядке, если бы это было сделано полностью в базовой анимации, а не в кокосах?   -  person CodaFi    schedule 01.07.2012
comment
Мне это нужно, чтобы оно действительно работало в рамках cocos2d, я просто не могу понять математику.   -  person dev6546    schedule 01.07.2012


Ответы (1)


Ограничить вращение колеса += currentTouch - previousTouch;
Я имею в виду

if (currentTouch - previousTouch > wantedLimit) {
wheelrotation += wantedLimit;
}
else {
wheelrotation += currentTouch - previousTouch;
}
person Rickye    schedule 30.06.2012
comment
Привет, спасибо, мне удалось ограничить вращение колеса фиксированным значением 0,5. Я умножил это следующим образом: wheelRotation += (currentTouch - previousTouch) * 0,5; А вот со второй частью пока проблемы. - person dev6546; 01.07.2012
comment
Попробуйте вставить код, который возвращается в исходное место, в метод touchesEnded. - person Rickye; 01.07.2012