簡體   English   中英

SpriteKit-檢測兩個SKShapeNode何時“彼此”傳遞

[英]SpriteKit - Detect when two SKShapeNodes “pass” each other

它可能看起來很長,但大多數都是相同的代碼:P希望我能很好地解釋自己:)我希望我能解釋自己。 就是這種情況:我有一個SKShapeNode讓我們稱他為X。這就是我聲明X( 僅在didMoveToView中 )的方式:

 var X = SKShapeNode(circleOfRadius: 15)
        X.position = CGPointMake(100  , 100)
        X.fillColor = SKColor.yellowColor()
        X.physicsBody = SKPhysicsBody(circleOfRadius: coin.frame.width/2)
        X.physicsBody?.dynamic = true
        X.physicsBody?.linearDamping = 1        
        X.physicsBody?.affectedByGravity = false
        X.physicsBody?.categoryBitMask = coincategory
        X.physicsBody?.contactTestBitMask = coincategory
        self.addChild(coin)

現在,我的第二個SKShapeNode,讓他稱為Y有點棘手,由於我的游戲原因,我需要他的大小是動態的,所以這是我所做的並且正在起作用,首先,在didSimulatePhysics()中聲明他為:

 override func didSimulatePhysics() {
        let pixel = self.childNodeWithName(X.name!)
        var pathtodraw : CGMutablePathRef!
        pathtodraw = CGPathCreateMutable()
        CGPathMoveToPoint(pathtodraw, nil , pixel!.position.x, pixel!.position.y)
        CGPathAddLineToPoint(pathtodraw, nil, 0, 0)
        CGPathCloseSubpath(pathtodraw)
        Y.path = pathtodraw

        self.addChild(Y)

{

為了使他的大小變得動態(游戲包括X的移動),我每次都在update方法內將其刪除,以便路徑可以自行更新:

 override func update(currentTime: NSTimeInterval) {


        Y.removeFromParent()


}

我要達到的目的:每當對象X通過Y println(“它們剛通過彼此”)時,我都不希望它們對接觸做出反應或彼此沖撞,它們應該彼此不可見,但是我需要檢測它們何時彼此通過。

問題是什么:當我向Y添加Physics時,該節點將刪除他自己,他將繼續生成更多節點並用他自己填充屏幕。 如果按照上面的方式放置,它可以正常工作,它會刪除他自己並更新大小,並始終僅保留1個節點。 這就是嘗試添加到Y的原因:

override func didSimulatePhysics() {
        let pixel = self.childNodeWithName(X.name!)
        var pathtodraw : CGMutablePathRef!
        pathtodraw = CGPathCreateMutable()
        CGPathMoveToPoint(pathtodraw, nil , pixel!.position.x, pixel!.position.y)
        CGPathAddLineToPoint(pathtodraw, nil, 0, 0)
        CGPathCloseSubpath(pathtodraw)
        Y.path = pathtodraw

        self.addChild(Y)

        **linenode = SKShapeNode(path: pathtodraw)
        linenode.physicsBody = SKPhysicsBody(edgeChainFromPath: pathtodraw)**

      {

它保持生成大量節點,並刪除它們。 知道我該怎么做嗎? 多謝你們 !

由於可以更新形狀節點的路徑而無需從場景中刪除該節點然后再將其添加回去,因此我建議您在didMoveToView中將Y添加到場景中,並在didSimulatePhysicsupdate方法中刪除addToChildremoveFromParent 另外,將物理實體添加到Y而不是創建新的形狀節點。 最后,您要創建X ,然后將coin添加到場景中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM