Ios 如何在SpriteKit中先前生成的SpriteNode上运行操作

Ios 如何在SpriteKit中先前生成的SpriteNode上运行操作,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我正在制作一个应用程序,对象从屏幕顶部掉落。这些对象是spriteNodes,使用-voidgenerateNodes方法生成。当您点击屏幕时,将创建一个触摸指针节点,并检测您是否触摸spriteNode。这是通过didBeginContact方法完成的。我检测到了触摸,但是,当我尝试向对象添加死亡动画时,出现了一个问题。如果我点击一个对象并开始它的死亡动画,那么我点击另一个新生成的对象。上一个场景中的死亡动画将继续使用新生成的对象。因此,它不会启动新生成的对象自己的死亡动画(基本上是淡出),而

我正在制作一个应用程序,对象从屏幕顶部掉落。这些对象是spriteNodes,使用-voidgenerateNodes方法生成。当您点击屏幕时,将创建一个触摸指针节点,并检测您是否触摸spriteNode。这是通过didBeginContact方法完成的。我检测到了触摸,但是,当我尝试向对象添加死亡动画时,出现了一个问题。如果我点击一个对象并开始它的死亡动画,那么我点击另一个新生成的对象。上一个场景中的死亡动画将继续使用新生成的对象。因此,它不会启动新生成的对象自己的死亡动画(基本上是淡出),而是在该对象完成时继续上一个对象的死亡动画

例如:

点击0.5->0时的第一个对象alpha

==第二个对象在第一个对象仍在运行死亡动画时被点击==

点击0.2->0时的第二个对象alpha

这是因为当我点击第二个对象时,它会继续第一个对象的动画。我希望它是第二个对象开始自己的动画的地方,它应该从0.5的alpha开始

didBeginContact代码

生成对象代码

顺便说一下,对象是一个NSMutableArray


请帮忙

为什么不直接使用联系人的节点:

SKSpriteNode *touchedObject = (SKSpriteNode*)contact.bodyA.node;
这将获取冲突中涉及的节点,您可以对其执行操作,而无需使用数组

更新

使用操作的本地实例:

SKAction *objectFadeOutLocal = [SKAction fadeAlphaTo:0 duration:0.75];
SKAction *objectRemoveLocal = [SKAction removeFromParent];
SKAction *objectDeathRotationLocal = [SKAction rotateByAngle:M_PI*2 duration:3];

为什么要将对象添加到GenerateObject中对象数组的开头?这看起来是错误的:touchedObject=[objects ObjectsAtIndex:0]@Droppy我想,如果我使用NSMutableArray,我可以针对特定的sprite节点运行操作。如何始终成为对象中的第一个对象,即最新创建的节点?@Droppy每次创建新对象时[objects insertObject:objectSprite atIndex:0];用于始终将最新创建的对象作为阵列中的第一个对象。这样,我就不再需要阵列了。但是,我仍然存在一个问题,即每个对象都没有启动自己的新runAction。因此,问题仍然存在。
SKSpriteNode *touchedObject = (SKSpriteNode*)contact.bodyA.node;
SKAction *objectFadeOutLocal = [SKAction fadeAlphaTo:0 duration:0.75];
SKAction *objectRemoveLocal = [SKAction removeFromParent];
SKAction *objectDeathRotationLocal = [SKAction rotateByAngle:M_PI*2 duration:3];