Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Swift 在scenekit中设置游戏场景时出错_Swift_Scenekit - Fatal编程技术网

Swift 在scenekit中设置游戏场景时出错

Swift 在scenekit中设置游戏场景时出错,swift,scenekit,Swift,Scenekit,嘿,我想在《鳕鱼》中为我的游戏制造一个场景 class GameSCNScene:SCNScene{ let scnView: SCNView! let _size:CGSize! var scene:SCNScene! required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } init(currentview view: SCNView) { s

嘿,我想在《鳕鱼》中为我的游戏制造一个场景

class GameSCNScene:SCNScene{
let scnView: SCNView!
let _size:CGSize!
var scene:SCNScene!

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
init(currentview view: SCNView) {
    super.init()

    scnView = view
    _size = scnView.bounds.size
    // retrieve the SCNView
    scene = SCNScene()
    scnView.scene = scene
    scnView.allowsCameraControl = true
    scnView.showsStatistics = true
    scnView.backgroundColor = UIColor.blackColor()

}
}
但是编译器给出了这个错误“Getter for'scene'with Objective-C selector'scene'与initializer'init()”冲突(来自具有相同Objective-C选择器的超类'SCNScene')我不知道如何删除这个错误。。。请帮助我,我是swift的新手。错误消息告诉您,在超类上已经定义了一个名为
scene
的方法,您的新定义与此冲突。这是一个类方法,具有Objective-C签名
[SCNScene scene scene]
,Swift将其理解为
init()
。超类的
scene
方法与您的
var scene:SCNScene冲突。这就是你问的问题的答案

然而

场景
上设置
场景
是没有意义的。这就是你定义的

在SCNScene上定义一个
视图
属性是非常有问题的做法。一个场景可以同时显示在多个视图中。它可以在完全没有视图的情况下进行渲染

SCNScene并不意味着是子类。这里有一个关于这方面的讨论:。苹果公司的SceneKit工程师在这里记录在案,他们反对这种做法。(上周末,我试图对SCNNode进行子类化,结果把自己弄到了一个角落;也不要对它进行子类化!)

最常见的做法似乎是将您向我们展示的初始化代码移到视图控制器上。对于初学者来说,这是一个相当简单、合理的方法。然而,这种架构使得视图控制器非常复杂、臃肿。最好的方法是将游戏逻辑放在自己的游戏控制器类中

将SCNScene视为数据。游戏控制器包含逻辑。当你准备为游戏添加第二关卡时,你可以使用同一个游戏控制器编写第二个SCNScene并加载它。当您准备将游戏从iOS移动到OSX或tvOS时,您需要编写一个新的视图控制器,但可以重用场景和游戏控制器


由于您是Swift新手,您的第一站应该是丹尼尔·斯坦伯格(Daniel Steinberg)的书《Swift Kickstart》,可在iBooks上找到。

错误消息告诉您,在超类上已经定义了一个名为
scene
的方法,您的新定义与之冲突。这是一个类方法,具有Objective-C签名
[SCNScene scene scene]
,Swift将其理解为
init()
。超类的
scene
方法与您的
var scene:SCNScene冲突。这就是你问的问题的答案

然而

场景
上设置
场景
是没有意义的。这就是你定义的

在SCNScene上定义一个
视图
属性是非常有问题的做法。一个场景可以同时显示在多个视图中。它可以在完全没有视图的情况下进行渲染

SCNScene并不意味着是子类。这里有一个关于这方面的讨论:。苹果公司的SceneKit工程师在这里记录在案,他们反对这种做法。(上周末,我试图对SCNNode进行子类化,结果把自己弄到了一个角落;也不要对它进行子类化!)

最常见的做法似乎是将您向我们展示的初始化代码移到视图控制器上。对于初学者来说,这是一个相当简单、合理的方法。然而,这种架构使得视图控制器非常复杂、臃肿。最好的方法是将游戏逻辑放在自己的游戏控制器类中

将SCNScene视为数据。游戏控制器包含逻辑。当你准备为游戏添加第二关卡时,你可以使用同一个游戏控制器编写第二个SCNScene并加载它。当您准备将游戏从iOS移动到OSX或tvOS时,您需要编写一个新的视图控制器,但可以重用场景和游戏控制器


由于您是Swift新手,您的第一站应该是丹尼尔·斯坦伯格的《Swift启动》一书,可在iBooks上找到。

很好的解释谢谢……很好的解释谢谢。。。。