(я использую cocos2d для iphone)
Сначала я объясню вам мой код: (важные части)
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
float dstAngle = CC_RADIANS_TO_DEGREES(-ccpToAngle(ccpSub(location, plane.position)));
plane.dstAngle = dstAngle;
}
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];
float dstAngle = CC_RADIANS_TO_DEGREES(-ccpToAngle(ccpSub(location, plane.position)));
plane.dstAngle = dstAngle; }
Если я касаюсь экрана, я вычисляю уголмежду моей плоскостью и местоположением касания.
Теперь я устанавливаю угол «назначения» плоскости.Моя "плоскость" является подклассом.
В моем заголовочном файле у меня есть следующие значения с плавающей точкой:
//this is in my plane subclass
float diffAngle_;
float startAngle_;
float dstAngle_;
float smoothRotationSpeed_;
РЕДАКТИРОВАТЬ: В моей инициализации слоя я установил значение "smoothRotationSpeed" в значение,Метод вращательной метки запланирован.У меня есть метод галочки, чтобы вращать плоскость (также в подклассе плоскости)
-(void)rotateTick:(ccTime)dt {
startAngle_ = [self rotation];
if (startAngle_ > 0)
startAngle_ = fmodf(startAngle_, 360.0f);
else
startAngle_ = fmodf(startAngle_, -360.0f);
diffAngle_ =dstAngle_ - startAngle_;
if (diffAngle_ > 180)
diffAngle_ -= 360;
if (diffAngle_ < -180)
diffAngle_ += 360;
[self setRotation: startAngle_ + diffAngle_ * dt]; //smooth rotate
}
-(void)setSmoothRotationSpeed:(float)smoothRotationSpeed {
[self schedule:@selector(rotateTick:)]; //this will be called if the "smoothRotationSpeed" value is changed
}
Проблема теперь в том, что если я коснусь места, спрайты вращаются к нему правильно, но сначала он вращается немного быстро ичем он теряет свою скорость ..
Чем ближе он к углу назначения, тем медленнее он движется ...
Но я хочу, чтобы он двигался с постоянной скоростью.Эта «постоянная» скорость определена в значении «smoothRotationSpeed», но как я могу реализовать ее в своем коде?
Если я установлю интервал в значение «smoothRotationSpeed», оно не будет плавным.Это будет отставать.
Кто-нибудь хотел бы помочь мне, пожалуйста?