我一直收到错误的说法“预期声明”

时间:2016-09-01 18:28:12

标签: swift xcode

我正在按照教程制作一个飞扬鸟的版本。我正在使用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 */
    }
}

2 个答案:

答案 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方法。