第三回目だ
よろしくお願いしまーす!

 

早速作っていこうか、まず壊せるブロックを作ってみよう、“Layout”上で“Sprite”を作り、“Behiviors”“Solid”を追加し、“Name”“Block”にしてくれ
作ったわ、床と同じ“Behiviors”構成なのね

 

うむ、ここで“Block”“Image point”を足元に変えてあげてくれ、前回やった部分だがわかるかな?
前回の記事確認してこよう…

 

次に“Player”“Image points”を追加してあげよう、“Layout”上で照準のアイコンクリックして出てくる“Image points”のウィンドウ内の“+”を押してあげると“Imagepoint 1”というのが追加されるからダブルクリックして名前を“Head”に変えてあげてくれ、そして“Head”を右クリックして“Quick assign”“Top”にしてくれ
設定したわ!、段々スムーズにできるようになってる気がする!!

 

 

ツールに慣れてきてたな、次に“Event sheet”を開き、“Add event”“Player”“Block”にぶつかったら動作するイベントを追加してあげようか
“Player”ダブルクリックの“On collision with another object”ダブルクリックして、”<click to choose>”から“Block”選んでと、これでOKね?

 

うむ完璧だ。次に条件を追加してあげよう、赤丸の所で右クリック、“Add another condition”

add-another-condition

続いて“Block”ダブルクリック、“Compare Y”ダブルクリック“= Equal to”をクリックして“> Less than”に変えてくれ、その後したの“Y co-ordinate”の欄に“Player.ImagePointY(“Head”)”を入れて”Done”を押してくれ。これで「“Block”のY軸がプレイヤーの“Head”という“Imagepoint”より上にある時」というイベントが作れた。続いて右の“Add action”をクリック、“Block”をダブルクリックして“Destroy”をダブルクリックしてくれ、これで…

“Block”のY軸がプレイヤーの“Head”“Image point”より上にある時“Block”とぶつかったら“Block”を破壊するわけね

 

そういうことだ、F5で動作確認できたら次へ行こうか
設定した通り下から叩かないと壊れないわね

 

よし、じゃあ叩いたら状態が変わる“Block”を作ろうか、“Block”を右クリックして“Clone type object”を押し、“Layout”上でクリックしてくれ、同じステータスを持った別物の“Block”が作られる、“Name”“SolidBlock”にしてくれ、これは“Copy”したものとは別物だから気を付けてくれ
やったわよー、試しに下から叩いてみたけど“Block”みたいに壊れないわね

 

OKだ、次に“SolidBlock”“Layout”上でクリックして選択し、左の“Instance variables”の一つ下の欄の“Add / edit Instance variables”の青文字をクリックした後出てくるウィンドウの“+”を押し、“Name”をそうだな…“Touched”にしてくれ、そして下の“Number”“Boolean”に変更して“OK”をクリック 
これは何をしたの?

 

“変数”を設定したんだ、オブジェクト固有の数字でこれを使ってHPやらMPその他の設定ができる。少し凝ったゲームを作ろうとするなら必須レベルのものだな。
はぇ~

 

早速下から叩いたら状態が変わるイベントを作っていきたいんだが内部の変数だけじゃなく外見も変えてあげよう、まず“SolidBlock”をダブルクリックしてテクスチャエディターを出し、“Animation”のウィンドウがあるから“Default”とかかれてる所で右クリックして“Duplicate”を押してくれ、“Default”のコピーの“Animation2”が作られるから名前を“Touched”に変更し、色を“Default”とは別にしてあげよう
変えたわよー

 

よし、じゃあ下から叩いたら変数と外見が変わるイベントを作っていこうか、“Event Sheet”を開き、右クリックで“Add event”“SolidBlock”選択、“Is boolean instance variable set”を選択し、“Instance variable”“Touched”になってるのを確認したら“Done”を押してくれ、新しくイベントが追加されてるのを確認したらそのイベントのTouchedと書かれている部分を右クリックして“Invert”を押してくれ

invert

“✖”が付いたのを確認したらもう一回Touchの部分で右クリックし、“Add another condition”“SolidBlock”“Compare Y”“= Equal to”から“Less than”にし、“Y co-ordinate”の欄に“Player.ImagePointY(“Head”)”と入力して“Done”、増えてるのを確認したら右の“Add action”クリック、“SolidBlock”“Set boolean”選び、“Instance variable”“Touched”になっているのと、下の“Value”“True”になってるのを確認したら“Done”を押してくれ、最後に上にある“Player On collision with Block”をCtrl + Cでコピーして今作ったイベントにCtrl + Vで貼り付けてくれ、その後貼り付けたイベントをダブルクリックし“Block”になってるとこを“SolidObject”に変更してくれ、これで「“SolidObject”“Touched”という変数が無効(“✖”)の時、下からプレイヤーに叩かれたら“Touched”という変数を有効にする」というイベントができた。

むむ、なんとなくわかったようなわからないような

 

次だが“Event sheet”内で右クリックし、“Add event”“SolidBlock”“Is boolean instance variable set”、Touchedになってるのを確認したら“Done”、新しくできたイベントを右クリックし、“Add another condition”“System”“Trigger once while true”を選択、条件が二つになってるのを確認したら右の“Add action”“SolidBlock”“Set animation”“Animation”の欄にさっき設定した“Touched”のアニメーション名を半角の””で囲って入れてあげるんだが、半角の「 ” 」キーを入れてあげればアニメーションの一覧が出るからわかりやすいぞ、アニメーションの名前を入れてあげたら“Done”、これで「“SolidBlock”“Touched”という変数が有効の時一度(Trigger once)だけ実行する」というイベントができた。

touched

今思ったんだけど、アニメーション変化だけなら二つのイベントに分けずに一つのイベントでできそうだけどどうなの?

 

いいところに気が付いたな、確かにそれだけなら一つのイベントだけで設定できるが、もし“SolidObject”“Touched”になってた際に実行するイベントで“Trigger once while true”(一回だけ実行)がないと
アイテムが無限に出てきちゃうわけね…

 

そういうことだ、最後に実際に実行してみて“SolidBlock”を叩いて色が変わってるのを確認したら今回は終了とする、例のごとくプロジェクトファイルを置いておくがちょっとイベントの数が増えたのでコメント付けしておく(下から叩いたら壊れるor状態変化するブロック
ほいほい、今回もお疲れ様~また次回会いましょ!

 

Construct2でアクションゲームをつくろう!その4【足場の追加】(難易度★☆☆☆☆)