ASonJS

ActionScript 1.0 on JavaScript

By GARAKUTA KOJO
last modified date 2008.6.30

ASonJS は JavaScript 上で ActionScript 1.0 のようなスクリプトを書く事を目指しています。
Safari 用です。FireFox2~ Opera9.5~ でも動きます。IE の事は知りません。
用途は iPhone や iPodTouch 上で動くゲーム制作です。
このページを含め、まだまだヒドい部分が多々あります。

使用例 サンプル

ステージの生成

HTMLに

<div id='main' style ='width:320px; height:268px;'></div>

などと、ステージとなる DIV を作っておきます。
今のところ外部CSSファイルでサイズを指定すると Stage.width Stage.height が取れません。

head に

<script>
var setup = function(){
 var _root = Stage.init({element : document.getElementById('main') ,fps : 24});
}
window.addEventListener('load',setup,false);
</script>

という感じに書くと、ロード完了時に main に fps が 24 でステージサイズが320px*268pxのステージが作られます。
_root には _root となる MovieClip が入ります。この _root に attachMovie する事で
ステージに子MovieClipを追加して行きます。

var monkey = _root.attachMovie('player','monkey',_root.getNextHighestDepth());

この後で

monkey.onLoad = function(){~処理~};

と定義すると、実行中の関数を抜けた後で onLoad に定義した関数が実行されます。
(実際の ActionScript とは挙動が違います。)


ライブラリの作り方

HTML の中に

<div id='library' style='display: none;'>
 <div id='player' labels='{left:1, right:2, jump_left:4, jump_right:7}'>
  <img src='img/monkey_left.gif' width='32' height='32' alt='monkey_left' frames='1' />
  <img src='img/monkey_right.gif' width='32' height='32' alt='monkey_right' frames='2' />
  <img src='img/monkey_left_jump.gif' width='32' height='32' alt='monkey_left_jump' frames='3' />
  <img src='img/monkey_right_jump.gif' width='32' height='32' alt='monkey_right_jump' frames='4' />
 </div>
</div>

のようなタグを書いておきます。DIV 要素 player が本物の Flash で言うところの
ムービークリップシンボルに対応します。id はリンケージの識別子になります。
labels 属性はオブジェクトで「ラベル名:フレーム番号」の対応を複数まとめたオブジェクト。

DIV要素の中の IMG要素はムービークリップに表示される画像です。
src, width, height, frames は必須です。alt は空でも問題ありません。
frames はこの画像が何フレーム続くかの値です。上から順に合計されていきます。

例えば上記の例だと

[Frame 1] monkey_left.gif (ラベル名 left)
[Frame 2] monkey_right.gif (ラベル名 right)
[Frame 3] monkey_right.gif
[Frame 4] monkey_left_jump.gif (ラベル名 jump_left)
[Frame 5] monkey_left_jump.gif
[Frame 6] monkey_left_jump.gif
[Frame 7] monkey_right_jump.gif (ラベル名 jump_right)
[Frame 8] monkey_right_jump.gif
[Frame 9] monkey_right_jump.gif
[Frame 10] monkey_right_jump.gif

という感じにフレームが作られます。

一番上のDIV要素 library は必要ありませんが、まとめて非表示にすると便利です。


クラスとかメソッドとかプロパティとか

trace()
window.console.log に引数を渡します。Safari のコンソールや FireBug で使えます。
window.console.log が無い場合は何もしません。

Stage
init(initObject:Object) ASonJS独自メソッド
initObject.element ステージとなるDIVノード
initObject.fps フレームレート
戻り値は MovieClip(これを _root として使います)

使えるプロパティ
width
height
width と height には、init に渡したエレメントの style.width style.height の値が入ります

MovieClip
使えるプロパティ
_x
_y
_width …ただし、今のところ子MovieClipを含んだサイズの取得はできません。
_height …ただし、今のところ子MovieClipを含んだサイズの取得はできません。
_xscale
_yscale
_alpha
_visible
_totalframes
_currentframe
_rotation …ただし、今のところ子MovieClipには反映されません。
onRelease
onEnterFrame
onLoad
onUnload

独自プロパティ
_element …MovieClip の表示用DIV Element
_origin …_rotation を変更した時に軸となる部分を以下の文字列で指定。top-left, top, top-right, left, center, right, bottom-left, bottom, bottom-right の9種類。デフォルトは top-left

使えるメソッド
createEmptyMovieClip(name:String,depth:Number) : MovieClip
attachMovie(id:String,name:String,depth:Number,initObject:Object) : MovieClip
createTextField(name:String,depth:Number,x:Number,y:Number,width:Number,height:Number) : TextField
removeMovieClip() : Void
getNextHighestDepth() : Number
play() : Void
stop() : Void
gotoAndPlay(number or framelabel) : Void
gotoAndStop(number or framelabel) : Void
nextFrame() : Void
prevFrame() : Void
hitTest(MovieClip) : Boolean *MovieClip同士のみ(座標不可)

独自メソッド
addFrameScript(frame:Number, func:Function):Void … frame で指定したフレームに到達した時に func を実行します。サンプル

TextField
使えるプロパティ
text : String
background : Boolean
backgroundColor : String ex.'#FFFFFF' *background が true の時にのみ適用

(全体的に、下記 _element の style を書き換える方が簡単です)

独自プロパティ
_element …TextField の表示用DIV Element

使えるメソッド
removeTextField() : Void