2012-01-27 3 views
1

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

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

Благодаря

ответ

1

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

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

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

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

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

Cheers.

0

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

CGPoint global = [sprite convertoToWorldSpace:ccp(x, 0)]; 
Смежные вопросы