Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应
Posted
技术标签:
【中文标题】Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应【英文标题】:Swift - SpriteKit : Make sprites reacting to eachothers if added with different "addchild" parents 【发布时间】:2016-06-14 14:21:20 【问题描述】:我在我的场景中添加了几个精灵 (SKSpriteNode),如下所示:
let NPuzzle_Texture = SKTexture(imageNamed: "SKTexture.png")
NPuzzle0 = SKSpriteNode(texture: NPuzzle_Texture)
NPuzzle1 = SKSpriteNode(texture: NPuzzle_Texture)
NPuzzle2 = SKSpriteNode(texture: NPuzzle_Texture)
NPuzzle0.position = CGPoint (x: 100, y:125)
NPuzzle0.position = CGPoint (x: 300, y:125)
NPuzzle0.position = CGPoint (x: 500, y:125)
background.addChild(NPuzzle0)
background.addChild(NPuzzle1)
background.addChild(NPuzzle2)
我还添加了几个不同纹理的精灵:
let Grey_Back = SKTexture(imageNamed: "Grey_Back.png")
grey_back = SKSpriteNode(texture: Grey_back)
grey_back.position = CGPoint (x: 1024, y:125)
grey_back.alpha = 0.5
background.addChild(grey_back)
现在我将新的精灵 (SKSpriteNode) 添加到先例的 gray_back 中,如下所示:
grey_back.addChild(new_sprite1)
grey_back.addChild(new_sprite2)
grey_back.addChild(new_sprite3)
当我尝试查看 new_sprite 的位置是否与 NPuzzle 精灵相交时,什么都没有发生。但是如果 new_sprite 被添加到场景中:
background.addChild(new_sprite0)
background.addChild(new_sprite1)
background.addChild(new_sprite2)
它有效。事实上,如果精灵已经添加了不同的父母(背景和灰色背景),它就不起作用。我不明白的是 gray_back 是背景的孩子,所以它应该可以工作。为什么不呢?
这是一个检查精灵是否相互交叉的代码示例:
switch selectedNode.name
case "new_sprite0":
if selectedNode.frame.intersects(NPuzzle0.frame) && (selectedNode.angle == 0)
谢谢!
【问题讨论】:
frame 是相对于父节点的框架。如果要比较帧,它们必须都是同一节点的子节点。否则,您将不得不翻译框架... 【参考方案1】:switch selectedNode.name
let framePoint = CGPointMake(selectedNode.frame.origin.x, selectedNode.frame.origin.y)
let translatedPoint = selectedNode.parent!.convertPoint(framePoint, toNode:NPuzzle0.parent!)
let translatedFrame = CGRectMake(translatedPoint.x, translatedPoint.y, selectedNode.frame.size.width, selectedNode.frame.size.height)
if translatedFrame.intersects(NPuzzle0.frame) && (selectedNode.zRotation == 0)
print("ok")
显然,因为帧是相对于父级的,所以必须将节点添加到场景中。你可以看到我还对父级使用了强制解包...
【讨论】:
非常感谢您的帮助,我已经尝试了您记下的代码,但这并没有改变。相交测试仍然不起作用。我想将拼图部件放在一个从左到右(4096 像素宽度)的大型移动滑块上,并能够将它们拾取到场景中。这就是为什么我需要一个不同的父级(滑块具有 alpha 并从左到右移动,称为 gray_back)和场景(背景)。 我已经用你的代码做了几次尝试,我完成了更好的结果(我认为转换有效)但是当框架相交时我仍然得到一个致命错误:“unexpected found nil while unwrapping an可选值”。 感谢 Daniel,您的代码运行良好。事实上,我后来在检查后删除了 SelectedNode,这导致了这个 nil 问题,但现在已经解决了。以上是关于Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应的主要内容,如果未能解决你的问题,请参考以下文章
SpriteKit - 节点未添加到 SKCameraNode - Swift
Swift/SpriteKit - ApplyImpluse 的速度是不是以增量方式工作(每次都添加到先前的值)?
使用 Swift 在 SpriteKit 中将自定义“数字”图像作为分数添加到 SKLabelNode
Swift:Spritekit 中的多个场景,从第二个和第一个场景的不同 Sprite 节点类型调用 touchesBegan