• ベストアンサー

インスタンスの進み方。。

BlurFiltanの回答

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

mc.x などという書き方をされているところから推測して ご使用の ActionScript のバージョンは 3.0 ですよね? また何の説明もありませんが mc.x の mc とはステージ上にあるムービークリップのインスタンス名ですよね? その辺のことはちゃんと記述すべきです。 その他に関しても説明が不足し過ぎているため 「いったい何だ? どうしたいんだ?」と思うことが多々多々ありますが 私の推測を含めて一応スクリプトを考えてみました。 /*===========================================*/ //カウンタとなる変数「cnt」を用意 var cnt:int=0; //「mc」を右に 5px 動かす関数「moveMC」を作成 function moveMC(e:Event):void { if (mc.x<200) { if (mc.x<cnt*5) { mc.x+=1; } else { //「mc」から毎フレーム実行する関数「moveMC」を削除 mc.removeEventListener(Event.ENTER_FRAME,moveMC); } } else { //指定時間間隔で関数「startMC」を実行するのをやめる myTimer.removeEventListener(TimerEvent.TIMER, startMC); } } //5秒間隔で動作するTimerインスタンスを作成 var myTimer:Timer=new Timer(5000,0); //指定時間間隔で関数「startMC」を実行 myTimer.addEventListener(TimerEvent.TIMER, startMC); //タイマースタート; myTimer.start(); //関数「startMove」の定義; function startMC(te:TimerEvent):void { //カウンタに1を加算 cnt++; //「mc」に毎フレーム実行する関数「moveMC」を登録 mc.addEventListener(Event.ENTER_FRAME,moveMC); } //関数「startMove」をすぐに実行 startMC(null); /*===========================================*/ 5秒間隔で5pxずつ動くのですから かなり地味な動きですよ。。。

drmada
質問者

お礼

ありがとうございます。試します。

drmada
質問者

補足

すみません。試してみましたが、インスタンスmcが全く動かない状態です。

関連するQ&A

  • 動的生成のムービークリップにインスタンス名でアクセスできないようです

    動的生成のムービークリップにインスタンス名でアクセスできないようです FLASHCS3(ActionScript3.0)でアルバムを作っています。 最大で5枚の外部画像を読み込んで (何枚有るかは読み込んでみないと分からない) それを配置させるスクリプトを書いています。 ただ、枚数によってそれぞれ配置させるする場所が異なるります 例えば1枚の時の1枚目の座標と、2枚の時の1枚目の座標は異なります。 これは、FLASHは、画像やファイルが何枚そのフォルダに有るかは セキュリティの関係上分からない(PHPなどを連携すればできるようだが) ので苦し紛れの策です。 numが読み込んだ画像の何枚目かを表しますが それを後で動かしたり出来るようにmcという ムービークリップにいれています。 mc.name = "mc"+num; インスタンス名は mc.name = "mc"+num; としておいて1枚目の時は getChildByName("mc0").x = 295; で所定の座標に配置できます。 ところが2枚目の時は 「null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」 と表示されてしまい、1枚目の座標は変わらず、2枚目は表示されますが座標が0(左上)に 表示されてしまいます。 試しに//■■■■2枚目の時以下のif文を消すとエラーは出ないのですが なぜ1枚目はエラーがでなくて、2枚目はエラーが出るか分からないのです。 どなたか教えていただけると助かります。 よろしくお願いします。 (以下スクリプトの一部) //■■■■イベントリスナーでnumを渡す loader_obj.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComp(num)); //■■■■イベントリスナー関数 function loadComp(num:int):Function{ return function(event:Event):void{ var loader:Loader = Loader(event.target.loader); var mc = new MovieClip; addChild(mc); addChild(event.target.loader); mc.addChild(event.target.loader); mc.name = "mc"+num; //■■■■1枚目の時 if ( num == 0 ){ getChildByName("mc0").x = 295; getChildByName("mc0").y = 30; } //■■■■2枚目の時 if ( num == 1 ){ getChildByName("mc0").x = 165;//■■■■1枚目の配置を変える getChildByName("mc1").x = 425; getChildByName("mc1").y = 30; } //■終わり } }

    • ベストアンサー
    • Flash
  • ステージにある複数のインスタンスを制御したいです

    ステージに配置してある複数のインスタンスをアクションスクリプトで制御したいです。 インスタンスには「mc0」~「mc9」の連番で名前をつけています。 例えば、それぞれのインスタンスのタイムラインを再生させる指示を与えるとすると、 mc0.gotoAndPlay("main"); mc1.gotoAndPlay("main"); mc2.gotoAndPlay("main"); mc3.gotoAndPlay("main"); ・ ・ ・ mc9.gotoAndPlay("main"); となると思いますが、もっとスマートに書くとするとどんな書き方があるでしょうか? 数がもっと増える可能性があるので、もっと合理的な方法を知りたいです。 アクションスクリプトで生成したインスタンスを動かすには、 for(var i:int=0;i<10;i++){ var mc:MovieClip=new McMC(); addChild(mc); mc.name="mc"+i; mc.x=200+i*50; mc.y=200; mc.gotoAndPlay("main"); } のような感じで動かすのはやったことがあるので 既にステージに直接配置されているインスタンスもfor文で同じように制御できると思い 以下のように試してみましたが… for(var i:int=0;i<10;i++){ var mc:MovieClip; mc.name="mc"+i; mc.x=200+i*50; mc.y=200; mc.gotoAndPlay("main"); } 未定義となってしまいます。 やはり地道に書くしかないのでしょうか? ご教授を宜しくお願い致します。 ※FlashCS4、AS3で作業しています。

    • ベストアンサー
    • Flash
  • attachMovieでのインスタンス名

    以下のようなスクリプトを書いているのですが、 traceの値がすべてmenu_mcとなってしまいます。 インスタンス名をmenu1_mc,menu2_mc,menu3_mc,・・・としたいのですが、どうすればいいのでしょうか? i = 10; for(y = 0; y < i; y++) { trace(y); m = y+1; obj = _root.attachMovie("menu", "menu"+m, y); obj._x = 30; obj._y = 70*y; trace(this._name); } 環境はFlashCS3、ActionScript2.0です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • コンボボックスでのMCの制御

    度々申し訳ないのですが、非常に困っているのでどなたかご教授下さい。 コンボボックスでMCを移動させるというものを作っています。 http://w3sv01.paris-miki.co.jp/paris-miki.com/move_mc.html 今は緑_mc、青_mc別々に動かしているのですが、青_mcを"かけるボタン"で出現させた時、青_mcの現在の座標位置を保ったまま、緑_mcを動かすコンボボックスで緑_mc、青_mc共に移動させ、なおかつ行ったり来たり出来るようにしたいのですが、どうスクリプトを追加したら良いのかまったく分かりません。 ピクセルを足すだけだと一方方向しか動きません。 そもそもそれは可能なのかどうかも分からない状態です。 下記のスクリプトに追加しようと思っています。 ////緑_mc(b_mc)を右方向に動かすAS開始//// //デフォルトの 0 を選択状態にしておく myCombo4.selectedIndex =0; // リスナーオブジェクトを作成する var myListener = new Object(); // 関数をリスナーオブジェクトに割り当てる myListener.change = function(event_obj) { //デフォルト my_Sel = event_obj.target.value; if (my_Sel == "0"){ b_mc._x = a_mc._x; シンボル2._x = b_mc._x; } else if (my_Sel == "-0.5"){ b_mc._x = a_mc._x + 20; シンボル2._x = b_mc._x; } else if (my_Sel == "-1"){ b_mc._x = a_mc._x + 40; シンボル2._x = b_mc._x; } <----------長いので省略-------------> else if (my_Sel == "-8"){ b_mc._x = a_mc._x + 320; シンボル2._x = b_mc._x; } else if (my_Sel == "-8.5"){ b_mc._x = a_mc._x + 340; シンボル2._x = b_mc._x; } else if (my_Sel == "-9"){ b_mc._x = a_mc._x + 360; シンボル2._x = b_mc._x; } else if (my_Sel == "-9.5"){ b_mc._x = a_mc._x + 380; シンボル2._x = b_mc._x; } else if (my_Sel == "-10"){ b_mc._x = a_mc._x + 400; シンボル2._x = b_mc._x; } // b_mc を data の値の分ずつ移動 b_mc._x += event_obj.target.selectedItem.data; }; // リスナーを追加する myCombo4.addEventListener("change", myListener); ////b_mcを右方向に動かすAS終了//// ---------------------------------------------------------- ////青_mc(d_mc)を右方向に動かすAS開始//// // myCombo5をデフォルトの 0 を選択状態にしておく myCombo5.selectedIndex =0; // リスナーオブジェクトを作成する var myListener = new Object(); // 関数をリスナーオブジェクトに割り当てる myListener.change = function(event_obj) { //デフォルト my_Sel = event_obj.target.value; if (my_Sel == "0"){ d_mc._x = b_mc._x;    シンボル1._x = b_mc._x; } else if (my_Sel == "0.5"){ d_mc._x = b_mc._x + 20; シンボル1._x = d_mc._x; } else if (my_Sel == "1"){ d_mc._x = b_mc._x + 40; シンボル1._x = d_mc._x; } else if (my_Sel == "1.5"){ d_mc._x = b_mc._x + 60; シンボル1._x = d_mc._x; } else if (my_Sel == "2"){ d_mc._x = b_mc._x + 80; シンボル1._x = d_mc._x; } <----------長いので省略-------------> else if (my_Sel == "4.5"){ d_mc._x = b_mc._x + 180; シンボル1._x = d_mc._x; } else if (my_Sel == "5"){ d_mc._x = b_mc._x + 200; シンボル1._x = d_mc._x; } else if (my_Sel == "5.5"){ d_mc._x = b_mc._x + 220; シンボル1._x = d_mc._x; } // 青_mc を data の値の分ずつ移動 d_mc._x += event_obj.target.selectedItem.data; }; // リスナーを追加する myCombo5.addEventListener("change", myListener); ////青_mcを右方向に動かすAS終了//// 説明がややこしくて申し訳ありませんが、どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • 【インスタンス名】添え字

    インスタンス名を 【player】とつけたMCがありまして それをフレーム1に下記のソースを。 //フレーム1 for (i = 0; i < player; i++) { duplicateMovieClip ("player", ("player" + i), i); } //END MCのソースコード //player for (i = 0; i < player; i++){ player add i ._x = 1+i//this._xでは、ひとつしか移動できない player add i ._y = 1+i//this._yでは、ひとつしか移動できない } //END MCのコードで 座標をiの数だけ指定の位置に 移動させたいだけなのですが duplicateMovieClip の処理が終わってから 複製した数だけクリップの中の処理が行われるので どうやっても、ひとつのMCしか移動させてやれません。 それとxとyの位置の値は連想配列(例:zahyou[i][0])から ひっぱってくるので、どうしても 「player add i」のような感じで 移動させてやりたいのがあります。 何か他に手法があるなら教えてください。

    • ベストアンサー
    • Flash
  • インスタンス名を変数に

    こんにちは。 インスタンス名を変数(imaMc)に格納して、x方向に移動したいのですが、エラーが出てしまってうまく行きません。 var imaMc:String; imaMc=scale_mc.name; stage.addEventListener(MouseEvent.CLICK,removeScaleset); function removeScaleset(evt:MouseEvent):void { trace(imaMc); imaMc.x=500; } 上記のようなスクリプトを組んでいるのですが、trace(imaMc)までは正常に動くのですが、imaMc.x=500が以下のようなエラーになってしまいます。 1119: Access of possibly undefined property x through a reference with static type String. これは何故でしょうか? traceするとscale_mcと出るので間違っていないと思うのですが・・・ ActionScript3.0です。 ご回答お願い致します!

    • ベストアンサー
    • Flash
  • thisをインスタンス名に変えたらムービーが動かない

    Flash8です。タイムライン上に、 ボタン(インスタンス名 b1_btn) と ムービークリップ(インスタンス名 test_mc) を配置しました。 次に、このボタンインスタンスに以下のイベントハンドラを記述しました。 ----------------- on (press) { this.stop(); } ----------------- 実行すると、ボタンを押せばムービーが停止します。 で次に、上記の記述を以下のように変えます。 ----------------- on (press) { test_mc.stop(); } ----------------- 実行すると、ボタンを押してもムービーが停止しません。 なにがイケないのでしょうか?

  • インスタンス名の変更mcどうしのhittest

    お世話になります。Flash,actionscriptの初心者です。 現在actionscript2.0でちょっとしたFlashコンテンツを作っているのですが、解決できない ことがあり、ぜひお知恵を拝借できればと思います。 詳しくは添付図をご覧いただきたいのですが、 A1_mcとB1_mcのムービークリップをhittestで衝突判定させ、 B1_mcは見えないようにし、 A1_mcはgotoAndPlay(2)で2フレーム目にします(☆の絵)。 同時にthis._name="C1_mc"でインスタンス名を変更しました。 (ここまでは大丈夫で、trace(this._name)でも変更が確認できる。) 同じようにA2、B2、C2も設定しました。 そして、姿(○⇒☆)とインスタンス名(A⇒C)と変わった C1_mcとC2_mcをhittestで衝突判定させてD_mc(■)を見えるようにしたいのですが、 何も起きず、hittestが発動していないのではと思ってしまいます。 説明がわかりにくいと思うのですが、インスタンス名を変更した物どうしのhittestを うまく発動させるにはどうしたらよいか、教えていただきたいのです。 にわか知識のためFlashやactionscriptの根本的な問題を理解できてなさそうです・・・。 ちなみに何がやりたいかというと、○と○、○と☆ではお互いに反応しないが、 ○と◇が合体して☆になったもの同士(☆と☆)が接触すると、反応して■が出現する・・・ そんなFlashを作りたいのです。 自分の現状のやり方以外でこれが実現できるのなら、それでも大歓迎です。 長文になりましたが、ぜひともよろしくお願いいたします。 <参考・・自分の組んだAS> A1_mc.onEnterFrame = function() { if (this.hitTest(_root.B1_mc))     { _root.B1_mc.gotoAndPlay(2); //2フレーム目(空のキーフレーム)にとび、B1を消す this.gotoAndPlay(2);  //○⇒☆(2フレーム目)に姿を変える this._name="C1_mc"; //インスタンス名をA1_mcからC1_mcに変える     trace(this._name); //インスタンス名の変更を確認する。 delete this.onEnterFrame;     } else{ } }; A2_mc.onEnterFrame = function() { if (this.hitTest(_root.B2_mc))     { _root.B2_mc.gotoAndPlay(2); //2フレーム目(空のキーフレーム)にとび、B1を消す this.gotoAndPlay(2);  //○⇒☆(2フレーム目)に姿を変える this._name="C2_mc"; //インスタンス名をA2_mcからC2_mcに変える     trace(this._name); //インスタンス名の変更を確認する。 delete this.onEnterFrame;     } else{ } }; C1_mc.onEnterFrame = function() { if (this.hitTest(_root.C2_mc))     {     this.visible = false ; //姿を消す _root.C1_mc.visible = false; _root.D_mc.gotoAndPlay(2); //D_mcの出現(D_mcの1フレーム目は透明で見えなくしている。2フレーム目からアニメーションさせたいのでvisibleは使わない)     delete this.onEnterFrame; }   else{ } };

    • ベストアンサー
    • Flash
  • 動的な数があるインスタンスに処理をさせたい

    お世話になります。 actionscript3.0で作成しています。 インスタンスが、「mc_1,mc_2,mc_3」が既にステージ上にある状態で、 あるボタンを押すと flag=1がきたら:mc_1.y+5; flag=2がきたら:mc_2.y+5; flag=3がきたら:mc_3.y+5; と、ボタンを押す度に、flagの値によって、動かすmcを変えたいと思っています。 しかしながら、上記の例では、mcは3個だけですが、こちらのmcの数は、 変わります。 そこで、mcのインスタンス名を 「mc_」+「番号」 というルールずけにして、  var NAME="mc_";  NAME=NAME+flag;  NAME.y+5; としたのですが、エラーが出て動きません。。。 どのようにすれば、mcの数が何個になろうが決まった関数で処理を 完了させることができるのでしょうか? お手数ですがよろしくお願い致します。

    • ベストアンサー
    • Flash
  • mcが停止していたら関数aaaを実行 AS3

    ムービークリップ(mc)が停止していたら、mcは関数aaaを実行し、それ以外はmcは関数bbbを実行するAS3は、どう書いたらよいでしょうか function ugoki(evt:Event):void { //「mc」が停止していたら if (******************) { //「mc」は関数aaaを実行 ***********************; //それ以外は「mc」は関数bbbを実行 } else { ***********************; } }

    • ベストアンサー
    • Flash