【发布时间】:2015-03-04 23:35:38
【问题描述】:
我正在尝试自学 Sprite Kit 和 Swift。我要做的是从 ArcheryScene.sks 文件中访问一个子节点,并从 ArcheryScene.swift 文件中影响该子节点。例如:在我的 ArcheryScene.swift 文件中,我添加了这行代码:let scene = SKScene(fileNamed: "ArcheryScene")。
这编译得很好,当我说println(scene) 时,它会正确打印我想要打印的场景,这就是我知道 ArcheryScene.sks 真正在我的scene 变量中的方式。在此之后,我通过添加以下代码行来访问该场景中的一个孩子:let ballChild = scene.childNodeWithName("Ball")。当我使用println(ballChild) 时,它会打印出正确的孩子,让我知道该变量确实包含 ArcheryScene.sks 中的 Ball 孩子。现在我的问题...
为什么我不能在我的 ArcheryScene.swift 文件中说:
ballChild?.physicsBody?.affectedByGravity = false
或
ballChild?.position.x = self.frame.size.width / 2
或
let move = SKAction.moveByX(40, y: 0, duration: 5.0)
ballChild?.runAction(move)
所有这些代码都可以正常编译,但是当我运行游戏时,Ball 完全不受影响。另外,如果我运行ballChild?.position.x = self.frame.size.width / 2 然后打印ballChild 位置,它将显示为x:512,这是应该的,但是当我运行游戏时,Ball 不受影响。这对我来说真的很困惑,我只想弄清楚发生了什么。任何建议将不胜感激,谢谢。
【问题讨论】:
-
老实说,目前还不清楚您如何加载所有内容。如果您添加 5 或 10 行代码且解释较少,我认为会有所帮助。但是,作为一般规则,最好从另一个类调用方法,而不是更改变量。并尝试看看它是不是一个愚蠢的错误,例如物理问题,在同一个班级进行简单的测试。让球移动后,在方法中使用代码,然后从另一个类调用此方法。
-
提供更多的代码,更少的文字
-
您是否将
physicsBody附加到ballChild?如果没有,这毫无意义:ballChild?.physicsBody?.affectedByGravity = false -
是的,ArcheryScene.sks 文件中有一个下拉栏设置,让我可以选择将物理体设置为圆形
-
你是否真的在屏幕上显示
playScene(你有没有用它打电话给presentScene()
标签: ios swift sprite-kit skspritenode skscene