• 締切済み

Actionscriptのキー操作について

お久しぶりです、tsukiです。今度はキー操作について悩みを抱えてしまいました。 使っているFlashはMX2004です。 問題はSPACEキーを押しつづけた際、横からキャプチャー表示が出てくるようにしたいのですが、押し続けているとキャプチャーバーが前に進んでいってしまう現象がおきています。 また、キーを離した際にキャプチャーバーが引っ込むようにしたいのですが、どのようなAction scriptを入力すればいいのでしょうか。 いい案を教えてください、お願いします。

みんなの回答

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

キャプチャー表示 や キャプチャーバー と書かれましても それが何なのかわかりません。 おそらく「自分専用用語」ではないでしょうか? また「前に進んでいってしまう現象」もどういう状況を表しているのか, またなぜその状況が起こるのかもわかりません。 全く何のことかわかりませんが,  SPACEキーを押しつづけた際  ムービークリップがステージ左から右方向に出てくる。  (ただし出てくるにも限度をもうける)  そしてSPACEキーを放した際  ムービークリップがステージの左に返る。 ということでよろしいでしょうか? 簡単にするには次のようにすれば良いと思います。 ステージ上には 「capture_mc」 というインスタンス名を付けたムービークリップ(MC)があるものとします。 その 「capture_mc」 が存在するタイムライン(_root でしたら _root)に書くスクリプトです。 /*======================================= MC「capture_mc」がステージ上にあるものとする =======================================*/ // --- 初期設定部分 -------------------- // 動く左端の座標を設定(※変える) var left_crd:Number = 100; // 動く右端の座標を設定(※変える) var right_crd:Number = 300; // 動くスピードの設定(※変える) var speed:Number = 2/10; // ターゲット座標の初期値(左端座標に一致させる) var target_crd:Number = left_crd; // 「capture_mc」 を初期位置(左端座標)に移動 this.capture_mc._x = target_crd; // --- キーの監視に関する部分 ------------- // キー監視用オブジェクト keyListener を作成 var keyListener:Object = new Object(); // キーダウン時の動作定義 keyListener.onKeyDown = function():Void { // もしスペースキーが押されたら if (Key.getCode() == Key.SPACE) { // ターゲット座標を右端座標にする target_crd = right_crd; } }; // キーアップ時の動作定義 keyListener.onKeyUp = function() { // ターゲット座標を左端座標にする target_crd = left_crd; }; // keyListener を Keyクラスのリスナーとして登録 Key.addListener(keyListener); // --- 「capture_mc」を動かすエンジン部分 ----- // 1フレーム進む時間毎に随時実行 this.capture_mc.onEnterFrame = function():Void { // このMCをターゲット座標にspeedずつ近付ける this._x += (target_crd-this._x)*speed; }; /*======================================*/ // 動く左端の座標を設定(※変える) var left_crd:Number = 100; // 動く右端の座標を設定(※変える) var right_crd:Number = 300; についてです。 「capture_mc」 の基準点の位置や大きさにもよるので何とも言えませんが 100 や 300 は心もち大きめの数値を入れています。 おそらく,左の座標にある状態でも,右座標にある状態でも, どっちともステージ上に丸見え状態だと思います。 この辺の状態から数値を変えていって(下げていって)調節すると感覚がつかみやすいと思ったので大きめの数値にしています。 なお, あくまでもこれはほんの一例に過ぎません。 このような狭いもの1つに捕らわれていては何の進歩もありませんし またFlashの有効活用もできません。 「モーショントゥイーンで何かが左から右に出る」 というアニメーションをムービークリップの中に作成しておいて, SPACEキーを押しつづけた際にそのムービークリップを play() させて, SPACEキーを放した際にそのムービークリップを 逆再生 させても良いです。 「FN0303003 - ロールアウトで逆戻りするアニメーション」 http://www.fumiononaka.com/TechNotes/Flash/FN0303003.html また, モーショントゥイーンをスクリプト化した Tween クラス も MX2004で使用できます。 その他の方法や,その組み合わせやバリエーションまで考えると無数です。 方法は無数ですから, 「押し続けているとキャプチャーバーが前に進んでいってしまう現象」 と書かれましてもどういう状況でそうなるのかかがわからないのです。 どうしたらそうなったのかの説明が不足しています。 したがって,まともに回答するなら,  「そういう現象が起きる仕組みを作ったからそうなるだけ」  「そういう現象が起きないように作れば良い」 としか本来は言えないのです。

tsuki0102
質問者

お礼

お久しぶりです。そしてこの回のご返答ありがとうございます。 おかげさまで一つ解決策が見つかった気がします。 言葉が曖昧すぎてしまい回答を息詰らせてしまうような文章ですみませんでした。BlurFiltanさんの回答は本当に適切で助かっています。 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キーを押しても動かないのですが、これは何が原因なのでしょうか?

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

関連するQ&A