‘ActionScript’ カテゴリーのアーカイブ

【AS3.0】ライブラリのMCを動的に配置

2006年12月16日 土曜日

ActionScript3.0 のリファレンスやいろいろぐぐって調べていたのですが、ライブラリのムービークリップをスクリプトで配置する方法が全然見つからなくて不思議でなりませんでした。
これができなければ先に進めないじゃないか。

ActionScript 2.0での手順

1.ムービークリップを作成。
2.ライブラリから作成したムービークリップを右クリック。
3.メニューからリンケージを選択。
4.識別子を決める。(名前のようなもの)
5.スクリプトで「attachMovie(“識別子”,”新たな名前”,深度,{_x:x座標,_y:y座標});」

ActionScript 3.0(スクリプトをasファイルとして外部に置いた場合。)

1.ムービークリップを作成
2.ライブラリから作成したムービークリップを右クリック。
3.メニューからリンケージを選択。
ここから違う。
4.関連付けるクラスをクラスの欄に入力。(例としてlineとする)
5.メインのクラスをプロパティウィンドウのDocument Classに入力。(例としてtestとする)
6.スクリプトで
mc = new (4で決めたクラス名);
addChild(mc);

 AS2.0とAS3.0では書き方も全く違うので以下サンプル。

package{
  import flash.display.MovieClip;
  public class test extends MovieClip{
    var mc:MovieClip;
    function test(){
      mc = new line();
      addChild(mc);
      mc.x = 100; //x座標
      mc.y = 100; //y座標
    }
  }
}

lineってのはリンケージで決めたクラス名であって、そのクラスを作る必要はない。
今の段階で言うと、今まで一行で済んだものをこれだけ書かなければならないのは面倒。しかし、AS3.0では深度管理も簡単になっているらしい。処理も数倍速いらしいし。

【AS2.0】Buffonの針シミュレーション

2006年12月11日 月曜日

Buffon の針のシミュレーターを ActionScript2.0 を使い FLASH で作りました。

Buffon の針 FLASH シミュレーション

やはり、処理速度の問題が顕著に。ActionScript3.0とやらで書けばもっと速くなるんだろうが。

FLASH MP3プレイヤーを作る上のTIPS

2006年11月19日 日曜日

前記事のmp3プレイヤーを作る上で必要な事などを追記します。

Sound.duration    //音楽ファイルの長さを取得
Sound.id3.TIT2    //id3タグから曲名を取得
Sound.id3.TPE1    //id3タグからアーティスト名を取得
Sound.id3.TCON   //id3タグからジャンルを取得
Sound.onSoundComplete = function(){}  //サウンドが終了したときの処理

これらで id3 タグを取得できますが、問題点があります。

id3タグ取得はUniCodeしか対応していない。

ほとんどの mp3 ファイルの id3 タグは Shift_JIS なので日本語が使われていると文字化けしてしまう。

ActionScript を外部ファイル化して編集

2006年11月15日 水曜日

アクションパネルは高さが狭すぎて、プログラム全体が見にくいと思われた事はないだろうか。高さを広げると今度はメイン画面の方が狭くなって見にくくなる。

そんな時は一度今まで書いたスクリプトをメモ帳等にコピーして、任意の名前をつけ拡張子に.asをつけて保存し今までスクリプトを書いていた場所に

#include “filename.as”

と書くだけで外部ファイル化できる。ちなみにセミコロンはつけない。
この辺はC言語っぽい。

ちなみに、これはフレームアクションでもボタンアクションでもムービークリップアクションでも有効。一箇所に相当長いスクリプトを書いた場合じゃないと外部ファイルにする意味はあまりないかも。

また、FLASH 8 professional では、ファイルメニューの新規作成からASファイルを同ソフト上で編集できてやりやすい。

【AS2.0】外部テキストから値を読込む

2006年11月14日 火曜日
class textfile{
  var temp:Array = new Array();
  var lv:LoadVars;
  function textfile(){
    lv = new LoadVars();
    lv.onData = function(src){
      if(src != undefined){
        temp = src.split(",");
      }
    }
    lv.load("test.txt");
  }
}

読込むテキストファイルには「1,4,3,6」とコンマ区切りである事を想定にしています。split でコンマを区切りに分裂させて temp 配列に格納されていきます。

onEnterFrame からメソッドが呼び出せない件

2006年10月12日 木曜日

クラス内のメソッドであれば、下記のようにメソッドAからメソッドBを呼び出せる…筈であって。

class test{
  function test(){
    trace(“コンストラクタ”);
    this.methodA();
  }
  function methodA(){
    trace(“メソッドA”);
    this.methodB();
  }
  function methodB(){
    trace(“メソッドB”);
  }
}

 しかし困ったことが起きました。

class test{
  function test(){
    trace(“コンストラクタ”);
    this.methodA();
  }
  function methodA(){
    _root.onEnterFrame = function(){
      trace(“メソッドA”);
      this.methodB();
      delete this.onEnterFrame;
    }
  }
  function methodB(){ //呼び出せない。
    trace(“メソッドB”);
  }
}

 上記だとメソッドAからメソッドBが呼び出せません。
 onEnterFrameの前を_rootにしている事に原因がありそうですが、どうやらパスがおかしな事になってる模様。
 ならばと、_root.test.methodB();と_rootからの絶対パスで記すと呼び出せました。
 呼び出せたのはいいが、それでは汎用性がなくなる。
 解決方法を研究中。

FLASHシューティングプロジェクト 3

2005年7月13日 水曜日

昨日の詰まった所は解決しました。しかし世の中そんなに甘くなかった。まだやっぱり敵弾がわからない。詰まって進みそうもないので先にBGM作ることにしました。

ActionScriptで当たり判定

C++ や JAVA で作るよりかは FLASH は遥かに簡単。

オブジェクト1.hitTest(オブジェクト2);

これだけ。hitTest で当たり判定がとれます。
最近の弾幕ゲームみたく実際のオブジェクトの大きさよりも小さい範囲で当たり判定をつけたい場合は、オブジェクトの中にもう1個小さなオブジェクトを作ればいいだけです。(裏に重ねる感じ)

オブジェクト1.hitTest(オブジェクト2.オブジェクト3);

オブジェクト1=敵弾
オブジェクト2=自機
オブジェクト3=自機の下に隠してあるオブジェクト