- 締切済み
FlashLite3.0でキー操作のスクリプト
初めまして。 Flashlite3.0(携帯用)でキー操作で240×240のマップ上をキャラクターが移動するアクションスクリプトを知りたいのですが、ネット等で検索した所、PCでキャラクターが移動する方法しか見つかりませんでした。 4で←8で↑6で→2で↓というように移動させたいです。 また、240×240以上越えると当たり判定で先に進まないようにしたいのですが、わかる方、もしくは説明しているサイトを知っている方がいらっしゃれば、お教え下さい。 宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- BlurFiltan
- ベストアンサー率91% (1611/1754)
Flash Lite 3.0 だと, 書かれていらっしゃる内容のようなことはPC用でも携帯用でも, ほとんど違いがないと思いますよ。 違いがあるとすれば ActionScript 3.0 が使えるか使えないかくらいではないでしょうか。 あとは, キーの並びがPCの場合 7 8 9 4 5 6 1 2 3 で,携帯の場合 1 2 3 4 5 6 7 8 9 であるとか, キーコードがPCの場合 「2」=98 「4」=100 「6」=102 「8」=104 で,携帯の場合 「2」=50 「4」=52 「6」=54 「8」=56 であるくらいなもので, Flash Lite 1.0 とか 1.1 で作るように恐ろしく違うということは全くないと思います。 マップをムービークリップに変換して「map_mc」というインスタンス名を付け, キャラクター(ムービークリップ)に「man_mc」というインスタンス名を付けたとします。 _root ├man_mc └map_mc この場合,メインのタイムラインのフレームに次のように書くと, 一応ご質問されているような動きになると思います。 ----------------------------------------------- // map_mc の上下左右端座標を得るためのオブジェクトを作成 var bnd_obj:Object = map_mc.getBounds(this); // man_mc を動かすユーザ関数の定義(引数:x座標,y座標) function manMove(my_x:Number, my_y:Number):Void { // // 1フレーム進む時間毎に随時実行する関数を定義 man_mc.onEnterFrame = function():Void { // man_mc の x座標 を my_x ずつ移動 this._x += my_x; // man_mc の y座標 を my_y ずつ移動 this._y += my_y; // もし man_mc の x座標 が map_mc の左端以下になれば if (this._x<=bnd_obj.xMin) { // man_mc の x座標 を map_mc の左端にする this._x = bnd_obj.xMin; // man_mc.onEnterFrame を削除 delete this.onEnterFrame; // もし man_mc の x座標 が map_mc の右端以上になれば } else if (this._x>=bnd_obj.xMax) { // man_mc の x座標 を map_mc の右端にする this._x = bnd_obj.xMax; // man_mc.onEnterFrame を削除 delete this.onEnterFrame; // もし man_mc の y座標 が map_mc の上端以下になれば } else if (this._y<=bnd_obj.yMin) { // man_mc の y座標 を map_mc の上端にする this._y = bnd_obj.yMin; // man_mc.onEnterFrame を削除 delete this.onEnterFrame; // もし man_mc の y座標 が map_mc の下端以上になれば } else if (this._y>=bnd_obj.yMax) { // man_mc の y座標 を map_mc の下端にする this._y = bnd_obj.yMax; // man_mc.onEnterFrame を削除 delete this.onEnterFrame; } }; } // キーを監視するためのオブジェクトを作成 var key_obj:Object = new Object(); // 何かのキーが押されたときに実行する関数を定義 key_obj.onKeyDown = function():Void { // (---出力検証用---) trace(Key.getCode()); // キー「2」(↑)であれば if (Key.getCode() == 50) { // ユーザ関数manMoveを実行(引数:x座標,y座標) manMove(0, -2); // キー「4」(←)であれば } else if (Key.getCode() == 52) { // ユーザ関数manMoveを実行(引数:x座標,y座標) manMove(-2, 0); // キー「6」(→)であれば } else if (Key.getCode() == 54) { // ユーザ関数manMoveを実行(引数:x座標,y座標) manMove(2, 0); // キー「8」(↓)であれば } else if (Key.getCode() == 56) { // ユーザ関数manMoveを実行(引数:x座標,y座標) manMove(0, 2); } }; // 何かのキーが放されたときに実行する関数を定義 // (キーを放しても動き続けさせる場合はこのスクリプトを消す) key_obj.onKeyUp = function():Void { // man_mc.onEnterFrame を削除 delete man_mc.onEnterFrame; }; // Keyクラスのリスナーとして key_obj を登録 Key.addListener(key_obj); ----------------------------------------------- ※ Flash Lite 3.0(Flash Lite 2.0以上) ActionScript2.0 でパブリッシュ >ネット等で検索した所、 >PCでキャラクターが移動する方法しか見つかりませんでした。 その検索された方法と,上記の方法が違っているとするなら(おそらく大きく違っていると推測できます), それは "作者が違う" ために違う意図や考え方でスクリプトを組んでいるからです。 決して "携帯用とPC用とが違う" から方法やスクリプトが違うのではないと思います。 "携帯用とPC用とが違う" から違う箇所は, キーの場所 と キーコード だけだと思います。
補足
ご回答ありがとうございます。 キャラクターを動かす事はできたのですが、 初期位置で2キー(↑)を押すと上へ進んでしまい、マップからオーバーし、6キー(→)を押すと初期位置に戻ってしまいます。 また、6キー(→)でマップの端まで行くとマップ内で止まらずオーバーしてまいます。 8キー(↓)ではキャラクター1個分マップをオーバーしてしまいます。