タイトルに書いてみると当然の処理結果なのですが、GDevelopは「Ball.Height()」のような式を見ただけでは特定のインスタンスの高さなのかBall全体の初期値としての高さなのかが必ずしも自明ではないため、備忘録として残します。
アクションゲームの製作で、プレイヤーの頭上からボールが落ちてくるギミックを考えます。今回は、プレイヤーが白い箱に接触したら、頭上にボールを表示することにします。
イベントシートで、プレイヤーと白い箱が衝突したことを条件に「オブジェクトを生成する」アクションでボールを生成します。ボールの生成位置のY座標を「Player.Y()-Ball.Height()」と書くことで、プレイヤーの左上座標よりもさらにボールの高さ分だけ高い位置にボールが生成されそうに見えます。
プレビューしてみると、プレイヤーと白い箱が接触した瞬間に、プレイヤーと同じ高さにボールが表示されてしまいました。一方で、同じイベント行の中でボールの生成後に高さを取得することは成功しており、「ボールの高さ=32」と表示されました。
動作確認のために、問題の式を「Player.Y()-32」にすると、プレイヤーの頭上にボールが出現しました。この場限りの対応ならこれで終わりですが、この機能が他のところにコピーされてしまうと、ボールの高さが変わった時に修正の手間が増えるかもしれません。
ボールの高さを直接記入する代わりに変数を使うと、ボールの高さを変えたい時に修正するのが変数だけで済みます。
ボールが一度生成されれば高さを取得できる点に注目して、ボールの生成は人から見えない位置で実行し、後から移動する方法もあります。生成後の移動時のY座標に「Player.Y()-Ball.Height()」と書くと期待通りに動作します。ただしイベントに記入するアクションが常に1つ増えるため、その労力が成果に見合うかは作ろうとしているゲームの仕組みにもよるでしょう。
最後に、変数を使った場合の動作例を載せます。
0 件のコメント:
コメントを投稿