Spritekit physicsBody with swift not apply impulse

时间:2014-09-25 13:39:42

标签: ios xcode swift sprite-kit

当试图将冲动应用于SKPhysicsBody时,编写代码强制一个问号,然后在使用该行时,它不会施加任何冲动

 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))

请协助

2 个答案:

答案 0 :(得分: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功能中声明播放器(我的鸟)。

我在查找如何申请冲动的同时找到了这个页面,所以你的帖子对我很有用。我希望这可以帮到你。

答案 1 :(得分:0)

你说你正在应用“ impulse ”,但你在这里应用“强制”,这在这种情况下不起作用。我知道这已经很长时间了,但对于那些前来看到这个问题的解决方案的人来说,你可以将力量改为冲动,它应该有效。 所以,

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

还有许多其他原因,例如你的玩家质量太大,在这种情况下你需要更多的冲动来移动它,或者“玩家”分配了错误的文件名。你需要调试它。