- ベストアンサー
【AS3.0】for文で変数に連番を適用する方法
- AS3.0を使用してゲームを作成する際、複数のムービークリップの位置をシャッフルしたい場合、for文を使って変数に連番を適用させる方法があります。
- 現在のスクリプトでは、ランダムな位置のパターンを抜き出し、ムービークリップの位置に適用させることでシャッフルを実現しています。
- しかし、変数を宣言する際にfor文を使用して連番を適用させる方法については説明されておらず、正しい書き方を知りたいとのことです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
スクリプトを見れば見るほど だんだん何をどうしようとされているのかがわからなくなりました。 ですからスクリプトや全体の解読とそれに対する具体的な回答はやめます(あきらめ)。 次の部分についてのみ回答します。 > for文を使って各変数の「1」等のナンバーにiを適用させて、 > ループさせれば良いとは思うのですが、 > ["MC"+i]等と入力してもエラーになってしまいます。 this["MC"+i] 等とすれば良いのではないでしょうか。 Googleやヘルプなどで「配列アクセス演算子」と検索してみてください。 http://www.google.co.jp/search?sourceid=navclient&hl=ja&q=%e9%85%8d%e5%88%97%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e6%bc%94%e7%ae%97%e5%ad%90
その他の回答 (1)
- H240S18B73
- ベストアンサー率65% (190/288)
こういうのにイベントリスナー使うなら ボタンのクリックイベントとか カスタムイベントをトリガーにするように すると思うんだけどなんでわざわざ EXIT_FRAMEトリガーにして 一回だけ実行するみたいな事してるんでしょ? しかも一回しか実行しないから 一個しか処理されませんよね? 以降のすべての処理より後に実行したいとか? var mixarrayX:Array = [0,60,120,150,200];//x位置のパターン var mixarrayY:Array = [0,20,50,80,90];//y位置のパターン //この関数実行する度にMC1~MC5の位置をシャッフル shuffleCard() function shuffleCard(){ var sfl1=shuffleInts(5) var sfl2=shuffleInts(5) for(var i=0;i<5;i++){ this["MC"+(i+1)].x=mixarrayX[sfl1[i]] this["MC"+(i+1)].y=mixarrayY[sfl2[i]] } } //0から始まる整数値をシャッフルして返すメソッド //ウチの計算機クラスから抜き出してきました shuffleInts(len:uint):Array{ var rtn:Array=new Array() for(var i=0;i<len;i++){ rtn.splice((i+1)*Math.random()>>0,0,i) } return rtn } こういうんじゃダメなんですかね?
お礼
回答ありがとうございます。 おかげさまでシャッフル処理が組みあがりました! EXIT_FRAMEトリガーにしたのは、そのイベント内でfor~文を使って処理すれば良いかなと思い、組んでいた為です。 2.0を普段使っていると、カスタムクラスは違和感があって後ずさってしまいますが怖がらずに使って生きたいですね。
お礼
回答ありがとうございます! 検索もかけていたんですが、キーワードがわからなくて困っていたのでとても助かりました! 結果的には以下のスクリプトに収まりました。 import flash.events.Event; var rdmarray:Array = [1,2,3,4,5,6,7,8,9];//x位置のパターン var P1:Array = [0,0]; var P2:Array = [0,60]; var P3:Array = [0,120]; var P4:Array = [60,0]; var P5:Array = [60,60]; var P6:Array = [60,120]; var P7:Array = [120,0]; var P8:Array = [120,60]; var P9:Array = [120,120]; this.addEventListener(Event.ENTER_FRAME,syaful); function syaful(e:Event):void { for (var i:uint = 1; i <= 9; ++i) { var rdm1:int = Math.random() * rdmarray.length; trace("randam"+ rdm1); var pickuprdm:Array = rdmarray.splice(rdm1,1); trace(pickuprdm); this["MC" + i].x = this["P" + pickuprdm][0]; this["MC" + i].y = this["P" + pickuprdm][1]; } removeEventListener(Event.ENTER_FRAME,syaful); } 3.0を使っているのが回りでも自分だけなので、今後も質問してしまうかもしれませんが、その際も何卒よろしくお願い致します。