キー操作その2の質問です

このQ&Aのポイント
  • 質問内容: SPACEキーでcapture_mcが左から右へ出現するようになったが、次はモーショントゥイーンで別のムービークリップが下から上へ出るようにしたい。質問者は前回の回答を参考にしているが、ムービークリップが動かない原因は何かを知りたい。
  • 前回の回答に感謝し、Flash製作においてはまだ未熟だが、これが貴重な第一歩となったと述べている。今回の質問ではキー操作に関する疑問が再度出たため、質問者は別のムービークリップの動作について情報を求めている。
  • 質問者は前回のActionscriptを改変し、別のムービークリップに適用させたが、なぜか指定した座標で動かない現象が発生している。原因がわからず困っており、助けが必要だと述べている。
回答を見る
  • ベストアンサー

キー操作その2の質問です

困っています お久しぶりです。そして前回のご返答ありがとうございます。 おかげさまで一つ解決策が見つかった気がします。 言葉が曖昧すぎてしまい回答を息詰らせてしまうような文章ですみませんでした。前回の回答は本当に適切で助かっています。 Flash製作はまだ未熟なもので、Actionscriptをいまいち理解していないところがあるので、文章が不適切になってしまいもうしわけありませんでした。 しかしながら、今回の件は貴重な第一歩となり、とても感謝しています。 たびたびKey操作の質問なのですが、先日の回答でSPACEキーを押すとcapture_mcが左から右へ出てくるようにはなったのですが、 今度は同じステージ上で、「モーショントゥイーンで別のムービークリップが下から上へ」出るようにしたいのです。 BlurFiltanさんが教えてくださった前回のActionscriptを別のムービークリップ(インスタンス名alpha_mc)に添付してイベントを「this._x」から「this._y」に変え、 インスタンス指定をalpha_mcにし、初期値をY座標の値に変えてパブリッシュプレビューをしてみたところ、 なぜかステージ上にある「capture_mc」の座標が、alpha_mcのscriptで指定した座標に変わってしまい、alpha_mcのムービークリップはSPACEキーを押しても動かないのですが、これは何が原因なのでしょうか?

  • Flash
  • 回答数1
  • ありがとう数1

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

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

とりあえず,その前回の 「キー操作その1」 は, 「Actionscriptのキー操作について 」 http://okwave.jp/qa4542398.html ですよね (探すのも一苦労...,普通なら探しもしませんよ。)。 > 今度は同じステージ上で、「モーショントゥイーンで別のムービークリップが下から上へ」出るようにしたいのです。 モーショントゥイーンの意味はわかっていらっしゃいますか...? > 前回のActionscriptを別のムービークリップ(インスタンス名alpha_mc)に添付して > イベントを「this._x」から「this._y」に変え、 > インスタンス指定をalpha_mcにし、初期値をY座標の値に変えて > パブリッシュプレビューをしてみたところ、 前回のActionscriptはモーショントゥイーンではありませんよ。 「モーショントゥイーンで動かしたい」のか, 「ActionScriptのみで動かしたい」のか,どちらなのでしょうか? また, > 別のムービークリップ(インスタンス名alpha_mc)に添付して と書かれていらしゃる意味がわかりません。 前回書いた ActionScript は,ムービークリップに添付したのではなくて, _root のフレームに書いたのです。 状況やしたいことがさっぱり飲みこめませんが, ステージ上にある「alpha_mc」というインスタンス名の付いたムービークリップ "のみ" を, SPACEキーで下から上に動かす ActionScript は次のようにすれば良いのではないかと思います。  ※注意:動かすのはモーショントゥイーンではなくActionScriptです。  ※注意:書くのは _root のフレームです。 /*======================================= MC「alpha_mc」がステージ上にあるものとする =======================================*/ // --- 初期設定部分 -------------------- // 「alpha_mc」が動く下端の座標を設定(※変える) var bottom_crd:Number = Stage.height-100; // 「alpha_mc」が動く上端の座標を設定(※変える) var top_crd:Number = Stage.height-300; // 動くスピードの設定(※変える) var speed:Number = 2/10; // 「alpha_mc」のターゲット座標の初期値(下端座標に一致させる) var alpha_target_crd:Number = bottom_crd; // 「alpha_mc」 を初期位置(下端座標)に移動 this.alpha_mc._y = alpha_target_crd; // --- キーの監視に関する部分 ------------- // キー監視用オブジェクト keyListener を作成 var keyListener:Object = new Object(); // キーダウン時の動作定義 keyListener.onKeyDown = function():Void { // もしスペースキーが押されたら if (Key.getCode() == Key.SPACE) { // 「alpha_mc」のターゲット座標を上端座標にする alpha_target_crd = top_crd; } }; // キーアップ時の動作定義 keyListener.onKeyUp = function() { // 「alpha_mc」のターゲット座標を下端座標にする alpha_target_crd = bottom_crd; }; // keyListener を Keyクラスのリスナーとして登録 Key.addListener(keyListener); // --- 「alpha_mc」を動かすエンジン部分 ----- // 1フレーム進む時間毎に随時実行 this.alpha_mc.onEnterFrame = function():Void { // このMCをターゲット座標にspeedずつ近付ける this._y += (alpha_target_crd-this._y)*speed; }; /*======================================*/ 繰り返しますが上のスクリプトは「alpha_mc」 "のみ" を単体で考えた場合です。 単体ではなく, ステージ上には「capture_mc」と「alpha_mc」というインスタンス名の付いた2つのムービークリップがあって, それら2つのムービークリップを,SPACEキーで同時に操作する場合の ActionScript は次のようにすれば良いのではないかと思います。  ※注意:動かすのはモーショントゥイーンではなくActionScriptです。  ※注意:書くのは _root のフレームです。 /*=============================================== MC「capture_mc」と「alpha_mc」がステージ上にあるものとする ===============================================*/ // --- 初期設定部分 -------------------- // 「capture_mc」が動く左端の座標を設定(※変える) var left_crd:Number = 100; // 「capture_mc」が動く右端の座標を設定(※変える) var right_crd:Number = 300; // 「alpha_mc」が動く下端の座標を設定(※変える) var bottom_crd:Number = Stage.height-100; // 「alpha_mc」が動く上端の座標を設定(※変える) var top_crd:Number = Stage.height-300; // 動くスピードの設定(※変える) var speed:Number = 2/10; // 「capture_mc」のターゲット座標の初期値(左端座標に一致させる) var capture_target_crd:Number = left_crd; // 「alpha_mc」のターゲット座標の初期値(下端座標に一致させる) var alpha_target_crd:Number = bottom_crd; // 「capture_mc」 を初期位置(左端座標)に移動 this.capture_mc._x = capture_target_crd; // 「alpha_mc」 を初期位置(下端座標)に移動 this.alpha_mc._y = alpha_target_crd; // --- キーの監視に関する部分 ------------- // キー監視用オブジェクト keyListener を作成 var keyListener:Object = new Object(); // キーダウン時の動作定義 keyListener.onKeyDown = function():Void { // もしスペースキーが押されたら if (Key.getCode() == Key.SPACE) { // 「capture_mc」のターゲット座標を右端座標にする capture_target_crd = right_crd; // 「alpha_mc」のターゲット座標を上端座標にする alpha_target_crd = top_crd; } }; // キーアップ時の動作定義 keyListener.onKeyUp = function() { // 「capture_mc」のターゲット座標を左端座標にする capture_target_crd = left_crd; // 「alpha_mc」のターゲット座標を下端座標にする alpha_target_crd = bottom_crd; }; // keyListener を Keyクラスのリスナーとして登録 Key.addListener(keyListener); // --- 「capture_mc」を動かすエンジン部分 ----- // 1フレーム進む時間毎に随時実行 this.capture_mc.onEnterFrame = function():Void { // このMCをターゲット座標にspeedずつ近付ける this._x += (capture_target_crd-this._x)*speed; }; // --- 「alpha_mc」を動かすエンジン部分 ----- // 1フレーム進む時間毎に随時実行 this.alpha_mc.onEnterFrame = function():Void { // このMCをターゲット座標にspeedずつ近付ける this._y += (alpha_target_crd-this._y)*speed; }; /*======================================*/ 上のスクリプトの, // 「capture_mc」が動く左端の座標を設定(※変える) var left_crd:Number = 100; // 「capture_mc」が動く右端の座標を設定(※変える) var right_crd:Number = 300; // 「alpha_mc」が動く下端の座標を設定(※変える) var bottom_crd:Number = Stage.height-100; // 「alpha_mc」が動く上端の座標を設定(※変える) var top_crd:Number = Stage.height-300; について少し説明します。 「capture_mc」や「alpha_mc」 の基準点の位置や大きさや好みにもよるので何とも言えませんが 100 や 300 は心もち大きめ(右寄り)の数値を入れています。 Stage.height-100 や Stage.height-300 は心もち小さめ(上寄り)の数値を入れています。 Stage.height とはステージの高さです。 この場合,ステージの高さはステージの下端の座標という扱いです。 したがって, Stage.height-100 の意味は,ステージの下端から上に100pxの座標 Stage.height-300 の意味は,ステージの下端から上に300pxの座標 ということになります。 この辺の状態から数値を変えていって調節すると感覚がつかみやすいと思ったので, 心もち大きめや小さめの数値にしています。  

tsuki0102
質問者

お礼

あわわ;解答の方本当にありがとうございます。いつもお世話をかけてすみません; そして前回の解答を探していただいてそこから考えて解答して下さった事本当に感謝しています。 日本語足らずの意味不明な事をいってしまって大変ご迷惑をかけていることに気が付きました・・・。 正直Flash制作を初めてからまだそんなに月日がたってないものですから、Flas知識があまりなく、意味不明でむりやりな事を言ってると思います。本当にすみません。 BlurFiltanの参考文献を大切にし、ご指示の通りにやって頑張りたいとおもいます。本当にありがとうございます><

関連するQ&A

  • ボタンから一つ上の階層のムービークリックを徐々にアルファ値を上げたり下げたりする。

    はじめまして、jpncan15といいます。 初めて質問させていただきます。 階層がややこしい状態ですが、ボタンから一つ上の階層のムービークリップのアルファ値を徐々に上げたり下げたりしたいのですが、なかなかうまく行かず昨晩から悩み中です。 もし、ご存じの方がいればご教授お願いいたします!! ○状況 シーン1  mc1(ムービークリップ)   mc2(ムービークリップ:インスタンス名:image)   mc3(ムービークリップ) buttan(ボタン:ボタン名:b1) ○buttan(ボタン:ボタン名:b1)のスクリプト ※触っていると、アルファ値が0→70%に変わって行く。 ボタンをはなすとアルファ値が70→0%変わって行く。 ※このスクリプトだと、徐々に変わって行くのではなくいきなり、アルファ値が「5」変わるだけなのです。。。 on (rollOver) { if (this._parent.image._alpha < 70){ this.common_b._alpha += 5; } } on (rollOut) { if (this._parent.image._alpha > 70){ this.common_b._alpha -= 5; } }

    • ベストアンサー
    • Flash
  • 複数のムービークリップについて

    毎度すみません。 複数のムービークリップ(以下MC)をステージに時間差でバラバラの位置に登場させたいのですが、最初で行き詰まってしまいましたのでご質問させてください。 5個のMC(1~5)をステージに配置し、インスタンス名をmc1~mc5で振っています。 スクリプトレイヤーに以下の様に記述しています。 ------------ for(i=1;i<5;i++){ var mc = this["mc"+i]; mc.num = i; } mc.num._visible = false; mc.num._alpha = 0; //MCを時間差で任意の位置に表示 var t=0; this.onEnterFrame = function(){ t++; if(t==25){ mc1._visible = true; mc1.onEnterFrame = function(){ this._y = 50; } } if(t==50){ mc2._visible = true; mc2.onEnterFrame = function(){ this._y = 100; } } if(t==75){ mc3._visible = true; mc3.onEnterFrame = function(){ this._y = 150; } } //以降、mc4、mc5は省略 } --------- --------- mc.num._visible = false; mc.num._alpha = 0; --------- の部分で、デフォルト時はmc1~5を非表示にしているつもりが、 最初から表示されてしまいます。 初心者なので、近いフラッシュを見よう見真似で作成しています。 根本的に記述法を間違えておりましたら、恐れ入りますがご指摘ください。 またもっと効率的な方法がありましたら、ご教授いただければ幸いです。 Flash8.0、ActionScript2.0で制作しています。

    • ベストアンサー
    • Flash
  • ムービークリップとインスタンス

    「ライブラリ内にあるのがムービークリップで、それをステージに配置したものがインスタンスである。」このように理解しているのですが、これは間違いでしょうか? 1、「MCを一つ作成し、それをステージ上に3カ所に配置し、各"MC"に01、02,03とインスタンス名を付けた。」 2、「MCを一つ作成し、それをステージ上に3カ所に配置し、各"インスタンス"に01、02,03とインスタンス名を付けた。」 上記の場合どちらが正しいのでしょうか? ムービークリップとインスタンスについてご教授ください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • キー入力で操作しているMCを障害物で止める方法

    WinXP、Flash8Proにてオーサリングしております。 【文字制限上最小限の説明とスクリプトも寄せてあります】下sと右dの場合ではプレイヤーの位置が障害物内に飛ぶ。一度衝突判定が実行されると障害物から離れられない。障害物に接触したあと接触時と違うキーを押すと障害物の反側面に飛んでしまう現象や、障害物は多数が若干かさなり合いながら置かれているので、その障害物の上をプレイヤーが流される現象が起こる。何か良い打開策はないものでしょうか。【障害物のMCに記載】 onClipEvent (enterFrame) { PM=_root.main_mc.player_mc.player_mc_mc; PMM=_root.main_mc.player_mc.player_mc_mc.player_mc_mc; if(this.hitTest(PMM)){ _global.key_lis2();//getting key_code2 _global.edge = new Object; _global.edge = this.getBounds(PM._parent); ply=PM;MC1=this._parent;//obje MC2=_root.main_mc.player_mc;//ply //「obje」ムービークリップの座標をグローバル座標に変換 p = new Object();p.x = this._x;p.y = this._y; MC1.localToGlobal( p ); //変換した座標を「ply」と同じ座標系の座標に変換 MC2.globalToLocal( p ); var edge:Object , adjust:Number; edge = new Object;adjust = 2; edge = this.getBounds(_root.main_mc.player_mc); trace("edge="+edge.yMax); switch( _global.key_code2 ){case 'w': MC2.player_mc_mc._y = edge.yMax;break;case 's': MC2.player_mc_mc._y = edge.yMin;break;case 'a': MC2.player_mc_mc._x = edge.xMax;break;case 'd': MC2.player_mc_mc._x = edge.xMin;break;default:break; }}//end of hitTest}//end of onEnterFrame

    • ベストアンサー
    • Flash
  • Flash cs5 actionscript3.0

    アルファについての質問です ムービーシンボルで赤い丸を描き、それのアルファをactionscriptで30に指定したいです this.alpha=30; だと思っているんですがムービーシンボルの方にactionscriptを書いてもアルファは何の反応もなく100のままです 試しにシーンの方に書いてみるとアルファが0になってしまいステージに何も表れません 更に調べてみると this.alpha=56; にすると(つまり56以下にすると)アルファが0になり this.alpha=57; にすると(つまり57以上にすると)アルファが100になります ちょっとよくわからなくて困惑しています、何が原因なんでしょうか?

  • removeChildについて(AS3)

    ActionScript3のremoveChildについて、お教えください。 FlashCS5 windowsです。 どうぞ、よろしくお願いします。 順を追って、ご説明します。 ムービークリップ「テストA」「テストB」「テストC」の3つを作成します。 テストC→プロパティ→ActionScript用に書き出し→クラス で、TestCとクラス名を付けます。 ムービークリップ「テストA」のインスタンス名をtestA_mcとして、ステージに配置します。 testA_mc内のタイムラインに、 //---------- var testC_mc:TestC = new TestC(); addChild(testC_mc); //---------- と記述します。 ムービークリップ「テストB」を、ステージに配置します。 テストB内のタイムラインにremoveChildを書いて、 testA_mc内のtestC_mcをremoveChildしたいのですが、 どのように書けば、良いでしょうか、、、? ※不可能な場合は「不可能」と教えていただけますと、助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 外部ファイル読み込む用の ムービークリップのインスタンスを配置

    大変初歩的な質問で申し訳ございません。 アクションスクリプトの質問というよりかflashの操作の方になると思います。 Flashのおもしろさにハマり、初心者ながら勉強しているところで、 やはりActionScriptの知識もあるとまた幅が広がって楽しいだろうなと勉強し始めました。 それで、ActionScriptの書籍を注文したのが届くまで、「写真紹介ムービーを作りながら、ActionScriptの基礎を理解していこう」 という親切なサイト様を見つけまして、まずは全く分からないところがあっても、 調べながらでも最後まで作ってみれば少しは言語を知ることができるだろうと、一章、二章と進めていっておりました。 ttp://flash.frogstone.jp/as2_basic/index.html ALPHA FROGさま それで行き詰ってしまったのが ttp://flash.frogstone.jp/as2_basic/chapter4/1.html swfファイルの軽量化の「外部ファイル読み込む用の ムービークリップのインスタンスを配置」 「pict_mcと、thumbnail_mcには、外部ファイルを読み込むためのムービークリップのインスタンス(以下base_mc)を配置しています。 このbase_mcは外部ファイル読み込み専用のムービークリップで、中身は何もありません。」 の部分です。なかなか伝わりにくい部分もあって申し訳ないのですが、 アドバイスしていただける方がいましたらよろしくお願い致します。 現状ではシーン1にpict_mcとthumbnail_mcは配置されております。 それでどこを探してもbase_mcが見つからなく、どこにActionScriptを記述すればいいのだろうかと、分かりません。 探しても考えても分からず、こちらに質問させていただきました。 もしお分かりになる方がいましたらよろしくお願いしたします。 あと初心者がActionScriptに入りやすい書籍やサイト様がありましたら 教えていただけると嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • Key操作について

    http://www.kaitopurin.com/ 上記のサイトの様にキャラクターをキー操作によって動かしたいのですが、わかりません。 var thirom:MovieClip; var back:MovieClip; var speed:Number = 4; thirom.onEnterFrame = test; function test():Void { if(Key.isDown(Key.LEFT)) this._x -= speed; if(Key.isDown(Key.RIGHT)) this._x += speed; if(Key.isDown(Key.UP)) this._y -= speed; if(Key.isDown(Key.DOWN)) this._y += speed; } 途中までスクリプトを書いてみたんですが、ここから先がわかりません。例えば動かす対象のムービークリップ内にジャンプやしゃがむ動作を取り入れて、ラベルなどで移動する方法が一般的なんでしょうか? どうかご教授お願いします。 環境はMac,flash8です。

    • ベストアンサー
    • Flash
  • flash ウインドウの大きさを変更しても常に定位置

    falsh8でアクションスクリプトのバージョンは1でわからないことがあるので教えてください。 ステージ上に、 ムービークリップの インスタンス名 mc1 と ムービークリップの インスタンス名 mc2 と ムービークリップの インスタンス名 mc3 を配置しております。 ブラウザのウインドウの大きさを変更しても常に、 mc1 はウインドウの最上部に表示 mc2 はウインドウの中央部に表示 mc3 はウインドウの最下部に表示させたいのですが、どういうスクリプトを書けばよいでしょうか? 教えてください、よろしくお願いします。

  • テキストフィールドを半透明にするには

    FLASH 8で、 インスタンス名「mc」のムービークリップに テキストフィールドと適当な図形を絵画し、 ステージに貼り付け、フレームアクションに   _root.mc._alpha = 50; を追加したところ、絵画した図形は半透明になりますが、 テキストフィールドの文字は半透明になりません。 両方とも同じように半透明にしたいのですが、どうすればいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう