2014-09-25 2 views
1

при попытке применить импульс к SKPhysicsBody, написанию кода заставляет знак вопроса, а затем при использовании этой линии, она не применяет импульснойSpritekit physicsBody с быстрым не применяя импульсную

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     player.physicsBody!.applyForce(CGVectorMake(0, 400)) 
    } 

тела физика инициализируется как таковой

player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size, center: CGPoint(x: player.size.width/2, y: player.size.height/2)) 

пожалуйста помочь

+3

Вы пробовали это с большим импульсом, например 4000 или 40000? Физика является динамичной? – LearnCocos2D

+0

Предлагаю вам опубликовать код, создающий спрайт. Нет ничего плохого в коде, который вы опубликовали до сих пор. – 0x141E

ответ

1

Я попробовал, что точный код и он работал отлично. Это может быть связано с тем, что игрок не был определен в правильном месте. Убедитесь, что плеер не определен в func didMoveToView. Если это так, его следует определить сразу после скобки SKScene.

class GameScene: SKScene { 

let bird = SKSpriteNode(imageNamed: "sprite_1") 

override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 

    self.physicsWorld.gravity = CGVectorMake(0.0, -5.0) 

    bird.xScale = 2; bird.yScale = 2 
    bird.position = CGPoint(x: self.frame.size.width/2.75, y: self.frame.size.height/2) 
    bird.physicsBody = SKPhysicsBody(rectangleOfSize: bird.size) 
    self.addChild(bird) 
} 

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 
    for touch: AnyObject in touches { 
     bird.physicsBody?.applyImpulse(CGVectorMake(0, 100)) 
    } 
} 

Посмотрите, как игрок (птица для меня) не объявлен в функции didMoveToView.

Я нашел эту страницу, глядя на то, как применять импульсы, поэтому ваше сообщение было полезно для меня. Надеюсь, это поможет вам.

+0

Кроме того, я забыл спросить, вы получили ошибку или просто не работают? –

+0

Почему это имеет значение, если он определил 'игрока' в' didMoveToView'? Я сталкиваюсь с той же проблемой, что и он – mccoyLBI

0

вы сказали, что вы подаете «импульс», но вы подаете «Force» здесь, которые не будут работать в этом контексте. Я знаю, что это было давно, но для тех, кто приходит к решению этой проблемы, вы можете изменить Силу в Импульс, и она должна работать. Так,

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    player.physicsBody!.applyImpulse(CGVectorMake(0, 400)) 
} 

Там может быть много других причин, такие, как ваш плеер масса слишком огромна в этом случае вам нужно больше импульса, чтобы переместить его или «игрок» имеет неверное имя файл, возложенный на него. Вам нужно будет отладить это.

Смежные вопросы