我使用的是自定义的砖类:雪碧套件 - 创建从didBeginContact节点()
import SpriteKit
class Brick: SKSpriteNode {
enum type { case Normal }
convenience init (type: Brick.type) {
self.init(color: .greenColor(), size: CGSizeMake(75, 25))
physicsBody.SKPhysicsBody(rectangleOfSize: size)
physicsBody!.mass = 9999
physicsBody!.affectedByGravity = false
position = CGPointMake(100, 50)
// Category and collision bitmasks ...
// Action to move the brick upwards ...
}
// Stuff
}
在我的场景,我创建了一个初始的砖,和一切工作就好了。但是,当我尝试在didBeginContact()
函数中添加一个块时,我得到了意想不到的结果。
我有一个SKNode
在屏幕的1/5高度。所以每次一块砖达到这样的高度,它将使这个无形的节点接触并创建一个新砖:
// Inside SKScene
func didBeginContact(contact: SKPhysicsContact) {
// I set physics body A and B ...
if a.categoryBitMask == Category.brick && b.categoryBitMask == Category.brickSpawner {
addChild(Brick(type: .Normal))
}
}
所以问题是:当我创建这个函数内部新砖,位置设置为( 0,0),而不是(012,3737,类中定义的(100,50))。其实,如果我继续并使用println(brick.position)
,我会得到(100,50),但在屏幕上它看起来位于(0,0)。
如果我在代码的其他地方创建了一个砖块,例如在touchesBegan()
或update()
函数中,位置设置正确。只有在从didBeginContact()
创建节点时才会出现此问题。
谢谢,解决了问题! – Heriotza