« 映画予告編レビュー | トップページ | トランスフォーム! »

エイリアンハンター (或いはActionScript3.0 苦行の軌跡・1)

Ahunter1

「Alien Hunter」をプレイ 

ALIEN HUNTER(習作・エイリアンハンター)

[ ストーリー ]

懐かしき80年代ゲームセンター。

過ぎ去りし日々に、憧憬とオマージュを込めたこの一作を捧げたい。

なんてな(笑)。

[ ルール ]

  • 攻めよせるエイリアンを次々倒し、コインを回収します。
  • 得点:エイリアン10P、コイン50P
  • エイリアンに一回でも捕まるとゲームオーバーです。

[ 操作方法 ]

マウスクリックと、スペースキーで操作します。

  • マウスクリック:クリックした場所に向かってプレイヤーキャラが移動
  • スペースキー:移動方向に弾を発射
  • 静止している場合は、ランダムな方向に撃ちます

[ 備考 ]

今までのFlashゲームは、ActionScript2.0で作っていましたが、今回はついに初めて、Flash4、ActionScript3.0で一から作成したものになります。

とにかくなりふり構わず一本作ってみようと考えた習作です。あまり飾り付けにはこだわれず、ゲームとしてもかなりプリミティブなものになりました。

なので、それを逆手にとって、今回はレトロ調にこだわってみました。
リソースも最小限しか使ってません。自分や敵のアニメはただの左右反転だったり。

古くさい見た目は、わざとですよ。(え、今までのとあまり変わらないって?そんな…)

FlashやActionScriptについてあまり興味ない方には、2.0だの3.0だの、何を大騒ぎしてるんだと思われるかもしれません。

しかし、これがもう、地獄のような苦行だったのです。

今までの知識では全く動きません! 名前こそ同じActionScriptですが、基本的なところからぜんぜん違う言語なんですもん。

AS3.0は、よりJAVA Scriptに近づいたらしいので、汎用性が増したり、JAVAから転向してきた人が入り易くなったりと、良い事も多いみたいですけど…。

Flashオンリーの人間にとっては、昔は簡単に出来ていたことができなくなったり、弊害を食らっている部分の方が多い気すらします。

(そういうことってありますよね…ソフトや電化製品などで、今まででも別に不便は無かったのに、整合性を重視しすぎて、却ってわかりにくくなったりする ことって…)

でもなんとか、騙し騙し一本でっちあげることはできました。それが今回のゲームです。

2.0なら、3日でできそうなコレ、どんだけかかったことか…(泣)。

せっかくなので、ここにその苦労の軌跡を記しておこうと思います。

自分の備忘としての意味が大きいですが、もし、AS3.0に興味ある方のお役に立てれば幸いです。

(しかし…この苦行はまだまだ続きそうな気配なんですけどね…。本当は、AS3.0では、タイムラインに直接スクリプトを書かず、ASファイルで定義したカスタムクラスを使うのが推奨らしいです。
でも、今回あまり必然性が無かったのと、カスタムクラスに慣れてないので、タイムラインに書く形で作っています。次回からはカスタムクラスにも挑戦しないと…。)

-----

ActionScript3.0 苦行の軌跡・1

Flashに関しては、全く独学なもので、それで余計な苦労しているんじゃないかと思います。
本業でゲーム開発に携わってはいますが、そもそもプログラマじゃないですし…。

かなり浅い理解度で書いている部分もありますので、内容に間違いなどもあるかもしれません。
間違いに気付いた方は突っ込み入れてやってください…。

[ stage? root? ]

かなり基本的な部分ですが…

2.0では、表示階層のトップは_rootでした。

3.0では表示階層のトップは、stageになります。

しかし!
_rootとstageはぜんぜん使い方が違うんですよ。

メインタイムラインに書かれた関数(例:f_test)などをムービークリップから参照する場合…

2.0では

_root.f_test();

だったのですが、

3.0では

stage.f_test();←これでは×!

root.f_test();←これも×

正解は…

MovieClip(root) .f_test();

となります。(なんでそうなのか、詳しいことは割愛しますが)

これもけっこう悩みました。

こんな基本的なところを…勘弁してくださいよ…。

[ プレイヤーキャラのムービークリップインスタンスを配置する ]

AS2.0ではスクリプトからインスタンスを配置するにはattachMovie()を使いました。
しかし、AS3.0では、こんな基本的なメソッドも変わってるんです…!

2.0
this.attachMovie("player_mc", "player1", 100);

3.0
var player1:player_mc = new player_mc();
this.addChild(player1);

(player_mc=プレイヤーキャラのムービークリップ(クラス) player1=プレイヤーキャラのインスタンス名)

attachMovieでは、配置と同時にムービークリップの深度の指定もやっていましたが、3.0ではそれはできなくなりました。

深度の直指定はできないみたいです!swapChildrenで前後関係は変えられるんですけど。

なんか、えらく面倒ですな~。

[ プレイヤーキャラの操作 ]

アクションゲームの基本は、フレーム起動のスクリプトですね。

以前2.0は

this.onEnterFrame =function(){ 内容 }

と書いていました。

しかし、3.0からはこうです。

this.addEventListener(Event.ENTER_FRAME,f_move); ←イベントリスナー

function f_move(event:Event):void{ 内容 } ←受け取り側関数

ずいぶん、ややこしくなりましたね…。

キャラクターはマウスで移動し、キーボードのスペースで弾を撃つようにしてみます。

2.0では、キーボードに反応するスクリプトを、プレイヤーキャラのタイムラインに書いていました。

なので、3.0でもそうしてみます。

this.addEventListener(KeyboardEvent.KEY_DOWN,f_keydown);

(f_keydownは、ボタンを押したときに呼ばれる関数)

書き方は上記で間違っていません。

でも、実はこれでは動きません!!

これでしばらく悩みましたよ…(泣)。

結局、プレイヤーキャラでは無く、メインタイムライン(デフォルトで[シーン1]と表示されるタイムライン)に次のように書くのが無難だとわかりました。

stage.addEventListener(KeyboardEvent.KEY_DOWN,player1.f_keydown);

(player1=プレイヤーキャラのインスタンス名)

-------------
補足:最初の、プレイヤーキャラに書くスクリプトでも動くようには出来ます。
これを解決するには、プレイヤーキャラのムービークリップに、次のように書いてフォーカスを当てます。

stage.focus = this;

しかし、ただ単にこれをやると、キャラの周りに黄色い枠ができてしまいます…。
枠を出ないようにするには、メインタイムラインに次のように書きます。

stage.stageFocusRect = false;

でも、結局これらの方法では、マウスクリックした時にフォーカスが外れてしまうので、マウスと併用には向いていないんですね…(移動操作もキーボードならOKなのですが)。

なので、メインタイムラインに書くのが無難なようです。

-----

長くなったので、AS3.0についての愚痴 講釈の続きは、またいずれ。

(2009.8.6)

|

« 映画予告編レビュー | トップページ | トランスフォーム! »

Flash」カテゴリの記事

ゲーム」カテゴリの記事

コメント

難易度高っ!
それはともかく、エイリアンを殺した後に残るコインがある状態でゲームオーバーになると、次回のゲーム開始時にコインが残ったままです。
意図的な仕様とは思えないので、Bugかな、と。

投稿: 深井 | 2009年8月 8日 (土) 01時00分

遊んでもらってありがとうございます。

コインの件はですねー…
仕様です(笑)

これはわかってたんですが、今回面倒だったので、
そのままにしちゃいました。

もっと酷いことに、これflashのエディタ上では、警告も出るんですけどね…。

投稿: 適当所長 | 2009年8月13日 (木) 21時37分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/533792/45838664

この記事へのトラックバック一覧です: エイリアンハンター (或いはActionScript3.0 苦行の軌跡・1):

« 映画予告編レビュー | トップページ | トランスフォーム! »