Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 如何在游戏场景中保持指向SKView的指针_Pointers_Swift_Sprite Kit - Fatal编程技术网

Pointers 如何在游戏场景中保持指向SKView的指针

Pointers 如何在游戏场景中保持指向SKView的指针,pointers,swift,sprite-kit,Pointers,Swift,Sprite Kit,我想在场景中保留一个指向GameViewController的指针,以便能够从中在场景之间切换。我来自C++,这是我在斯威夫特中很难理解的一个话题。如何做到这一点 这就是我正在尝试的: class SplashScene: SKScene { var view = SKView() override func didMoveToView(view: SKView) { self.view = &view NSTimer.scheduled

我想在场景中保留一个指向GameViewController的指针,以便能够从中在场景之间切换。我来自C++,这是我在斯威夫特中很难理解的一个话题。如何做到这一点

这就是我正在尝试的:

class SplashScene: SKScene
{
    var view = SKView()

    override func didMoveToView(view: SKView) {
        self.view = &view
        NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("transitionToGameScene"), userInfo: nil, repeats: false)
    }

    func transitionToGameScene() {
        let scene = GameScene()
        view.ignoresSiblingOrder = true
        view.presentScene(scene, transition: SKTransition.crossFadeWithDuration(1))
    }
}

SKScene
已经有一个
view
属性,该属性包含
SKView
所以,对于问题的这一部分,只需使用已经存在的属性:

class SplashScene: SKScene
{
    override func didMoveToView(view: SKView) {
        NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("transitionToGameScene"), userInfo: nil, repeats: false)
    }

    func transitionToGameScene() {
        let scene = GameScene()
        view.ignoresSiblingOrder = true
        view.presentScene(scene, transition: SKTransition.crossFadeWithDuration(1))
    }
}
<关于指针的问题:SWIFT确实没有,至少没有指针指向C++中的内存位置。您可以执行原始代码试图执行的操作,只是不要使用
&
操作符;Swift将在内部存储对对象实例的引用(类似于C++指针,但不能直接与之混淆)。 但是,当涉及到
struct
s与
class
es时,您必须小心。Swift将存储对
实例的引用,但对于
结构
,它实际上会复制整个数据结构,而不是存储对它的引用。看到了吗,在


此外,Swift中还不时使用
&
运算符。它的主要用途是与。在C++中,你可以用同样的方式来思考它。

嗨,迈克,我可以让它和那个代码一起工作,但是我的游戏变得越来越差。我不明白为什么,因为帧率和内存使用似乎没有改变。你知道可能的问题是什么吗?@Lisovacaro我实际上对SpriteKit的过渡没有太多经验,所以你的猜测可能和我的一样好。如果只是在过渡期间出现延迟,那么我唯一的想法就是尝试在过渡之前暂停场景。在您的场景中,您可以使用
view.paused=true
暂停(您可以通过将其
paused
属性设置为
true
来暂停任何单个
SKNode
及其子节点)。在转换过程中没有问题,但当我从Splash场景进入游戏场景时,角色移动变得缓慢。我发誓,如果帧速率没有显示60帧,它就会下降。@Lisovacaro怪异。。。您是否尝试暂停
SplashScene
以查看这是否有帮助?也许是因为某种原因,它试图在过渡后同时运行这两个场景?我假设如果你把SplashScene全部去掉,那么一切都会好起来?是的,我怀疑同样的事情,我在SplashScene中添加了一个println到更新函数中,但它没有运行,我也尝试过暂停它。这可能是一个bug,代码没有为错误注释留下太多空间:不要使用NSTimer计时,使用SKAction。