Godot Engine GDScript 10 「練習、練習」... また練習
さて、change_scene()
を組み込もうと思ったのだが、これだと、シーンツリーの中身を全とっかえになってしまうので、なんか都合が悪いような気がする。オプションメニューとかハイスコアとかプレイヤーの状態とかで、特に保存するものは無いのだが、もうちょっと複雑にシーンが絡んでくるゲームでも対応できるように仕組みを作りたい。
change_scene()
でやると以下の図のような感じ。
こうじゃなくて、ゲームスタート時にメインシーンとして、いわゆる何とかマネージャーのような「神シーン」を読み込んでおき、いろいろなシーンからの情報を蓄えられるようにして、必要なシーンはこの「神シーン」に付けたり外したりしながら管理できないものかと考え中。
図で示すと以下のような感じ。
「シーンA」にはホッケーテーブルの画像、「シーンB」にはパック、「シーンC」にはプレイヤー用マレット、「シーンD」にはコンピューター用マレット、「シーンE」には得点画面、「シーンF」にはスタート画面、「シーンG」にはポーズメニュー、「シーンH」にはゲームオーバー画面、・・・などなど。ゲーム中の画面でも複数のシーンが重なって出来ているイメージ。
シーンをインスタンス化して、特定のノードの子として追加してやれば出来そうな感じなのだが、ちょっと苦戦中。
onready var XXXXX = preload("YYYYY") ~ instance() add_child() ~ queue_free()
この辺がカギになりそうだ。
練習、練習でシーンを3つ
練習用に新規プロジェクトで、シーンを3つ作る。「シーンGOD」、「シーンA」、「シーンB」の3つ。「シーンGOD」はノードを3つ。また、「シーンA」には ボタンとGodot の icon.png を1つ、「シーンB」には icon.png を2つ置く。
流れ的には、
- ゲーム開始と同時に読み込む「シーンGOD」(メインシーンであり、模擬シーンマネージャー)。
- 「シーンGOD」がスクリプトにて「シーンA」(模擬タイトル画面)を読み込む。
- そして、「シーンA」のボタンが押されると、スクリプトにて「シーンA」をリムーブし「シーンB」(模擬ゲーム画面)を読み込む。
という流れを想定。
メインシーンの設定
Godot は、ゲーム開始と同時にメインシーンと呼ばれるシーンを自動的にシーンツリーに追加するようになっている。ここに「シーンGOD」を読み込ませたいので、「シーンGOD」をメインシーンにするための設定をする。
メインシーンがまだ決定されていない場合は、[シーン再生] ボタンではなく、[ゲーム再生] ボタンを押すとメインシーンをどれにするか選択できるようになる。ここで、普通に「シーンGOD」(sn_God.tscn)を選択。これだけでOK。(ゲームが再生されるが、[停止] で。)
だが、もし、間違って違うシーンをメインシーンに設定してしまったら、メニュー > [Project] > [Project Settings] から修正できる。
Generalタブ > [Application] > [Run] > [Main Scene] でパスを入れるか、横の [フォルダアイコン] からファイルを選んでやればいい。
スクリプトの作成
メインシーンにした「シーンGOD」のルートノードにスクリプトを貼るのだが、それはまた今度。現在苦戦中。