• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンボボックスでのMCの制御)

コンボボックスでのMC制御についての質問

このQ&Aのポイント
  • コンボボックスでMCを移動させる方法について質問です。現在は緑_mcと青_mcを個別に動かしていますが、青_mcを出現させた時に緑_mcも一緒に動かせる方法を知りたいです。
  • また、ピクセルを足すだけでは一方向しか動かないため、行ったり来たりする動きを実現するにはどのようなスクリプトを追加すれば良いかも教えて欲しいです。
  • 質問内容はややこしいですが、お助けいただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • perse
  • ベストアンサー率74% (113/152)
回答No.1

質問内容がいまいちよくわからないのですが、 >緑_mcを動かすコンボボックスで緑_mc、青_mc共に移動 これは緑_mcを動かすときに青_mcも一緒に動かせば良いだけです。 b_mc._x += event_obj.target.selectedItem.data; の下に d_mc._x += event_obj.target.selectedItem.data; または... 緑_mcの中に青_mcを入れてしまえば、 緑_mcを動かしただけで勝手に青_mcも動いてくれます _root  ├青_mc    ├緑_mc という階層にするということです。 ただし緑_mcのみを動かしている部分は 青_mc.緑_mc._x += 1; のように書き直さなければなりません。 よくわからないのは以下の部分です。 >青_mcの現在の座標位置を保ったまま 共に動かしたいのに保ったまま? >行ったり来たり出来るようにしたい >ピクセルを足すだけだと一方方向しか動きません。 引けば逆方向にも動くと思うのですが。 ここからは質問と関係ないのですが、 ifの場合分けをしている部分をもっと簡潔に書けると思います。 (省略された部分も他と同じだと考えると) まず シンボル2._x = b_mc._xが全てのifの中にあるのでif文の外に出せます。 そしてmy_Selの値によって b_mc._x = a_mc._x + 数値 としていますがこの数値の部分もコンボボックスのdata部分に入れてしまえばいいと思います。 data部分には何でも入れることが出来ます。 ですので配列を入れればいくつでも値を入れられます。(配列じゃなくてもいいんですが配列が便利です) //例------------------------------------------------------------- var myListener = new Object(); myCombo.addItem("a", ["a1", "a2"]); myCombo.addItem("b", ["b1", "b2"]); myListener.change = function(event_obj) { trace("一つ目 = "+event_obj.target.selectedItem.data[0]); trace("二つ目 = "+event_obj.target.selectedItem.data[1]); }; myCombo.addEventListener("change", myListener); //------------------------------------------------------------- 今回の場合ですと (本来のdataの値は私にはわからないので適当に100,200,300としています。) myCombo4.addItem("0",[100,0]); myCombo4.addItem("-0.5",[200,20]); myCombo4.addItem("-1",[300,40]); と追加しておいて、 myListener.change = function(event_obj) { b_mc._x = a_mc._x+event_obj.target.selectedItem.data[0]; シンボル2._x = b_mc._x; b_mc._x += event_obj.target.selectedItem.data[1]; }; という感じになります。

snowdrop25
質問者

お礼

perse様 返信が遅くなり申し訳ありません。 青_mcを緑_mcの中に入れたら、ちゃんと動きました。 ifの場合分けのところもすっきり整理することができました。 まだまだ分からないことだらけですが、挫折せずにFlashが使えるように頑張ります。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Now Loading中に背景が出てこない

    最近質問ばかりですいません。 Flashでホームページを作成しているのですが、 Now Loading中何%読み込まれたかの数字は出てくるのですが 背景のムービークリップが出てきません。 何が悪いのでしょうか? よろしくお願いします。 ちなみにスクリプトは下記の通りです。 背景は、loader_mc ←外部ムービを読み込むムービークリップと背景のムービークリップは同じです。 ▼スクリプト▼ //-- リスナーオブジェクトを生成する myListener = new Object(); //-- ロード中にする仕事 myListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) { //-- 何%読み込まれたかを表示する per_txt.text = Math.floor(loadedBytes/totalBytes*100)+"%"; }; //-- ロードが完了したらする仕事 myListener.onLoadComplete = function() { nextFrame(); }; //-- MovieClipLoaderを生成する my_mcl = new MovieClipLoader(); //-- MovieClipLoaderにリスナーを登録する my_mcl.addListener(myListener); //-- MovieClipLoaderを使って外部のムービーをloader_mcに読み込む my_mcl.loadClip("swf/joli_home 5.swf", loader_mc); //-- stop();

  • MCのgotoAndPlay制御について

    今現在すごく初歩的なものを作っています。 まず、MCですが、1~10フレームは歩く動作、11~20フレームは座る動作 と言ったフレームで動作を表現したものです。 このMC内で1~10フレームを繰り返すようにgotoAndPlay(1)と10フレーム目に書きました。 そして、このMCに onClipEvent (load) { // スピードの初期値 spd = 5; } onClipEvent (enterFrame) { // spd ずつ右へ移動 this._x += spd; if(this._x>100){ spd = 0; this.gotoAndPlay(11); } } といったように A地点~B地点は歩いている動作をさせながら5ずつ移動させ、100まで来たら停止させ、 そのB地点では座る動作(MCの11フレーム目から)をスタートさせるようにしました。 しかし、実際はMCの11フレーム目で固まった状態です onClipEvent (enterFrame)なので当たり前なのは分かっているのですが、 他に方法が分かりません。 何かなるべく完結な方法はありますでしょうか?

    • ベストアンサー
    • Flash
  • コンボボックスで困ってます。

    AS3.0でflashを作っている初心者です。 コンボボックスで、画面に表示される画像の切り替えを行いたいと思ってます。 画像をムービークリップにして、そのムービークリップのフレームとコンボボックスのデータを対応させ、表示を切り替えたいと考え、様々なサイトを参考にして、以下のように書いてみたのですが、うまくいきません。ずっとフレーム1の画像が表示されたままです。 my_cb.prompt = "選択"; my_cb.addItem( { label: "ピンク", data:1 } ); my_cb.addItem( { label: "赤", data:2 } ); my_cb.addItem( { label: "黒", data:3 } ); my_cb.addItem( { label: "青", data:4 } ); addChild(my_cb); my_cb.addEventListener(Event.CHANGE, changeFunction); function changeFunction(e:Event):void { mc.gotoAndStop(my_cb.selectedItem.data); } ムービークリップはそれぞれのフレームにstop();と書いてます。 書かないとアニメーションしてしまうので、書いているのですが、これがいけないのでしょうか…? どなたかご教授いただけないでしょうか。

    • ベストアンサー
    • Flash
  • すべてのMCを1フレーム目へ

    ステージ上にMCのインスタンスが100個あるとします。 ボタンのクリックで全部のMCを1フレーム目へ移動させたいと思っています。 _root.EVENT_btn.onRelease = function() { _root.A_mc.gotoAndStop(1); _root.B_mc.gotoAndStop(1); _root.C_mc.gotoAndStop(1); _root.D_mc.gotoAndStop(1); : : } とひとつずつ書くしかないのでしょうか? ほかに効率のよい書き方はありますか? (注)すべてのインスタンスの親は同一オブジェクトではありません。

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

    動的生成のムービークリップにインスタンス名でアクセスできないようです 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
  • 既に配置されているMCを外部から制御する(2)

    度々申し訳ございません。 分かったつもりだったのですが、MCを動かすしかできませんでした。 これは間違いでしょうか? onClipEvent(mouseDown){ a=a+1; my_sound2.start(0,1); Play(); } クリックがあったときに 変数のカウントをして 音を鳴らすだけの事なのですが クリップイベントでは使えないのでしょうか? 音も鳴りませんし、変数にも代入されていないようなのです。 お手数ですが、宜しくお願いします。 尚、メインタイムラインの一番最初のフレームで 変数の宣言(?) a=0; と、 音の設定 my_sound2=new Sound(); my_sound2.attachSound("gan1"); は済ませてあります。 ライブラリのリンケージ登録も完了しています。

    • ベストアンサー
    • Flash
  • マウス追従のシンボル重なり位置

    過去ログに該当するのがありませんでしたので質問します。 マウスに追従するシンボルについてですが、mcを3つ用意します。 インスタンス名をそれぞれmy_mc、my_mc1、my_mc2とします。 アクションスクリプトは下記です。 my_mc.addEventListener(Event.ENTER_FRAME,onEnterframe); function onEnterframe(event:Event):void{ my_mc.x+= (stage.mouseX-my_mc.x)/3; my_mc.y+= (stage.mouseY-my_mc.y)/3; my_mc1.x+= (my_mc.x-my_mc1.x)/3; my_mc1.y+= (my_mc.y-my_mc1.y)/3; my_mc2.x+= (my_mc1.x-my_mc2.x)/3; my_mc2.y+= (my_mc1.y-my_mc2.y)/3; } my_mcが追従して、my_mc1とmy_mc2が追いかけます。 my_mc2の重なりが最も手前になってしまいます。私としては一番奥にさせたいのですが 何が原因でこのような現象になるのでしょうか。 環境: FLASH CS3 アクションスクリプト 3.0

    • ベストアンサー
    • Flash
  • インスタンス名の変更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
  • どこが悪いのか・・・

    初めまして、こんばんわ。 学校の課題で、二次方程式のXの解を求めるC言語のプログラムを作ったのですが 何故か巧く起動しません。 よくわかりません・・・。 是非、何処が悪いのか指摘していただくと嬉しいです。 /*2-10(su210.c)*/ #include <stdio.h> #include <math.h> main() { int a,b,c; float D,x,y; printf("a*x^2+b*x+c=0のときa.b.cを入力して下さい。\n"); printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); printf("c="); scanf("%d",&c); if(a=0){ if(b=c=0) printf("xはすべての実数をとる。"); else{ if(c=0&&b!=0) printf("x=0"); else{ if(b=0&&c!=0) printf("解なし。"); else{ if(b!=0&&c!=0) {x=-c/b; printf("x=%f",x);} } } } } else{ if(a!=0){ D=b^2-4*a*c; if(D>0){ x=(-b+sqrt(D))/2/a; y=(-b-sqrt(D))/2/a; printf("判別式はD>0です。\n"); printf("x1=%f\n",x); printf("x2=%f\n",y);} else{ if(D=0){x=-b/2*a;printf("判別式はD=0です。\n");printf("x=%f",x);} else{ if(D<0){printf("判別式はD<0です。\n");printf("解なし。");} } } } } }

  • AS3.0 Timerの使い方

    AS3.0 Timerの使い方 a_mc、b_mc、c_mcがあり、a_mcが再生された1秒後にb_mcを作動させ b_mcが再生された0.5秒後にc_mcを再生というようにしたいのですが その場合、Timerはどのようにすれば良いのでしょうか? 初心者ですので、なるべく基本的な作り方が理想です。 下記のコードを参照にして頂ければと思います。 また、下記で間違っている部分がありましたらご指摘ください。 Flash CS3を使用しております。 宜しくお願い致します。 a_mc.y = 450; b_mc.y = 450; c_mc.y = 450; a_mc.alpha = 0; a_mc.addEventListener(Event.ENTER_FRAME, a_up); function a_up(event:Event):void { a_mc.y -= 2; a_mc.x -= 1; a_mc.alpha += 0.03; if (a_mc.y == 200) { a_mc.removeEventListener(Event.ENTER_FRAME, a_up); } } b_mc.addEventListener(Event.ENTER_FRAME, b_up); function b_up(event:Event):void { b_mc.y -= 2; b_mc.rotation += 6; if (b_mc.y == 200) { b_mc.removeEventListener(Event.ENTER_FRAME, b_up); } } c_mc.addEventListener(Event.ENTER_FRAME, c_up); function c_up(event:Event):void { c_mc.y -= 2; c_mc.x += 1; if (c_mc.y == 200) { c_mc.removeEventListener(Event.ENTER_FRAME, c_up); } }

    • ベストアンサー
    • Flash
MFC-J850DW印刷の質が改善しない
このQ&Aのポイント
  • 純正品でないインクを使っていたが、突然インクが出なくなったようでほとんどかすれた状態となった。取扱説明書に従い、すべて純正品に取り換えて数回ヘッドクリーニングを行ってみたが、完全には復活しない。
  • MFC-J850DWの印刷品質に問題があります。純正品以外のインクを使用していたため、突然インクが出なくなり、印刷物がほとんど読めない状態になりました。取扱説明書に従い、純正品にインクを交換し、ヘッドクリーニングを試みましたが、完全に復活しない状態です。
  • MFC-J850DWで印刷の品質が改善されません。非純正品のインクを使用していたため、突然インク供給が途絶え、印刷物がほとんど読めない状態になりました。メーカーの指示に従って純正品にインクを交換し、ヘッドクリーニングを行いましたが、完全に復活しません。
回答を見る