2014-09-02 3 views
2

Я хочу переместить физику с помощью метода applyImpulse в направлении, основанном на вращении physicalBody.SpriteKit перемещение повернутой физикиBody с применениемImpulse

Foe пример, физикаBody представляет собой квадратную форму, я называю «движение», которое будет применять импульс, чтобы заставить его двигаться вверх по вертикали. Затем я вызываю метод, чтобы вращать физику 45 градусов вправо. Если я снова вызову метод «move», физическое тело будет двигаться по диагонали вправо и вверх.

Помогите пожалуйста?

ответ

3

Я предлагаю вам следовать координатам и вращению комплекта Sprite Kit. В частности, ваше изображение спрайта должно быть обращено прямо к нулю (значение по умолчанию), а положительное значение - вращение против часовой стрелки. Тем не менее, вот один из способов применить импульс в направлении спрайт сталкивается:

// Specify the force to apply to the SKPhysicsBody 
CGFloat r = 5; 

// Create a vector in the direction the sprite is facing 
CGFloat dx = r * cos (sprite.zRotation); 
CGFloat dy = r * sin (sprite.zRotation); 

// Apply impulse to physics body 
[sprite.physicsBody applyImpulse:CGVectorMake(dx,dy)]; 
+0

Похоже на импульс слева каждый раз ?! Вы доступны для независимого прототипа? – shahidaltaf

+0

Вы вращали спрайт перед применением импульса? – 0x141E

+0

сейчас работает, пример кода выше. спасибо – shahidaltaf

2

ОБНОВЛЕНО:

Фиксированный с ниже благодаря @ 0x141E

-(void)characterJump { 

    CGFloat radianFactor = 0.0174532925; 
    CGFloat rotationInDegrees = _body.zRotation/radianFactor; 
    CGFloat newRotationDegrees = rotationInDegrees + 90; 
    CGFloat newRotationRadians = newRotationDegrees * radianFactor; 

    CGFloat r = 500; 

    CGFloat dx = r * cos(newRotationRadians); 
    CGFloat dy = r * sin(newRotationRadians); 

    [_body.physicsBody applyImpulse:CGVectorMake(dx, dy)]; 
} 
Смежные вопросы