好的,这是代码
class GameViewController: UIViewController, SceneTransitionDelegate,
GKGameCenterControllerDelegate, ADBannerViewDelegate {
var coolbool:Bool = false
...abunch of unimportant stuff functions and stuff
}
这就是我想从我的SKScene
做的事情func thing1()
{
let controller = GameViewController()
controller.coolbool = true
println(controller.coolbool) // Will say that it is true
sceneDelegate.transitionToScene(Menu.self) //Menu.self is the skscene that
we used to be in and will be in
}
func thing2()
{
println(controller.coolbool) // Will say that it is false
if (controller.coolbool == true)
{
//Put rainbows over every sprite and change generator settings
}
}
所以基本上发生的事情是“coolbool”被初始化为假。直到调用thing1()导致变量“coolbool”发生变化。我在过渡之后立即确认了它的变化。然而在转换之后(到同一个场景(我试图让它看起来不同,如果bool是真的))如果你问这个值是什么,它就说它是假的....即使我只是把它设置为true
无论如何我认为我做错了什么,是他们更好的方法吗?你想要的就是过渡功能
func transitionToScene(sceneClass:Scene.Type) {
playing = false
var sizeRect = UIScreen.mainScreen().applicationFrame
var width = sizeRect.size.width * UIScreen.mainScreen().scale
var height = sizeRect.size.height * UIScreen.mainScreen().scale
let skView = self.view as! SKView
let scene = sceneClass(size: skView.bounds.size)
scene.size = CGSizeMake(width, height)
rwidth = width
rheight = height
swidth = width
sheight = height
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
scene.sceneDelegate = self
skView.presentScene(scene)
}
答案 0 :(得分:0)
你需要获取GameViewController的当前实例,所以这个语句:
let controller = GameViewController()
不能正常工作,因为它声明了一个控制器的新实例,它与您当前使用的SKView
无关。相反,我们需要获取当前,呈现视图控制器。
获取视图控制器的实例:
可以帮助我们的最接近的方法是UIResponder
类,它是nextResponder:
。它的一般功能是找到并返回当前的下一个响应者,这对我们来说似乎含糊不清,直到Apple提到:
子类必须覆盖此方法才能设置下一个响应者。 UIView通过返回管理它的UIViewController对象(如果有的话)或超级视图(如果没有)来实现此方法
这意味着如果我们在场景中,我们可以使用场景self.view
找到视图控制器,该场景是SKView
对象(继承自UIView
)。我们所要做的就是在响应器链中找到View Controller。
<强>夫特:强>
var currentViewController: GameViewController?
var upstreamResponder: UIResponder? = self.view
var found = false
while (found != true){
upstreamResponder = upstreamResponder!.nextResponder()
if let viewController = upstreamResponder as? GameViewController {
currentViewController = viewController
found = true
}
if upstreamResponder == nil {
//could not find VC, PANIC!
break
}
}
Objective-C:(可能需要#include&#34; GameViewController.h&#34;)
GameViewController *currentViewController;
UIResponder *upstreamResponder = self.view;
BOOL found = false;
while (found != true) {
upstreamResponder = [upstreamResponder nextResponder];
if ([upstreamResponder isKindOfClass:[GameViewController class]]) {
currentViewController = (GameViewController *)upstreamResponder;
}
if (upstreamResponder == nil) {
//omg where did VC go?!
break;
}
}
在View Controller上设置属性
现在您拥有了当前的视图控制器,设置任何所需的属性非常简单。因此,如果您想要更改coolbool
,您只需要声明:
currentViewController.coolbool = true
希望这有帮助!
-Max