【发布时间】:2014-08-28 10:26:05
【问题描述】:
我正在开发一款游戏。游戏的代码几乎完全在 PlayScene.swift 文件中。但是,由于我需要识别平移手势,我不得不将 UIPanGestureRecognizer 放入我的 ViewController.swift 中。当玩家拖动屏幕时,我想旋转在 PlayScene.swift 中声明和使用的 SpriteNode。这个 spriteNode 的名称是 Tommy,但是当我从 ViewController(这是我在 PlayScene.swift 中的自定义函数)执行 PlayScene().rotateTommyLeft() 时,调用了函数 rotateTommyLeft,但它不会旋转同一个精灵目前正在运行。它创建一个 PlayScene 类的新实例,创建新的 SpriteNode tommy,然后旋转那个。
如何从当前运行的 PlaySceen 访问 SpriteNode tommy?
编辑:我正在发布部分代码,以便我们解决有关存储场景和在其他类之间传输它的问题。
在我的 GameScene 类的顶部,我声明了变量 storedPlayScene 来存储游戏发生的场景。
var storedPlayScene = PlayScene()
然后,我创建场景并在按下播放按钮时呈现它(也在 GameScene 类中)
var scene = PlayScene(size: self.size)
let skView = self.view as SKView
skView.ignoresSiblingOrder = true
scene.scaleMode = .ResizeFill
scene.size = skView.bounds.size
scene.backgroundColor = UIColor(red: 106/255.0, green: 180/255.0, blue: 1.0, alpha: 1.0)
storedPlayScene = scene
skView.presentScene(scene)
现在,当我尝试从 ViewController 类中获取属于 PlayScene 类的两个变量时,出现了令人惊讶的部分。
当我在 ViewController 类中写这个时
var rotation = GameScene().getStoredPlayScene().tommy.zRotation 我得到了正确的 zRotation。
但是,当我在同一个 ViewController 类var position = GameScene().getStoredPlayScene().getPos() 中编写此代码时,数据不正确。它说位置是(0,0)。
我无法弄清楚为什么 zRotation 很好时位置不正确。
【问题讨论】:
-
您何时/何地创建正在使用的
PlayScene实例?您需要存储对该实例的引用并使用该引用调用playScene.rotateTommyLeft()。 -
谢谢。我找到了代码。它是在名为 GameScene 的先前场景中创建的。我究竟如何存储它,以便我也可以从控制器访问它?我尝试将它存储在 NSUserDefaults 中,但我无法检索它。您是否建议将其存储在任何其他变量中?
-
不要为此使用 NSUserDefaults,这不是它的用途。 没有看到你的代码和/或不知道你的项目是如何布局的,很难准确地说出你是什么应该做。但是,一般来说,听起来
PlayScene应该是GameScene上的property,它应该是视图控制器上的一个属性。然后你可以从你的视图控制器访问PlayScene,比如self.gameScene.playScene。 -
好的,我创建了一个存储 PlayScene 类的变量,但我遇到了部分问题。你能看看编辑吗?
-
几件事:1.它应该是
var storedPlayScene: PlayScene!,当你使用... = PlayScene()时,你正在创建一个新实例,这不是你想要的。 2.var rotation = GameScene()...正在创建GameScene的新实例,这也不是您想要的。你应该在你的视图控制器中为你的GameScene、storedGameScene或其他东西提供类似于storedPlayScene的东西。
标签: ios swift sprite-kit uipangesturerecognizer skspritenode