我不断收到一条错误消息,说"expected declaration"



我正在遵循教程制作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。或者类似的事情……

最新更新