アクセシビリティ
デベロッパーリソース

Alex Michael

www.handyx.net
作成日:
2006年9月25日
ユーザレベル:
初心者
製品:
Devices

配布用SISファイルの作成

概要

画面を横切るメールにキャラクターを飛ばして乗せる(添付する)ゲームを作ります。

  • メールが左から右へと流れていきます。
  • 通り過ぎたメールは一定時間後に再び流れてきます。
  • メールの種類は各ライン2種類ずつ、ランダムで変化します。
  • プレイヤーは「5キー」を押してから放すことで、キャラクターを飛ばすことができます。
  • 押していた時間によって飛ぶ距離が変わります。
  • 飛ばしたキャラクターとメールがぶつかった時にメールのグラフィックを変更します。

作例では、Flash Lite 1.0用のActionScriptからFlash Lite 2.0になったことで利用可能になった4つの機能にフォーカスを当てて製作していきます。

  • function()
  • onClipEvent()
  • hitTest()
  • sheardObject(ローカル共有オブジェクト)

サンプルファイル

function()

Flash Lite 1.1までの自作関数は戻り値、引数の扱えないcall()しかありませんでしたが、Flash Lite 2.0からはfunction()が備わっています。

function sample( a,b ){
   var c = a + b;
   return c;
}//function

これにより煩雑になりがちだったcall()や変数の処理がまとめやすくなりました。_globalを用いてグローバル関数を作成することも可能です。

_global.sample = function( a,b ){
   var c = a + b;
   return c;
}//function

この場合どの場所からでも絶対、相対パス指定なしで関数にアクセスすることができるようになります。

onClipEvent()

次に、溜め撃ちを再現するためにキープレス、キーリリースを使ってみましょう。まずボタンが押されたことを検出するスクリプトを書きます。

onClipEvent(keyDown){
   trace("keyDown");
}//onCE

作例のゲームはテンキーの5キーを使って遊びます。テンキーの5キーのキーコードは101です。

このままではキーが押されたら処理が行われてしまうので、テンキーの[5]キーが押されたときに処理を行う用にスクリプトを追加します。

onClipEvent(keyDown){
   if( Key.getCode() == 101 ){
      trace("[5]KeyDown");
   }//if
}//onCE

次に離した瞬間、を検出します。

onClipEvent(keyUp){
   if( Key.getCode() != 101 ){
      trace("[5]KeyUp");
   }//if
}//onCE

押された瞬間から離した瞬間までの時間を計測すれば、特定のボタンがどれだけの時間を押されていたか調べることができます。

hitTest()

この関数は領域の接触を判定する関数で、これを使えば衝突の処理が大変楽になります。

旧来のFlash Liteの方法ですと、以下のような記述が必要でした。

ax = getProperty("a_mc",_x);
ay = getProperty("a_mc",_y);
aw = getProperty("a_mc",_width);
ah = getProperty("a_mc",_height);
bx = getProperty("b_mc",_x);
by = getProperty("b_mc",_y);
bw = getProperty("b_mc",_width);
bh = getProperty("b_mc",_height);
	
if( aw >= bw && ah >= bh ){
   if( ( ax <= bx && bx <= ax + aw ) || ( ax <= bx + bw  && bx + bw <= ax + aw )){
      if( ( ay <= by && by <= ay + ah ) || ( ay <= by + bh && by + bh <= ay + ay )){
         trace("hit");
      }//if
   }//if
}//if

hitTest()を使うと以下になります

if( a_mc.hitTest( b_mc.hitTest ) ){
   trace("hit");
}//if

これにより長くなりがちだった当たり判定が簡単に記述することができるようになりました。

SheardObject

最後に、Flash Lite 2.0の肝とも言えるSheardObjectの取り扱いをやってみます。

これを使うことでアプリケーションの途中経過や、設定の保存などができるようになりました。今回はゲームのハイスコアを記憶する用途に使ってみます。

まずはオブジェクトを生成します。

my_so = SharedObject.getLocal("localData0");

既にデータがあるかどうかは、使用する変数が保存されているかどうかで調べることができます。

if( my_so.data.hiScore == undefined ){
   trace("NewGame");
}//if

最後に現在保存されている値より、更新された値が大きかったときにローカルのデータを上書きします。

if( my_so.data.hiScore < newScore ){
   my_so.data.hiScore = newScore;
   my_so.flush();
}

今回は基本Flash Lite 1.0 構造のスクリプトに2.0の新機能を盛り込む形でサンプルを作成しました。

Flash Lite 1.0に触れていない方は、Flash6以降の記述で製作できるのでPC用の作品を移植するのも簡単になったと思います。

皆さんも携帯端末という特殊な環境下でFlash Liteで何が表現できるか、是非挑戦してみてください。

著者について

Alex Michael:モバイルベースのソリューション開発を専門に手掛ける新興メディアカンパニー、Sprite Interactive Ltd.の社長を務める。現在の取引先はVodafone、Orange、T-Mobile、ESPN、Disney、Jamba、Jetixなど。モバイルゲーム・アプリケーション・モバイルペットなど、Sprite社の作品集は製品ショーケースサイトのwww.Handyx.net*でご覧いただけます。