2006年03月16日
統合します(こっちにはもう書きません)
予告通り、www.be-interactive.orgに全て統合しました。
今後、こっちにはもう書かないのでよろしくです。コメントやトラックバックも向こうへ。
エントリのリンクの張り替えなんかもよろしくお願いします。
2006年03月13日
予告
そろそろlivedoorBlogをやめてwww.be-interactive.orgに統合しようと思います。ついでにデザイン変えます。(1年ごとにデザイン変えてるなぁ・・・)
てか、Nucleus弄ってるんですがかなり泥沼状態に・・・
2006年03月11日
switch-caseの最適化
先日のスクリプトエンジンのVirtualMachine(VM)でも使っているテクニックなのですが、VMはバイトコードに対応した処理をしなければならないので、
for (; pc < length; ) { switch (code[pc]) { case 'NOP': pc += 1; break; case 'LIT': code[code[pc+2]] = code[pc+1]; pc+=3; break; case 'ADD': code[code[pc+3]] = code[pc+1] + code[pc+2]; pc+=3; break; .... default: throw Error(); } }
というように、大量のcase分岐が必要になります。Flashはswtich-caseで単純な比較&ジャンプのコードしか生成しないので、このように大量にcaseがあると、一番最後のcaseが実行される場合なんかは悲惨な速度になります。
そこで、このswitch-caseを次のようなメソッド呼び出しに変更することによって、効率化を図ることが出来ます。
for (; pc < length; ) { pc += this[code[pc](code, pc); } ... private function NOP (code:Array, pc:Number) : Number { return 1; } private function LIT (code:Array, pc:Number) : Number { code[code[pc+2]] = code[pc+1]; return 3; } private function ADD (code:Array, pc:Number) : Number { code[code[pc+3]] = code[pc+1] + code[pc+2]; return 4; } ....
勿論、メソッド呼び出しのコストはかかるのですが、caseが大量であれば、平均するとこちらのアプローチの方が効率的です。
もしこのようなコードを書く機会があれば、両方試してみて、最適なものを選んでみてください。
2006年03月10日
暗号化SWF
ActionScript3からは外部SWFのLoaderがByteArrayからの読み込みに対応しているので、念願の暗号化SWFが出来ますね。しかも、ByteArrayがzlib形式の圧縮・解凍に対応していたりと、至れり尽くせりです。
ゲーム用の独自のアーカイブとか考えてみようかなぁ・・・。
2006年03月09日
ActionScript上でECMAScript+αなスクリプトを動かす
昨日のエントリがfladdict.netさんで紹介されて浮かれております。という訳で、続きです。
そもそも、どういう時にスクリプトエンジンが必要になるのか?という所ですが、元々このエンジンはゲームを製作しやすくしようプロジェクト(今勝手に命名)の一環として作ったもので、やはりゲーム系なんかで役に立ちそうです。
とりあえず、このスクリプトエンジンの特徴と仕様を書いてから、いくつか使用例を挙げてみるので、そこからスクリプトエンジンの使い道を探ってみてください(笑
- スクリプトエンジンの動作サンプル
- スクリプトエンジンのコード一式(リファクタリングしきれてません。すいません)
このブログについて / Description
Flashとプログラムと音ゲーと。