去年、完成間近で止まったミニゲームを・・・#10

去年、完成間近で止まったミニゲームを・・・#10

 ◆◆◆ノードの組み合わせ方に、悩んだ◆◆◆

あとから自分が見ても混乱しないように、どうやって、上手にノードを組み合わせるのか
悩んだ。
このような組み合わせにしてみた。

左は、元のノード名達。
右は、自分が分かるように名前を変えた部分がある、ノード達。

いろいろなノードをつけているけど、
シーンノードである【Node2D】(親)と、【AnimatedSprite2D】(子)を見てみる。
スクリプトは親につけている。

 ◆◆◆キャラが動いている=絵が動いてる、ではない ◆◆◆

一見、遠回りのような処理の仕方をしているが、応用が聞くやり方だと思っている。

【Node2D】(親)のインスペクターにも、座標などはあるが『何も見えない』。
プレイヤーに見える画像が必要なので、【AnimatedSprite2D】(子)をつける。

親につけたスクリプトで座標を動かす処理をすれば、子も一緒に動く。
これでプレイヤーからは、『キャラが動いている』ように見える。

これを理解するまで、私は、
「キャラが動く=キャラの座標を動かす。」
とばかり思っていた。各ノードの使い方を知って、とってもスッキリした。
 
画像を点滅させたり、画像だけやられ吹っ飛びをしたい、などの場合は、
親につけたスクリプトで、子ノードをゲットして操作すればいい。

今回は、シーンノードをただの【Node2D】にしているが、
アクションゲームならば【RigidBody2D】や【CharacterBody2D】にすればいい。もちろん、これらも『何も見えない』ノードなので、画像が見える【AnimatedSprite2D】を子につける。

◆◆◆ 遠回りのような処理をした理由は、フローティングテキスト ◆◆◆

敵を倒して敵がぶっとんだとき、敵がいた場所から点数やダメージが浮かんでいく場面がある。
あの浮かんで行く数字のことを『フローティングテキスト』というらしい。名称を知らなかった。

遠回りのようなややこしめな処理をしたのは、これをしたかったから!!

画像では、制作中の自分に分かるように、敵の点数の数字が丸見えのままにしている。
点数は【Label】ノードにさせている。これも【Node2D】(親)の子ノードだ。

敵を倒した時、
●敵は下に落ちていく→【AnimatedSprite2D】(子)
●点数は浮かんで行く→【Label】(子)
●親である【Node2D】はその場で停止。

親につけたスクリプトで、これらの子ノードの動きを処理する仕組みをつくれば、いい。

敵が下に落ちた終わった&点数が浮かび終わった、の条件を満たしたら親である【Node2D】を削除する処理
queue_free( )
または、self.queue_free( )
をスクリプトに書く。

もし、
『キャラが動いている=絵が動いてる』と勘違いして、【AnimatedSprite2D】を親にしてしまったら・・・
キャラが下に落ちていくと、【Label】(子)も一緒に下に落ちて行ってしまう。

【AnimatedSprite2D】と【Label】は、お互い影響を受ける事なく、別々に動かす必要があったのだ。

報告する

コメント

  • コメント ( 0 )

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

コメントするためには、 ログイン してください。