当试图将冲动应用于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))
请协助
答案 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))
}
还有许多其他原因,例如你的玩家质量太大,在这种情况下你需要更多的冲动来移动它,或者“玩家”分配了错误的文件名。你需要调试它。