Получить позицию перед спрайтом на основе вращения - PullRequest
1 голос
/ 27 января 2012

У меня есть спрайт, который перемещается в зависимости от местоположения касания.Я использую box2d для столкновения, и когда спрайт сталкивается с другим объектом, я поворачиваю спрайт на 180 градусов, чтобы повернуть его в сторону от столкновения, и моя цель состоит в том, чтобы переместить спрайт, который столкнулся с x количеством пикселей в направлении вращения, в основном давая отскоквлияет.

Может кто-нибудь сказать мне, как я могу получить позицию, которая составляет х количество пикселей перед спрайтом на основе поворота.

Спасибо

Ответы [ 3 ]

1 голос
/ 27 января 2012

Вы можете получить направление вашего спрайта по следующей формуле:

public static Vector2 AngleToVector(float angle)
{
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle));
}

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

returnedVector = AngleToVector(currentAngle);
returnedVector.Normalize();
returnedVector *= x;

Выше приведен код C #, но вы сможете преобразовать его на свой язык.

1 голос
/ 27 января 2012

Вы можете использовать contentSize или boundingBox спрайта, чтобы вычислить количество пикселей, которые вы должны переместить. Учитывая, что узлы привязаны в их центре, вы можете сделать что-то вроде этого (Изменения только по оси X):

sprite.position = ccp(sprite.position.x - xAmount - sprite.contentSize.width / 2, sprite.position.y)

Измените знаки суммы в соответствии с ориентацией, в которой вы хотите переместить спрайт в направлении к xAmount, как вам нужно.

Приветствие.

0 голосов
/ 27 января 2012

Вы можете просто преобразовать локальную точку в глобальную:

CGPoint global = [sprite convertoToWorldSpace:ccp(x, 0)];
...