我一直對此感到頭痛,我真的不知道發生了什麼。我有一個非常簡單的設置:一個SKNode(讓我們稱之爲基礎),其中包含另一個SKNode(子基礎),以及幾個SKShapeNode對象。在某個時候,我將其中一個SKShapeNode對象(使用removeFromParent)從基節點移動到子基節點。然後我應用SKAction,將節點移動到某個任意位置。SpriteKit SKAction在刪除並讀取節點後不起作用
除SKYction在SKShapeNode被移除並添加到子基礎對象時不起作用。如果我將它從底座上取下,然後放回底座,SKActions會再次工作。
我完全難住了。當一個節點被添加到另一個節點時,是否有一些屬性在節點上被設置,當我刪除它時沒有正確重置......?我無法想象這是應該發生的事情。
任何想法都會非常受歡迎。
更新:
下面是我可以使用它製作的一些代碼。這個函數在SKNode的子類中。類增加了大量SKShapeNodes的,它也有這個其他SKNode稱爲testNode,所以,事不宜遲:
-(void) removeThenAdd
{
[someNode removeFromParent];
[self.testNode addChild:someNode];
SKAction* action = [SKAction moveTo:CGPointMake(200, 200) duration:1];
SKNode* thatSameNodeJustAdded = [self.testNode.children objectAtIndex:0];
[thatSameNodeJustAdded runAction:action];
}
另一個更新!
我剛剛發現,如果我將SKAction添加到節點,同時它坐在testNode內,然後將它從testNode中移出並將其添加回原始父級,則會激活該操作。比如,我在這裏錯過了什麼?這必須是某種設計的行爲,我只是不正確使用..
顯示傳輸代碼和您運行的操作。我可以想象,移動動作是使用節點的原始位置(和父座標空間)進行初始化的,並且在「重新提供」節點時不更新其目標目標。 – LearnCocos2D
我正在重新創建該操作,在某些情況下,在節點重新設置後很久以後,所以我猜它不可能是這樣?無論如何,我提出了一些代碼。 – debu
當你說「它不工作」,你需要更具體。你有錯誤嗎?它不會移動你的期望?如果是這樣,告訴我們它究竟做了什麼,所以我們可以利用這些信息。這聽起來像也許這可能是關於你使用MoveTo,而不是期望SKNode工作不同,因爲它現在有一個新的座標空間。 200,200與原始父母一起,可能與新父母不在同一全球位置。如果可以,請更具體。 – prototypical