俺に解るように説明する "Armory Engine" 入門+

ゲームエンジン Armory Engine (Armory3D) の使い方を手探りで学んで入門しようって感じかな。

P5.エアホッケー.08「PUSH SPACE KEY 点滅」

f:id:ore2wakaru:20190514234439p:plain

実は「パックを出すにはスペースキーを押す」ってことをプレイヤーに知らせないと、永遠にゲーム画面を眺めているだけになっちゃう。だから、上の図のようにパックが無い時は、画面中央位に「PUSH SPACE KEY」と表示させる。コレで分かるだろ。で、ただ表示させるだけじゃつまらないので、Alternateノードをうまく使ってチカチカ点滅してるにする。

イベント化

f:id:ore2wakaru:20190514223452p:plain

 まずは、"nKamiGameKanri" に前作った「スペースキー入力でパックを出す」部分をイベントにしちゃおう(イベント名 "TAMADASUka")。On Updateはゲームのメインループとなるので、後に続くノードは処理がすっきり分かりやすく見える様、Send Event - On Eventで見栄え良くするといいと思う。

 で、チカチカさせるイベント(イベント名 "TIKATIKAka")へ飛ばす部分を付けて置いて、

 チカチカ本体イベントの中身を作成。これからね。

(見栄え良くするための処理のカタマリなんだが、Send Event - On Eventで飛ばす(呼び出す)方法の他に、Call Function - Functionで処理する方法もあるぞ。だが、どうも俺にはうまく使えなかった。だから、俺はカタマリは全部イベントでやっちゃった。へへ。)

タイマー的な何か

チカチカさせるには、 カウンタ用の変数("tikatikaA")と、 表示・非表示の時間("tikatikaB":1秒)の2つの情報が必要。ということで2つの数値をOn Init時にプロパティにセット。カウンタ用の変数もスタート時は1秒ってことで、Floatで1を入れる。

f:id:ore2wakaru:20190514221308p:plain

で、肝心の中身はこう。(拡大しても文字ちっさいな、見えるかな??)

f:id:ore2wakaru:20190514224740p:plain

 「PUSH SPACE KEY」のイベントは、パックが無い時に発動させるので、"packAru" = False で次に行くようにする。"packAru" = True ならこのまま帰ってもらおう。

 カウンタ用変数 "tikatikaA" から delta 秒を引いていく(Subtract)。「tikatikaA = tikatikaA - delta」ってことな。

 "tikatikaA" が 0 を切ったら、つまりスタート時点から1秒経ったら次の処理に行くようにする。1秒経ってなかったらここで帰ってもらう。で、1秒過ぎてたら、また delta 秒を引けるように "tikatikaA" に点滅させる時間の初期値("tikatikaB":1秒)をセットする。

 Alternateは出口が2つあって、最初は "0" に処理が行く。次にAlternateに処理が来た時は "1" に行く。で、又来たら "0" へ・・・。つまり、 "0-1-0-1-0-1・・・" と処理を流すようにするノードだ。面白いな。これを使って、前回作ったキャンバスのエレメント名 "Text8" のテキスト部に、

"0" で出た時は "PUSH SPACE KEY" と入れてやる。

"1" で出た時は ""(空欄)と入れてやる。

Alternateには約1秒ごとに来るわけだから、これで点滅してるように見える感じだ。(ま、点滅させるには色んな方法があるけど、俺はこうした。)

パック出す時にも・・・

これでテストプレイしてみてくれ。ゲーム開始で、「PUSH SPACE KEY」と点滅するはずだ。イイね。文字の色はキャンバスの方で好きに付けてくれな(俺はピンクにしたけどな、かわいいだろ)。だが、パックが出たとき「PUSH SPACE KEY」という表示が消えずに残るタイミングがある。

f:id:ore2wakaru:20190514234901p:plain

なので、"TAMADASUka" イベントの最後の所でも、キャンバスのエレメント名 "Text8" のテキスト部に空欄を入れて、これを消そう。

f:id:ore2wakaru:20190514233553p:plain

コレで上手くいくはず。今回はここまでにするかな。

本日のポイント
  • Alternateで 0-1-0-1-・・・。

 次回、得点を入れていこう。