Измените угол наклона 3 спрайтов и сделайте его более плавным / реалистичным

#objective-c #xcode #math #cocos2d-iphone #geometry

#objective-c #xcode #математика #cocos2d-iphone #геометрия

Вопрос:

У меня есть 3 спрайта, которые имеют одинаковый угол наклона, поэтому я просто скажу arm sprite. Угол наклона спрайта Arm на данный момент равен одной точке 1 (60,60, но это не имеет значения) до другой точки2, точки, в которой нажат большой палец игрока.

Во время функции ccTime я обновляю все, углы и прочее. Таким образом, всякий раз, когда пользователь касается точки на экране, угол немедленно изменяется, и угол наклона руки равен вектору от точки 1 до точки 2.

Я не хочу, чтобы изменение угла занимало 0,016 секунды (ccTime вызывается каждые 1/60 секунды). Я хочу, чтобы угол увеличивался / уменьшался быстрее / медленнее в зависимости от того, насколько далеко новый вектор находится от текущего вектора. В принципе, я хочу, чтобы рука поднималась / опускалась с определенной скоростью, возможно, немного ускорялась, в зависимости от вектора.

Я много раз пытался заставить это работать, но у меня ничего не получается. Пожалуйста, помогите мне, поворот может идти от 90 градусов по прямой до почти 180 градусов по прямой (однако углы в cocos2d изменены, поэтому мне пришлось добавить 90 здесь и там).

Если вам нужна дополнительная информация, просто оставьте комментарий, и я дам вам информацию как можно скорее.

Ответ №1:

Вы должны установить новый угол как a destinationAngle в цикле обновления:

 //Instead of checking for equality, you might want to check the angle is close enough, e.g. if they are withing 1 degree of each other e.g.(if (abs(destinationAngle - angle) < 1)
if (angle != destinationAngle)
{
    //move towards destination
    angle  = ((destinationAngle - angle) / 10.0f);
}