2015-10-06 59 views
0

我使用的是自定义的砖类:雪碧套件 - 创建从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()创建节点时才会出现此问题。

回答

0

这应该有所帮助,它解释了单个框架中的步骤。

https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Introduction/Introduction.html

你是在错误的时间创建它,幕后的步骤,使一个被重新设置它由于是缺少了几步。为didFinishUpdate命令进行处理的队列。 (我只是在did contact中创建对象,然后将它放入数组中,然后在didFinishUpdate上,通过数组并将它们添加到场景中,并清除数组)

+0

谢谢,解决了问题! – Heriotza