【发布时间】:2018-05-26 18:15:26
【问题描述】:
我正在使用 spritekit 制作游戏。我在我的游戏中使用了一个操纵杆,它在一个名为“操纵杆”的单独 SKNode 类中声明。
在这个类中,我将一个 UIGesturerecongiser 添加到该类的视图中。在构造方法中,参数之一是从游戏场景传递的SKView。
操纵杆类中的构造方法:
init(colour: UIColor, position: CGPoint, skView: SKView) {
//constructor method
self.colour = colour;
self.parentposition = position;
self.view = skView;
super.init();
//setup properties
//user interaction is needed to allow touches to be detected
self.isUserInteractionEnabled = true;
//setup
setup();
}
在游戏场景中,我这样初始化类:
class GameScene: SKScene {
func setupJoyStick() {
let joystick1 = Joystick(colour: UIColor.red, position: CGPoint(x: screenwidth / 3, y: screenwidth / 10 * 1.5), skView: self.view!)
self.addChild(joystick1)
}
}
错误:
当我运行我的应用程序时,我收到一个错误,因为“self.view”返回 nil,并且因为它被强制解包,它会导致一个致命错误。
定义视图的位置:
if let scene = GKScene(fileNamed: "GameScene") {
// Get the SKScene from the loaded GKScene
if let sceneNode = scene.rootNode as! GameScene? {
// Copy gameplay related content over to the scene
sceneNode.entities = scene.entities
sceneNode.graphs = scene.graphs
// Set the scale mode to scale to fit the window
sceneNode.scaleMode = .aspectFill
sceneNode.size = view.bounds.size
// Present the scene
if let view = self.view as! SKView? {
view.presentScene(sceneNode)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
}
其他信息:
我正在使用:
- Xcode 9.2
- 斯威夫特 4
- 雪碧套件
我正在测试它:
- iPhone 6s
- 最新版本的 IOS(非测试版),最新的公开版本。
谁能解释一下为什么会发生这种情况以及如何解决这个问题。
在此先感谢,任何帮助将不胜感激。
【问题讨论】:
-
你能分享你调用
Joystickinit的代码和你存储self.view的代码吗? -
到目前为止,您显示了与问题无关的所有代码,操纵杆初始化程序无关紧要,因为它甚至没有到达,您需要显示调用它的核心及其上下文。