あさりのみそしるダイアリー

おトク情報毎日更新!だから毎日見に来いやゴルァ!!…うっ、ごめんね(´・ω・`)

「WebEffect」でなんかシューティングゲームっぽいのをつくってみる(敵参上)



ここまでくると、何ができそうなのかがわかってくるわけで、とりあえずタイトルをそれっぽくしました。
というか、ほかに考え付かなかっただけですが。

ちなみに、先のものとあわせて実はけっこう前に動画自体は公開していたんですけどね。
あと、再生するときは720pとかにすると文字も見やすいかと。


さて、いよいよ敵さんが参上します!
ビームと同じような感じで実装できるので、いきなり複数個の敵を出現させてみます。
敵ごとにバラバラな能力の持ち主だと、プログラムの難易度が上がるので、まずは単純に
同じ敵を複数出現させてみます。


まずは新しいオブジェクト「enemy」を作成します。
前回書きませんでしたが、グレーゾーンに配置したオブジェクトは画面内には配置されません。
作成できたら、プログラムの入力です。
新たに敵の動きを制御するenemy()、敵を出現させるcreateEnemy()関数を記述します。やっていることはビームと同じです。

ここでのポイントは
・スクリーンサイズはStage.width(横幅)、Stage.height(縦幅)で取得できる
・乱数はMath.random()で発生させることができる(0以上1未満)
という点です。

この乱数と横幅のスクリーンサイズを用いることで、画面上のランダムな位置に敵を出現させることができるようになります。もちろん、最低で0、最大でスクリーンサイズいっぱいなので、生成されたオブジェクトが画面からはみだすことはありません。

ちなみに、スクリーンサイズの縦幅は敵のオブジェクトの再利用時に使用しています。プレビュー画面を大きくすると、オブジェクトの再利用が裏でどのように行われているのかがわかります。


で、今回の動画ではまともに動作しない(敵が画面左にしか出現しない)という結果に終わっています。
この後の修正版で改善されていますが、まちがいを指摘すると1行目のスクリーンサイズの横幅の変数が「screenW」ではなく「screemW」になっていたことが問題でした。
「screenW」として利用したいので、こちらに修正するとまともに動作します。




で、これが修正版。
あと、実行時に気になったことですが、ビームの発射直後に、ビームがプレイヤーの上部
に表示されているのが気になります。これもついでに調整してみましょう。





今度はビームの位置を変更してみます。

オブジェクト「player」に対して「swapDepths(100)」としてやることで、プレイヤーオブジェクトの深さを100に変更することができます。

ビームは1~
敵は101~

と、今回のプログラムではこのような深さですみわけされており、プレイヤーは敵より下、ビームより上という深さにしたかったためこれを選びました。
もちろん、それぞれで調整してもらっても構いません。ビームの深さに上限はプログラム上では明示していませんが、100発連射できるものではないのでこのようにしています。制約したい場合は条件文などを書けばいいかと。


ここまでくると、初期と比べてもだいぶプログラムが充実してきましたし、なんだかプログラムを書いてるという感じになってきますよね。それと同時に、だいぶ慣れてきたので、比較的スムーズに進んでおります。

実行内容も何が完成するのか見えてきそうな感じになってきましたよね。
敵こそ消えないものの、それなりに振舞えば端からそれっぽく見えるかもしれません。さみしいですけどね。

というわけで、次回はビームと敵との衝突判定についてトライしてみます。
この説明を書いている時点でまだ取り組んでいないので、どれくらい難しいかは未知数です。どんななんでしょうかね。




今回作成したプログラムのプロジェクトはこちら。
http://cid-1b0a73ffbf74d345.office.live.com/self.aspx/WebEffect/onMouseMove4.gla

拡張子は「gla」です。「Windows Live SkyDrive」にアップロードしました。
直接WebEffectから開くこともできます。

実行ファイルはこちら。
http://cid-1b0a73ffbf74d345.office.live.com/self.aspx/WebEffect/onMouseMove4.swf

拡張子は「swf」です。同じく「Windows Live SkyDrive」にアップロードしました。
GOM Playerやブラウザで開くことができます。