• 締切済み

ActionScript2.0でインスタンス名を変数に格納することが可

ActionScript2.0でインスタンス名を変数に格納することが可能なのかが、よくわかりません。 RPGゲームを作っているのですが、4種類のアバターから自分が冒険に使いたいアバターを選択し、そのアバターでその後の冒険をすすめていく ということをしようと考えています。 こうなると、 if(1のアバターが選択(クリック)されたら){ 変数aにアバター1_mcを代入する }else if(2のアバターが選択(クリック)されたら){ 変数aにアバター2_mcを代入する } という処理にし、後で aを表示 という呼び出し方になるのかなと思い、何度も試してみたのですが、ぜんぜん思うようにいきません。記述の仕方もわからない状態です・・・単なるAS2の勉強不足なのですが、何かこの方法でも他の方法でもいいやり方があったら教えていただきたいのですが・・・;_; よろしくお願い致します!

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.3

#2です。 > 例えば、yellow_mcをクリックしたらnextFrame();をして、 > 2フレーム目でaに格納されているインスタンスを表示する > ということをする場合、 > aは別フレームでも呼び出し可能なのでしょうか・・・? 普通に可能ですが。 しかし「インスタンスを表示する」という部分がわかりません。 どうやって非表示にしてあるのでしょうか? 非表示にする方法などたくさんあります。 その方法を説明されていない以上, どうやって表示させるのかは作者しかわかりません。 単純に考えれば非表示にしている逆の方法をとれば表示できると思います。 インスタンス の _visible を false にして非表示にしているのであれば _visible を true にすれば表示されると思います。 インスタンス の _alpha を 0 にして非表示にしているのであれば _alpha を 100 にすれば表示されると思います。 インスタンス の _x や _y を -2000 のようにして非表示にしているのであれば _x や _y を ステージ内の座標 にすれば表示されると思います。 インスタンス を何かの下レイヤーにおいて隠しているのであれば その何かを消すとか, インスタンス をその何かより上の深度に移動させるなどすれば表示されると思います。 もし仮に インスタンス の _visible を false にして非表示にしているのであれば 次のフレームに a._visible = true; のようなことを書けば良いのではないでしょうか。 ちなみに #2 の回答は字数制限ギリギリで書いています。 つまり #2 以上に付け足したスクリプトは書けませんので そこの部分をご理解をねがいます。

star5_7
質問者

お礼

ご回答ありがとうございます。 visible=flaseでもなくaiphaを0にしているわけでもなく、何も存在しないところからaのみを表示させることが可能なのかを考えてしまっていましたが、アドバイスいただいたように、visibleで操作することにしました!関係の無いmcはステージ外に移動し、aのみをvisible = true にし、ステージの中央に移動するという処理にしたらなんとか理想系の実装ができました。本当にありがとうございます!! お陰様で締め切りに間に合いそうです・・・;_; ありがとうございました!!

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

「インスタンス名を変数に格納する」 と考えると先に進めないのではないでしょうか? (インスタンス名は文字列であってインスタンスそのものではないため。) 「インスタンス名」ではなく「インスタンス自体」を変数に格納する と考えるのが一般的で普通にされていることだと思います。 (ActionScript 2.0 でも 3.0 でも考え方の根源がそもそもそうです。) ActionScript 2.0 パブリッシュ設定の新規ドキュメント(FLAファイル)のフレーム1 に 次のスクリプトをコピペして「制御」→「ムービープレビュー」してみてください。 ---------------- //変数 a を宣言 var a:MovieClip; //_root に 「red_mc」 というインスタンス名の赤いMCを作る _root.createEmptyMovieClip("red_mc", 0); _root.red_mc.beginFill(0xFF0000, 100); _root.red_mc.moveTo(0, 0); _root.red_mc.lineTo(100, 0); _root.red_mc.lineTo(100, 50); _root.red_mc.lineTo(0, 50); _root.red_mc.endFill(); _root.red_mc._x = 10; _root.red_mc._y = 10; //_root に 「blue_mc」 というインスタンス名の青いMCを作る _root.createEmptyMovieClip("blue_mc", 1); _root.blue_mc.beginFill(0x0000FF, 100); _root.blue_mc.moveTo(0, 0); _root.blue_mc.lineTo(100, 0); _root.blue_mc.lineTo(100, 50); _root.blue_mc.lineTo(0, 50); _root.blue_mc.endFill(); _root.blue_mc._x = 110; _root.blue_mc._y = 10; //_root に 「yellow_mc」 というインスタンス名の黄色いMCを作る _root.createEmptyMovieClip("yellow_mc", 2); _root.yellow_mc.beginFill(0xCCCC00, 100); _root.yellow_mc.moveTo(0, 0); _root.yellow_mc.lineTo(100, 0); _root.yellow_mc.lineTo(100, 50); _root.yellow_mc.lineTo(0, 50); _root.yellow_mc.endFill(); _root.yellow_mc._x = 230; _root.yellow_mc._y = 10; // 「red_mc」 というインスタンス名の赤いMCクリック時 _root.red_mc.onRelease = function():Void { //変数 a に 「red_mc」 というインスタンス名の赤いMCを代入 a = _root.red_mc; }; // 「blue_mc」 というインスタンス名の青いMCクリック時 _root.blue_mc.onRelease = function():Void { //変数 a に 「blue_mc」 というインスタンス名の青いMCを代入 a = _root.blue_mc; }; // 「yellow_mc」 というインスタンス名の黄色いMCクリック時 _root.yellow_mc.onRelease = function():Void { //変数 a に代入された MC を 下に 20px 移動 a._y += 20; //変数 a に格納されたMC とは何かを出力 trace("変数 a に格納されたMC とは→"+a); //変数 a に格納されたMC のインスタンス名を出力 trace("変数 a に格納されたMCのインスタンス名→"+a._name); }; ------------------ ムービープレビュー画面で 赤や青いMC をクリックした後 黄色のMC をクリックすると そのMC が下に下がり, 変数 a に格納されたものが何であるかと,そのインスタンス名が出力されると思います。 ActionScript 1.0 でも 2.0 でも 3.0 でも 変数にインスタンスへの参照を格納できます。

star5_7
質問者

お礼

ご丁寧な説明、ありがとうございます!!早速やってみたところ、変数aにインスタンス自体が格納された仕組みがよくわかりました。 本当にありがとうございます;_; これを応用して、アバター選択の実現をしてきたいと思うのですが、例えば、yellow_mcをクリックしたらnextFrame();をして、2フレーム目でaに格納されているインスタンスを表示する ということをする場合、aは別フレームでも呼び出し可能なのでしょうか・・・? 試しにいろいろな書き方で実行しているのですが、これまたうまくいきそうにありません・・;_; もし解決案がありましたら教えていただけるとありがたいです・・ よろしくお願い致します!!

  • usaribo
  • ベストアンサー率28% (2/7)
回答No.1

インスタンスを変数に入れてしまうよりも、 何かフラグ的な物を格納した上で判別する方法の方が 汎用性が高いかもしれません。 例えばA,B,C,D とキャラが居たとして、Aの場合には そのフラグによってA用の装備と、色んな物も振り分けられる 指標にする事ができます。(例:魔法使いだったら武器屋で杖を売る、等) その場合、 var chooseCharacter:Number; と宣言しておいて、置き場所が仮に_rootだとしたら if (_root.chooseCharacter == 1){ アバター1_mc._visible = true; } と番号で管理してしまうと良いのかもしれません。

star5_7
質問者

お礼

ご回答ありがとうございます! あばたーの選択は武器や装備を選択できるのが理想だったのですが、わたしの力不足で人のみを選択する形になりました・・・。 フラグの使用によってこれから色々な応用ができると思いますので、これから勉強していきたいと思います! ありがとうございました!!