#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);
}