我想从左侧和右侧创建一个节点,当我触摸它们时,鸟会向左或向右飞行。
首先我创建了一个鸟类节点
然后,我创建了测试节点
var groundleft = SKSpriteNode()
groundleft.position = CGPoint(x: 0, y: 50)
groundleft.size = CGSize(width: 500, height: 100)
groundleft.color = UIColor(red: 7, green: 5, blue: 7, alpha: 20)
groundleft.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.size.width, 100))
groundleft.physicsBody?.dynamic = false
groundleft.zPosition = 0.5
groundleft.name = "toleft"
然后我实施了touchesBegan
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
let touch = touches.first as! UITouch
let touchLocation = touch.locationInNode(self)
let touchedNode = self.nodeAtPoint(touchLocation)
if(touchedNode.name == "toleft"){
bird.physicsBody?.velocity = CGVectorMake(0, 0)
bird.physicsBody?.applyImpulse(CGVectorMake(-10, 100))
}
}
为什么不起作用?
答案 0 :(得分:1)
您遇到问题的原因是因为physicsBody的动态属性设置为false。
您需要设置
groundleft.physicsBody?.dynamic = true //Or remove this line, as dynamic is true by default
您可以阅读有关dynamic
属性here的更多信息。如文档中所示:
默认值为YES。如果值为NO,则物理体忽略 所有的力量和冲动都适用于它。此属性将被忽略 基于边缘的身体;它们是自动静止的。
您可能已将dynamic
设置为false,因为该节点可能因物理世界的重力而下降。为了解决这个问题,你可以设置physicsBody的affectedByGravity
属性,或者完全改变scene&world的gravity
属性。