2015-04-14 4 views
1

Я пытаюсь переместить SKSpriteNode по дуге с физикой в ​​spritekit так: enter image description hereSpritekit: двигаться SKSpritekitNode в дуге с SKPhysicsBody

Но я не уверен, какие физико- я должен обратиться к нему (applyImpulse, applyForce , applyTorque).

В настоящее время используется applyTorque, код фактически не работает, и не производит никакого движения на объекте:

_boy.physicsBody.velocity = CGVectorMake(1, 1); 
CGVector thrustVector = CGVectorMake(0,100); 
[_boy.physicsBody applyTorque:(CGFloat)atan2(_boy.physicsBody.velocity.dy, _boy.physicsBody.velocity.dx)]; 
+0

Как насчет применения силы. Например. 2 pts X направления и 1 pt Y? –

ответ

0

applyTorque не является правильным методом для этого. Крутящий момент - это сила скручивания, которая заставляет ваш узел вращаться вокруг своей центральной точки.

Нет никакой простой команды для того, что вы ищете. Вы также не можете указать свой метод перемещения для вашего узла. Примените силу, импульс и т. Д. Вам придется придумать взлом для этого.

Пример проекта ниже делает то, что вы ищете, и он укажет вам в правильном направлении. Однако вам придется изменить код в соответствии с потребностями вашего конкретного проекта.

Коснитесь экрана одним щелчком мыши, чтобы начать перемещение узла и второй раз нажмите/коснуться экрана, чтобы начать изменение направления на 90 градусов.

#import "GameScene.h" 

@implementation GameScene { 
    int touchCounter; 
    BOOL changeDirection; 
    SKSpriteNode *node0; 
} 

-(void)didMoveToView:(SKView *)view { 
    self.backgroundColor = [SKColor whiteColor]; 

    node0 = [SKSpriteNode spriteNodeWithColor:[SKColor grayColor] size:CGSizeMake(50, 50)]; 
    node0.position = CGPointMake(150, 200); 
    node0.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node0.size]; 
    node0.physicsBody.affectedByGravity = NO; 
    [self addChild:node0]; 

    touchCounter = 0; 
    changeDirection = NO; 
} 

-(void)update:(CFTimeInterval)currentTime { 
    if(changeDirection) 
     [self changeMovement]; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    touchCounter++; 

    for (UITouch *touch in touches) { 
     if(touchCounter == 1) 
      [node0.physicsBody applyImpulse:CGVectorMake(25, 0)]; 
     if(touchCounter == 2) 
      changeDirection = YES; 
    } 
} 

-(void)changeMovement { 
    if(node0.physicsBody.velocity.dy<200) { 
     [node0.physicsBody applyImpulse:CGVectorMake(-0.1, 0.1)]; 
    } else { 
     changeDirection = NO; 
     node0.physicsBody.velocity = CGVectorMake(0, node0.physicsBody.velocity.dy); 
    } 
} 
Смежные вопросы