2015-10-06 57 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