我正在按照教程制作一个飞扬鸟的版本。我正在使用swift,这个错误不断出现。 “addChild(self.myFloor1)一直在说预期的声明错误。我做错了什么?
import SpriteKit
class GameScene: SKScene, SKPhysicsContactDelegate {
var myBackground = SKSpriteNode()
var myFloor1 = SKSpriteNode()
var myFloor2 = SKSpriteNode()
addChild(self.myFloor1)
override func didMoveToView(view: SKView) {
myBackground = SKSpriteNode(imageNamed: "background")
myBackground.anchorPoint = CGPointZero;
myBackground.position = CGPointMake(100, 0);
self.backgroundColor = SKColor(red: 80.0/255.0, green: 192.0/255.0, blue: 203.0/255.0, alpha: 1.0)
addChild(self.myBackground)
myFloor1 = SKSpriteNode(imageNamed: "floor")
myFloor2 = SKSpriteNode(imageNamed: "floor")
myFloor1.anchorPoint = CGPointZero;
myFloor1.position = CGPointMake(0, 0);
myFloor2.anchorPoint = CGPointZero;
myFloor2.position = CGPointMake(myFloor1.size.width-1, 0);
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
答案 0 :(得分:1)
写作时
addChild(self.myFloor1)
您正在调用一个方法,该方法必须在另一个方法声明中完成。
在您的班级声明中,&#34;最高级别&#34; &#34;东西&#34;需要被声明为:&#34; var&#34;,&#34; let&#34;,&#34; func&#34;。然后在&#34; func&#34;中,您可以调用addChild方法。
这就是你得到错误的原因:那个&#34;类&#34;等级,它只期望你可以指定它们是什么。在这里,你不是。您正试图直接调用该方法。
我怀疑你可能想要的是添加viewDidLoad方法并从那里调用addChild。或类似的东西......无论对你的视图生命周期有什么意义。
答案 1 :(得分:1)
声明是指创建新变量或方法。您编写addChild()的位置好像您正在创建一个新变量。例如,让我们看看下面的简单类。
class GameScene: SKScene {
var myBackground = SKSpriteNode()
}
变量myBackground被声明为新变量。您正在创建SKSpriteNode对象的新实例。 SKSpriteNode也是一个类。现在让我们为您的GameScene类添加一个打印hello的方法。您在类中声明的所有内容都被称为顶层,即创建变量和函数的位置等。
class GameScene: SKScene {
var myBackground = SKSpriteNode()
//This is a method/function of the class GameScene
func sayHello() {
print("Hello.")
}
//CAN'T CALL ITS OWN METHOD AT THE TOP LEVEL
sayHello()
}
为了帮助您理解,addChild是SKNode类的方法/功能。
class SKNode: UIResponder {
func addChild(node: SKNode) {...}
}
所以,当你有类似的东西时,它没有意义,因为addChild是一个函数,你不能在类的顶级调用函数。
class GameScene: SKScene {
var myBackground = SKSpriteNode()
var myFloor1 = SKSpriteNode()
//CAN'T CALL METHOD ON TOP LEVEL OF CLASS
addChild(self.myFloor1)
}
Xcode认为您正在创建一个名为addChild的新功能,所以它希望您使用&#34; func&#34;来声明它。关键字,这就是为什么它会给你错误,但显然你没有创建函数调用addChild,你需要调用它。
你必须在函数/方法中调用addChild(),因为它调用了SKNode的addChild方法。