2014-07-11 77 views
0

我使用下面的代碼塊,當我調試時,我看到SKShapeNode的累積幀現在是{{-160.03586, -42.431793}, {470.03586, 519.50903}}而不是像{{0,0}, {100,300}}爲什麼SKEmitterNode中斷累積幀?

如果我註釋掉這個整個粒子代碼,accumulatedFrame又是有意義的。

我需要它是有意義的,因爲我在touchesBegan中使用nodesAtPoint。任何無意義的值導致nodesAtPoint找到不相關的節點,因爲累積幀現在對所有人都是奇怪的,它們都相交...

我使用下面的代碼塊,但我找不到問題所在。我在這裏錯過什麼?

NSString *path = [[NSBundle mainBundle] pathForResource:@"MyParticle" ofType:@"sks"]; 
SKEmitterNode *particles = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 

particles.position = CGPointMake(_selectedNode.frame.size.width/2, _selectedNode.frame.size.height/2); 

[particles runAction:[SKAction sequence:@[[SKAction waitForDuration:.2], 
             [SKAction fadeAlphaTo:0 duration:0.2], 
             [SKAction removeFromParent]]] completion:^{ 
           [particles removeFromParent]; 
}]; 
[_selectedNode addChild:particles]; 

回答

3

cumulativeFrame是它聽起來像,它是最小的矩形,它包含您的節點的所有圖形對象。發射陣列實際上會將節點添加到它添加到的對象。它在計算累計幀時完全按照預期工作。

解決此問題的方法是讓發射器節點具有「目標節點」。 SKEmitterNode有一個名爲.targetNode的屬性。它基本上意味着它會將精靈放入該節點。

我發現它有一個很好的方法來擁有一個包含我所有發射節點的單個SKNode。然後,這與我點擊的圖層是分開的。

檢查SKEmitterNode類參考以獲取有關targetNode的更多信息。

SKEmitter Node class reference

+0

我接着說:particles.targetNode = _selectedNode;''之前[_selectedNode的addChild:顆粒]'現在它不會破壞'accumulatedFrame'計算和我的'touchesBegan'正常工作。但我仍然很好奇爲什麼targetNode = nil會導致不正確的計算。我調試了它,父節點中沒有剩下「children」,所以它應該已經正確地計算出它了。 'targetNode = nil'打破它的父節點的累計幀計算? – frankish

+0

我發現,這次它打破了一些其他節點和touchesBegan無法正常工作,以確定觸摸對象,同時發射器仍然活着。 – frankish

+0

目標節點是發射器將放置其粒子的地方。您應該將它們添加到不同的圖層中。我完全遠離你的節點。 SKEmitterNode被放置在一個節點中,它的位置在哪裏。但是在哪裏掉落它的粒子是由targetNode設置的。 –