2017-08-24 5 views
0

私はspritekitゲームに取り組んでおり、最初のレベルが完了しました。レベル1では、.sksファイルを使用してシーンをレイアウトし、それをロジックのGameScene.swiftファイルにリンクしました。GameScene.swiftファイルを他のゲームレベルのベースとしてどのように参照できますか?

「GameScene2.swift」と呼ばれる可能性が最も高い次のレベルのベースとして完了したGamescene.swiftファイルを参照し、必要に応じて上書きする方法はありますか? didMovetoやdidBeginのようなものは、レベル間でほとんど同じになるでしょう。

私はこのコンセプトに取り組んできましたが、それほど多くは見つけられていませんでしたが、実際にこのコンセプトを実際にどのように呼び出すべきかはわかりません。どんな洞察力も大変高く評価されます。

答えて

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ファイルに実装されている関数やロジックにアクセスできます。

+0

このように関数に追加することはできますか?たとえば、一般的なdidBeginはすべてのレベルに渡されます。レベル2の場合、新しい連絡先パラメータを追加する必要がありましたが、古い連絡先パラメータはすべて保持する必要がありましたか? – genericguy25

+0

@ genericguy25機能を編集する必要がある場合は、OriginalGameSceneの任意の機能を上書きできますが、新しいパラメータを追加するには、まったく新しい機能を作成する必要があります。 –

+0

ああ、ありがとう、ありがとう。これは最も簡単な解決策のようです! – genericguy25

1

私はこれを少し違って扱います。

私はその後、レベル1として別に私のレベルファイルを作成し、私のGameScene.swiftとGameScene.sksファイルに

を(すなわち。gameHUD、プレーヤー、得点、一時停止...など)すべてのコアゲームエンジンのものを置きます.sks、Level2.sksなどですが、これらはクラスタイプのレベルになります。このようにして、各Level.sksファイルのすべてのレベルで一般的な一般的なものを繰り返し続ける必要はありません。 その後、GameSceneファイルを読み込んで、すべてのレベルに共通するオブジェクトを処理します。

私は自分のレベルを読み込みます。このように、LevelsとGameScene用に別々のsksファイルを作成するときは、オブジェクトをロードするときにレベルファイルから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) 
    } 
} 

}

編集新しい説明

あなたはパックマンのゲームを作成する想像してみてください。

どのレベルに共通するものを見つけます。この場合... - パックマン - スコアラベル - スコア集計 - ゴースト運動 - パックマンの動き - フルーツの動き

各レベル にユニークなものを次の図アウト - ゴースト開始位置 - 迷路 - フルーツの開始位置

だからあなたGameScene.sksファイルのレイアウトであなたのスコアラベルとあなたのGameScene.swiftファイルでは、すべてのレベル

に起こるすべてのGUIは、いずれかの設定を扱いますあなたのsksファイルにレイアウトしたGUI。

個々のSKSファイルレベル1、レベル2などで迷路を作成することができます。これにより、各迷路を図形的にレイアウトすることができますレベルごとにゴースト開始地点を配置したり、レベルごとに果物開始地点を配置したりすることもできます。

GameSceneの内部では、プレイレベルがどのレベルにあるかに基づいてlevel.sksファイルを読み込みます。 sksファイルを読み込むと、level.sksファイルから読み込まれた情報に基づいて、ゴースト、レベルの物理、果物などを配置します。

これで、すべてのコア機能を処理し、何も複製されず、すべてのレベル固有の情報がLevel.sksファイルに保存されている素晴らしいストリームのGameSceneファイルが作成されました。

+0

応答ありがとう!私はそれを完全に把握していませんが、実際のレベルのクラスをどのようにセットアップして別のlevel.sksで作業するかについてもう少し詳しく教えてください。 – genericguy25

+0

さらに詳しい説明を追加 –

+0

ああ、それはより意味をなさなく、ありがとう!私はこれを試してみる – genericguy25

関連する問題