我在做一个越狱式游戏。我在一个不同的场景(PaddleScene.sks)中创建了这个桨,这样我就可以在多个级别上引用它。还不确定这是怎么回事,还是个新手。
我通过GameScene.sks通过SKReferenceNode添加了桨,并在代码中引用它,如下所示:
paddle = self.childNode(withName: "//paddle") as! SKSpriteNode这是可行的,但问题是现在paddle.position.x给了我0,因为这是它在PaddleScene.sks中的位置。所以我必须使用SKReferenceNode来获得GameScene内部的位置。
paddleRef = self.childNode(withName: "paddleScene") as! SKReferenceNode所以现在我必须跟踪两个变量,而不是一个变量。是否有更容易的方法在我的场景中导入外部对象而不具有多个变量?
发布于 2017-03-18 18:12:49
你能贴出你用来创建桨的代码吗?还有您在GameScene中引用桨的代码吗?
引用的节点(在您的例子中是paddle)是SKReferenceNode的子节点。这意味着您的划桨分配行应改为:
let paddle = paddleRef.childNode(withName: "paddle")然后,您应该只需要使用paddle而不是使用paddleRef。
或者,我会为paddle创建一个专用类,作为SKSpriteNode的一个子类。它将处理与桨有关的一切-它的位置,旋转,大小,透明度,图像,颜色,等等。
然后,在任何场景中重用paddle就变得非常容易了--只需在场景代码中创建这个类的实例,如下所示:
let paddle = Paddle()(我想你会把你的桨类命名为“桨”)。然后,您只处理一个对象,而您的paddle属性将正常工作-- paddle.position、paddle.zRotation、paddle.size等。
如果您需要任何关于如何设置paddle类的帮助,请告诉我。
斯托扬
发布于 2017-03-18 22:14:56
我最近开始使用场景编辑器(几乎),我喜欢我的对象的视觉布局。我为复杂的对象(不仅仅是场景)创建场景(sks)文件,并使用引用节点将它们放在我的场景文件中,以便在多个场景中重用它们,并直观地查看它们的布局。我还没有找到一种绕过双重引用的方法,但这就是我在代码中处理引用节点的方式。这种方法允许我将它们放置在场景编辑器中,但仍然可以在不关心额外对象的情况下定位。
if let paddleReference = self.childNode(withName: "paddle") as? SKReferenceNode {
let paddleNode = paddleReference.getBasedChildNode() as? SKSpriteNode
self.paddle = paddleNode?.copy() as! SKSpriteNode
paddle.position = (paddleReference.position)
addChild(paddle)
paddleNode?.removeFromParent()
print("paddle.position \(paddle.position)")
}
extension SKReferenceNode {
func getBasedChildNode() -> SKNode? {
if let child = self.children.first?.children.first { return child }
else { return nil }
}
}@SimonePistecchia是这个扩展Add SKReferenceNode/SKScene to another SKScene in SpriteKit的信贷来源
https://stackoverflow.com/questions/42875397
复制相似问题