У меня есть управление колесом в игре, которое настроено так:
- (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;
Теперь, когда пользователь отпускает колесо, я хочу, чтобы оно вернулось туда, где оно было раньше, но не без учета скорости прокрутки, которую сделал пользователь. Это то, что я действительно не могу понять. Таким образом, если смахивание создает большую скорость, то колесо будет продолжать слегка двигаться в этом направлении, пока не сработает общая сила, которая тянет колесо обратно в исходное положение.
Любые идеи/фрагменты кода?