我正在遵循教程制作flappy bird的版本。我用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 */
}
}
声明指的是创建一个新的变量或方法。编写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的新函数,所以它希望你通过使用"func"关键字来声明它,这就是为什么它给你错误,但显然你不是在创建一个名为addChild的函数,你需要调用它
你必须在函数/方法中调用addChild(),因为它调用了SKNode的addChild方法。
当你写
addChild(self.myFloor1)
你正在调用一个方法,这个方法必须在另一个方法声明中完成。
在你的类声明中,"最高级"的"事物"需要被声明为:"var","let","func"。然后在"func"中,你可以调用你的addChild方法。
这就是为什么你会得到这个错误:在那个"类"级别,它只期望你可以指定它们是什么。但在这里,你不是。您正在尝试直接调用该方法。
我怀疑你可能想要的,是添加viewDidLoad方法并从里面调用addChild。或者类似的事情……