◆◆◆ノードの組み合わせ方に、悩んだ◆◆◆
あとから自分が見ても混乱しないように、どうやって、上手にノードを組み合わせるのか
悩んだ。
このような組み合わせにしてみた。
左は、元のノード名達。
右は、自分が分かるように名前を変えた部分がある、ノード達。
いろいろなノードをつけているけど、
シーンノードである【Node2D】(親)と、【AnimatedSprite2D】(子)を見てみる。
スクリプトは親につけている。
◆◆◆キャラが動いている=絵が動いてる、ではない ◆◆◆
一見、遠回りのような処理の仕方をしているが、応用が聞くやり方だと思っている。
【Node2D】(親)のインスペクターにも、座標などはあるが『何も見えない』。
プレイヤーに見える画像が必要なので、【AnimatedSprite2D】(子)をつける。
親につけたスクリプトで座標を動かす処理をすれば、子も一緒に動く。
これでプレイヤーからは、『キャラが動いている』ように見える。
これを理解するまで、私は、
「キャラが動く=キャラの座標を動かす。」
とばかり思っていた。各ノードの使い方を知って、とってもスッキリした。
画像を点滅させたり、画像だけやられ吹っ飛びをしたい、などの場合は、
親につけたスクリプトで、子ノードをゲットして操作すればいい。
今回は、シーンノードをただの【Node2D】にしているが、
アクションゲームならば【RigidBody2D】や【CharacterBody2D】にすればいい。もちろん、これらも『何も見えない』ノードなので、画像が見える【AnimatedSprite2D】を子につける。
◆◆◆ 遠回りのような処理をした理由は、フローティングテキスト ◆◆◆
敵を倒して敵がぶっとんだとき、敵がいた場所から点数やダメージが浮かんでいく場面がある。
あの浮かんで行く数字のことを『フローティングテキスト』というらしい。名称を知らなかった。
遠回りのようなややこしめな処理をしたのは、これをしたかったから!!
画像では、制作中の自分に分かるように、敵の点数の数字が丸見えのままにしている。
点数は【Label】ノードにさせている。これも【Node2D】(親)の子ノードだ。
敵を倒した時、
●敵は下に落ちていく→【AnimatedSprite2D】(子)
●点数は浮かんで行く→【Label】(子)
●親である【Node2D】はその場で停止。
親につけたスクリプトで、これらの子ノードの動きを処理する仕組みをつくれば、いい。
敵が下に落ちた終わった&点数が浮かび終わった、の条件を満たしたら親である【Node2D】を削除する処理
queue_free( )
または、self.queue_free( )
をスクリプトに書く。
もし、
『キャラが動いている=絵が動いてる』と勘違いして、【AnimatedSprite2D】を親にしてしまったら・・・
キャラが下に落ちていくと、【Label】(子)も一緒に下に落ちて行ってしまう。
【AnimatedSprite2D】と【Label】は、お互い影響を受ける事なく、別々に動かす必要があったのだ。
コメント
コメント ( 0 )
トラックバックは利用できません。
この記事へのコメントはありません。