如何引用GameScene.swift文件作为其余游戏关卡的基础?

时间:2017-08-24 19:49:40

标签: ios xcode swift3 sprite-kit

我正在开发spritekit游戏并完成第一级游戏。对于级别1,我使用.sks文件来布局场景并将其链接到GameScene.swift文件以获取逻辑。

当我进入下一个级别时,很可能称为" GameScene2.swift"有没有办法可以引用已完成的Gamescene.swift文件作为我的下一个级别的基础,然后根据需要覆盖?像didMoveto和didBegin这样的东西在各级之间大致相同。

我一直在谷歌上搜索这个概念,但是还没有找到很多东西,我真的不知道该怎么称呼这个概念,这可能就是我无法理解的原因找到很多。任何见解将不胜感激。

2 个答案:

答案 0 :(得分:1)

是的,您可以将原始的Gamescene子类化,并从您正在创建的其他游戏场景中继承其所有功能。

因此,您将创建一个继承自SKScene的原创游戏场景,如下所示:

class OriginalGameScene: SKScene {

    // all of your shared logic here (didMoveTo and didBegin) functions

}

对于项目中的所有游戏场景,只需继承原始游戏场景:

class FirstGameScene: OriginalGameScene {

    // this class has the logic from the functions didMoveTo and didBegin 

}

只在您OriginalGameScene中的每个其他游戏场景中放置您想要共享的逻辑,并且您将能够访问您在OriginalGameScene文件中实现的任何功能或逻辑。

答案 1 :(得分:1)

我的处理方式略有不同。

我将所有核心游戏引擎的东西放在我的GameScene.swift和GameScene.sks文件中(即。gameHUD,播放器,得分,暂停等等)

然后我将Level1.sks,Level2.sks等分别创建我的关卡文件。但是这些将是类类型Level,这样你就不必再重复每个级别的通用内容了。 Level.sks文件。 然后我加载GameScene文件并处理所有级别的通用对象。

然后我加载我的等级。重要的是要注意,当这样做并为Levels和GameScene设置单独的sks文件时,您必须在加载它们时将对象从Level文件移动到GameScene。 func createLevel(levelID:Int){

if let levelNode = SKReferenceNode(fileNamed: "Level\(levelID)") {

    if let background = levelNode.childNode(withName: "backgroundTiles") as? SKTileMapNode {
        background.move(toParent: self)
    }

    if let water = levelNode.childNode(withName: "waterTiles") as? SKTileMapNode {
        water.move(toParent: self)
    }

    if let badGuy = levelNode.childNode(withName: "badGuy") as? SKSpriteNode {
        self.badGuy = badGuy
        badGuy.move(toParent: self)
    }
}

}

  

编辑新解释

想象一下你创造了一个pacman游戏。

弄清楚任何级别的共同点。在这种情况下...   - 吃豆子酱   - 得分标签   - 制表分数   - 幽灵运动   - pacman的运动   - 水果运动

接下来弄清楚每个级别的独特之处   - 幽灵起始位置  - 迷宫   - 水果开始位置

因此,在您的GameScene.sks文件中,您的分数标签和每个级别上发生的任何GUI

在您的GameScene.swift文件中处理设置您在sks文件中布局的任何GUI。还处理幽灵的运动,吃水的运动,水果的运动,得分处理,物理等。

在单个SKS文件Level1,Level2等中创建迷宫。这允许您按照图形方式布置每个迷宫,您还可以在每个级别放置鬼魂起始位置,以及每个级别放置水果起始位置。

在GameScene内部,您可以根据播放器所在的级别加载level.sks文件。当你加载sks文件时,你现在根据从level.sks文件加载的信息放置鬼,物理,水果等。

所以现在你有了一个很好的流媒体GameScene文件来处理所有的核心功能,没有任何重复,所有特定级别的信息都存储在你的Level.sks文件中。