card-game

godotでcard-gameを作成する。以下を参考にしていく。

コンテナに関するチュートリアルをみつけた。まず、ここを一通りさらってUIに関しての知識を付けるとよさそうだ。

Godotにおいて「コントロール」が何を指すかよくわかっていなかったがUIを作成するための要素らしい。

Godotにおいて「コントロール」が何を指すかよくわかっていなかったが

Godotのannotationの一覧が記述されている

@export の説明
以下のプロパティをエクスポート済み(インスペクタ・ドックで編集可能、ディスクに保存可能)としてマークします。エクスポートされるプロパティのタイプを制御するには、タイプヒント表記を使用します

Godotで、他のクラスをインスタンス化する際はインスタンス化対象のオブジェクトをシーンとして保存する必要がある。コードでインスタンス化したい場合はインスタンス化対象のファイル(*.tscn)をpreloadやloadで読み込んで、instantantiateを実行する。エディタの機能で実装する場合は@exportを利用してエディタ側に変数をエクスポートし、インスペクターからインポート対象のファイルパスを指定する。

*.tscn に対する *gdの紐づきはResurceで定義されているようだ。インスペクターから確認できる。

@onready アノテーションの使いどころがわからない。。。別シーンのスクリプトロードには不要っぽい?ノードの生成サイクルを理解しておかないと発火タイミングがわからんな。readyにはいつなるのだ?

var CardDatabase = load("res://Cards/CardDatabase/CardDatabase.gd")
上記の形にしたらgdファイルのみで外部からDB利用ができた。単にLoadしてnewすればいい様子だ。

scaleプロパティはControlに所属している。多くのノードがControlを継承しているので、だいたい利用可能だ。主にこいつはアニメーションを実現するためのプロパティらしい。(processの中で連続的に大小させれば、大きくなったり小さくなったりするのだろう。

切り替えていく。まだインプットが足りていない。とにかくいろんなゲームのチュートリアルや素材を探す。
タイルセット
よさげなチュートリアル
アニメーションチュートリアル
視覚効果
など

プロジェクト設定から物理レイヤーに名前を付けることができる。

Layerは物理的に存在するレイヤーで、Maskで指定したレイヤーとの衝突を検出できるようになる。どう使いこなすかがよくわからない。

作成中のシーンを部分的に切り出して保存することができる。便利だ。

シーンのインスタンスはデフォルトプロパティの値を上書きすることができる。

Input.is_action_just_pressed
はインプットが継続した際に一度だけ発火する。

Time.get_tick_msec() でゲーム開始時からの経過時刻をmsecで取得できる。

queue_free() で現在のノードを削除するためのキューに入れる。削除されたノードの子ノードもすべて削除されて、当該ノードをその子ノードへの参照はすべて無効となる。

Area2Dのbody_enteredとbody_exitedは頻出なシグナルだと思う。当該シグナルに渡すコールバックは領域に侵入したオブジェクトを引数として受け取る。

get_tree().reload_current_scene()
でゲーム内の設定リフレッシュ

CanvasItemは基本的な2次元のノードが継承している要素

親のtransformを継承しており、親が動くと子も動く。この性質は便利な反面、すべての場合において都合がいいわけではない。

シーンツリーからD&Dでノードにスクリプトを持ってくると参照コードが記述可能。
Ctrlを押していると@onreadyも付与してくれる。

Area2DにCollisionとSpriteを子として入れるのはイディオムチック