我正在使用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
}
}
}
其他信息:
我正在使用:
我正在测试它:
有人可以解释为什么会发生这种情况以及如何解决这个问题。
在此先感谢,任何帮助将不胜感激。