• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:キー操作その2の質問です)

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

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

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

  • ベストアンサー
  • 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