ios - 为什么 SKEmitterNode 会破坏累积的帧?

标签 ios objective-c sprite-kit sknode skemitternode

我使用以下代码块,当我调试时,我看到 SKShapeNode 的累积帧现在是 {{-160.03586, -42.431793}, {470.03586, 519.50903}} 而不是 {{0,0}, {100,300}}.

如果我注释掉整个粒子代码,accumulatedFrame 又有意义了。

我需要它有意义,因为我在 touchesBegan 中使用 nodesAtPoint。任何无意义的值都会导致 nodesAtPoint 也找到不相关的节点,因为 accumulatedFrame 现在对所有人来说都很奇怪而且它们都相交......

我使用了下面的代码块,但我找不到问题所在。我在这里想念什么?

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];

最佳答案

accumulatedFrame 顾名思义,它是包含节点所有图形对象的最小矩形。发射器节点实际上会将节点添加到它所添加到的对象中。它在计算累积帧时完全按预期工作。

解决这个问题的方法是让发射器节点有一个“目标节点”。 SKEmitterNode 有一个名为 .targetNode 的属性。它基本上意味着它将其 Sprite 放入该节点。

我发现拥有一个包含我所有发射节点的单个 SKNode 是一种很好的方法。然后将其与我单击的图层分开。

查看 SKEmitterNode 类引用以获取有关 targetNode 的更多信息。

SKEmitter Node class reference

关于ios - 为什么 SKEmitterNode 会破坏累积的帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702661/

相关文章:

ios - iOS 7 中的图像解压缩

objective-c - 如何使用 UIImage 加载 16 位图像?

objective-c - MPMoviePlayerController 在四秒后停止

swift - 在 swift 中使用未解析的标识符 'UITextBorderStyleRoundedRect'

ios - “文本”不可用 : APIs deprecated as of iOS7. .. 如何从 alert.textFields[0] 获取文本值?

objective-c - 如何在自定义 NSView 中设置光标?

ios - 无法在所有设备上获取推送通知

ios - 球从墙上弹起不起作用

ios - 限制 gameScene 的边

ios - Swift 中的变量无法转换为 CGContext