超Flash Lite入門 ActionScript編 その9 ボタン入力のコード統一

Flash Liteでの仕様では上下ボタンの取得ができるのですが、DoCoMoauSoftbankのキャリアの仕様ではタブと同様の扱いとなる為、ボタンを3つ配置してフォーカスを取得する方法が一般的です。しかし、このようにするとコードが冗長になってしまい。メンテナンスが困難になってしまいます。callで別のムービークリップに飛ばしたいところですが、getURLもこのボタンの中で処理しないと動作しない為非常にやっかいです。試行錯誤した結果以下のようにしてまとめる形にしてみました。

rollOverの設定のみ、それぞれbtn1:-1,btn2:-2,btn3:-3としそれ以外はすべて共通とする。

btn1

on(keyPress "0"){_arg= 0;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "1"){_arg= 1;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "2"){_arg= 2;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "3"){_arg= 3;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "4"){_arg= 4;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "5"){_arg= 5;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "6"){_arg= 6;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "7"){_arg= 7;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "8"){_arg= 8;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "9"){_arg= 9;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "*"){_arg=10;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "#"){_arg=11;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "<ENTER>"){_arg=12;call('/as:event');if(_ret){getURL(_url);}}
on(rollOver) {_arg=-1;call('/as:event');}

btn2

on(keyPress "0"){_arg= 0;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "1"){_arg= 1;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "2"){_arg= 2;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "3"){_arg= 3;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "4"){_arg= 4;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "5"){_arg= 5;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "6"){_arg= 6;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "7"){_arg= 7;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "8"){_arg= 8;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "9"){_arg= 9;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "*"){_arg=10;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "#"){_arg=11;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "<ENTER>"){_arg=12;call('/as:event');if(_ret){getURL(_url);}}
on(rollOver) {_arg=-2;call('/as:event');}

btn3

on(keyPress "0"){_arg= 0;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "1"){_arg= 1;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "2"){_arg= 2;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "3"){_arg= 3;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "4"){_arg= 4;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "5"){_arg= 5;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "6"){_arg= 6;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "7"){_arg= 7;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "8"){_arg= 8;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "9"){_arg= 9;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "*"){_arg=10;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "#"){_arg=11;call('/as:event');if(_ret){getURL(_url);}}
on(keyPress "<ENTER>"){_arg=12;call('/as:event');if(_ret){getURL(_url);}}
on(rollOver) {_arg=-3;call('/as:event');}

as:event

// キーイベント処理
// -1 btn1 -2 btn2 -3 btn3
// 10 * 11 # 12 <ENTER> 13 ↑ 14 ↓

if(/:_arg<0){bid=-/:_arg-1;/:_arg=13+(nbid-bid+2)%3;nbid=bid;}
/:_ret=0;
switch(/:_arg){		// メイン画面
  case 1: case 2: case 3: case 4: 
  case 6: case 7: case 8: case 9:
  case 13: case 14:{
    if(/:_arg==13)/:_arg=1;
    if(/:_arg==14)/:_arg=9;
    call('/as:move');break;}
  case 5: case 12:{/:_ret=1;/:_url="http://www.example.com/move.do";break;}
  case 0:{         /:_ret=1;/:_url="http://www.example.com/ret.do"; break;}
}