キーボードを押した時のムービークリップの動きについて
- キーボードを押した時のムービークリップの動きについて
- キーボードの十字キーを押すことでキャラクターを移動させ、同時にムービークリップ内の任意のフレームに飛ばしてアニメーションを再生させたい。
- キャラクターを移動させると同時に、キャラクターのアニメーションを再生させる方法を教えてください。
- ベストアンサー
キーボードを押した時のムービークリップの動きについて
キーボードを押した時のムービークリップの動きについて 横スクロールの簡単なFlashゲームを作ろうとしています。 制作環境はWinXP,flashCS4,as3です。 今やりたい事は、キーボードの十字キーを押すことでキャラクターを移動させる、と同時に キャラクターのムービークリップ内に作ってある任意のフレームに飛ばして 歩いているアニメーションを再生させるということです。 「KeyboardEvent」クラスを使って、function に「インスタンス名.x +=3;」という 記述をすることでインスタンスの移動はできました。 ですが、キーボードを押し続けると、アニメーションの作ってあるフレームが 最初のフレームから動かないため、動きがつきません。 キャラクターを移動させると同時に、キャラクターのアニメーションを再生させて動きを つけるにはどういう記述の仕方をしたら良いでしょうか? アドバイスをいただけましたら幸いです。 下記URLが、現在つくっていてうまくいかないものの例です。 http://homepage2.nifty.com/meary/test.html 下記が記述スクリプトです -------------------------------------------------------- //キーダウンしたとき stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); //右矢印キーを押すと右に移動、hitoインスタンスはwalkフレームへ function handleKeyDown(e:KeyboardEvent) { if(e.keyCode == Keyboard.RIGHT) { hito.x += 3; hito.gotoAndPlay("walk"); } }
- nekome002
- お礼率100% (10/10)
- Flash
- 回答数1
- ありがとう数7
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ActionScript 記述の問題ではなくしくみの問題だと思います。 スクリプトはそのままで良いと言えばそのままで良いですよ。 ただ hito.gotoAndPlay("walk"); ではなく hito.gotoAndStop("walk"); の方が良いとは思います(と言ってもこれも一案です)。 Flash の話ではなく PCやOSとキーボードの仕様の話ですが 例えば「→」キーを押したとします。 「→」キーを チョン と1回押した場合 『「→」が押された』 という信号が起動中のアプリケーションなどに伝えられます。 ところが 「→」キーを押し続けると 『「→」が押された』 『〃』 『〃』 『〃』 … と パルス波 でアプリケーションなどに伝えられます。 (そういう仕様のPCが多いです。それも不規則です。) そうなると hito.gotoAndPlay("walk"); の場合 『「→」が押されました』 がパルスでやって来る度に 「walk」 フレーム に戻って再生開始されてしまいます。 つまり 「walk」フレームで止まる か 頻繁に戻ってギクシャク します。 そうなるならいっそのこと hito.gotoAndStop("walk"); で 「walk」 フレームでキッチリ止めておいて その 「walk」 フレーム に 「人が腕や脚などを動かすアニメ」 入りのムービークリップを置いた方が良いということです。 例えば 【下の図↓】 のように hito 内のタイムラインを作ったとします。 その場合のスクリプト例↓ ------------------ //hito内タイムラインの再生を停止 hito.stop(); //キーダウンしたとき stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); //キーダウンしたときに実行する関数を定義 function handleKeyDown(e:KeyboardEvent):void { if (e.keyCode == Keyboard.RIGHT) { //hito内タイムラインをR_walkフレームで停止 hito.gotoAndStop("R_walk"); //hito内の変数 move_x を 3 にする hito.move_x = 3; //毎フレーム実行 hito.addEventListener(Event.ENTER_FRAME, hitoMove); } else if (e.keyCode == Keyboard.LEFT) { hito.gotoAndStop("L_walk"); hito.move_x = -3; hito.addEventListener(Event.ENTER_FRAME, hitoMove); } } //hitoを移動させる関数を定義 function hitoMove(e:Event):void { //hito内の変数 move_x ずつ移動 e.target.x += e.target.move_x; } //キーアップしたとき stage.addEventListener(KeyboardEvent.KEY_UP, handleKeyUp); //キーアップしたときに実行する関数を定義 function handleKeyUp(e:KeyboardEvent):void { hito.gotoAndStop("No_walk"); hito.removeEventListener(Event.ENTER_FRAME, hitoMove); } ------------------ ※スクリプトは若干変更してますが それはどうでも良いことです。 本題はスクリプトではなく 「どのようなしくみを作ってどう動かすか」 の部分です。 説明のためのイメージ図↓
関連するQ&A
- AS3リンケージ設定したムービークリップの中で、フレーム移動がしたいです。
初心者です。 AS3で、 リンケージ設定したムービークリップを addChildで呼び出し、 呼び出したムービークリップの中の、 指定したフレームに移動するにはどうしたら宜しいでしょうか。 ステージに配置した場合、インスタンス名を付けて インスタンス名.gotoAndPlay("フレームラベル"); で移動しますが、 リンケージ設定したムービークリップの場合はインスタンス名の代わりに リンケージ名で呼び出せないのですか。
- ベストアンサー
- Flash
- ムービークリップ内のボタン
フラッシュ初心者です。 アクションスクリプトがうまく動かず困っています。 シーン1にムービークリップ1(インスタンス名:mc1)とムービークリップ2(インスタンス名:mc2)が置いてあります。 mc2の中にはボタンAを配置してあり、ボタンAをクリックすると、mc1のフレームラベル(B)に飛ぶような制御をしたいです。 ボタンAに記述してあるスクリプトは以下です。 on (release) { this._parent.mc1.gotoAndplay("B"); } しかしクリックしても全く動きません。 絶対パスで指定してもダメでした。 ちなみに、ためしに、mc1ではなく、シーン1上のフレームラベルに 飛ばすように記述したら普通に動きました。。 何か記述間違いがあるのでしょうか? 分かる方がいましたら教えてください。 お願いします。
- 締切済み
- Flash
- ムービークリップの制御について
スクリプト初心者です。 ムービークリップの制御について、まったくわからず困っています (1)シーン1、5フレーム目にムービークリップ、インスタンス名a_mc配置 (2)a_mcの中にb_mc配置。b_mcをクリックすると→a_mcの1フレーム目に移動。もう1度b_mcクリックすると→a_mcの10フレーム目に移動。もう1度b_mcをクリックすると→a_mcの1フレーム目に移動・・・と、 b_mcをクリックするごとにa_mcの1フレーム目、10フレーム目、1フレーム目・・繰り返す制御をしたいのですが。。 どなたか分かる方いましたら 教えてください!!
- 締切済み
- Flash
- ムービークリップ内の変数について
ムービークリップ内で扱った変数をルートで取り扱う時は _root.ムービークリップインスタンス名.変数名 このような形で取り扱うのでしょうか?。 また、ルートの1フレーム目のフレームアクションで変数を定義していた場合は、単に変数名だけで取り扱えるのでしょうか?。 宜しくお願い致します。
- ベストアンサー
- Flash
- 日付と時刻の取得、ムービークリップの読み込みについて
あるFLASHファイル(例えば、hizuketozikoku.swf)を用意します。(?)の部分にどのような記述をすれば、(?)のフレームアクションによってローカルマシンの常に新しい日付と時刻(*月*日*曜日*時*分*秒)を取得し、また取得した日付と時刻に対応するライブラリのムービークリップを指定する場所に読み込ませる(例えば、1月1日日曜日1時1分1秒の場合は、gatuに1gatu、nitiに1niti、youbiにnitiyoubi、ziに1zi、hunに1hun、byouに1byouを読み込ませる)ことができますか。 使用ソフトは、FLASHMXです。よろしくお願いします。 ※ hizuketozikoku.swf シーン1 レイヤー7 フレーム1 インスタンス名:byou レイヤー6 フレーム1 インスタンス名:hun レイヤー5 フレーム1 インスタンス名:zi レイヤー4 フレーム1 インスタンス名:youbi レイヤー3 フレーム1 インスタンス名:niti レイヤー2 フレーム1 インスタンス名:gatu レイヤー1 フレーム1 フレームアクション(?) ライブラリ レイヤー1からレイヤー7のムービークリップ(例えば、シンボル1からシンボル7) 1月から12月のムービークリップ(例えば、1gatuから12gatu) 1日から31日のムービークリップ(例えば、1nitiから31niti) 日曜日から月曜日のムービークリップ(例えば、nitiyoubiからgetuyoubi) 1時から24時のムービークリップ(例えば、1ziから24zi) 1分から60分のムービークリップ(例えば、1hunから60hun) 1秒から60秒のムービークリップ(例えば、1byouから60byou)
- ベストアンサー
- Flash
- ムービークリップ
ムービークリップをクリックすることによって、 他のムービークリップの位置を変更できますか? もしくは他のムービークリップの複製はできますか? 今はクリックしたムービークリップ(自分自身)の 複製は出来ています。 on (release) { this.duplicateMovieClip("Photo_big", 0); _root.Photo_big._xscale = 80; _root.Photo_big._yscale = 80; _root.Photo_big._x = 350; _root.Photo_big._y = 200; } ちなみに移動したいムービークリップのインスタンス名は text1です。
- ベストアンサー
- Flash
- マウスオーバーで全ムービークリップ停止
上手く説明出来ないのですが、 ムービークリップのメニューを作ろうとしています。 マウスオーバーで全部のムービーが止まる様にしたくて、 一つのムービークリップに全部のムービークリップのメニューをまとめ、選択すると ーーーーーーーーーーーーーーーーここから シーン=シーン1,レイヤー=menu,フレーム マウスイベントはボタンインスタンスでのみ使用できます。 シーン=シーン1,レイヤー=menu,フレーム マウスイベントはボタンインスタンスでのみ使用できます。 ーーーーーーーーーーーーーーーーここまで とエラーになってしまいます。 だからといってメニュー一つ一つに on(rollOver){ stop(); } on(rollOver){ play(); } を記述しても、マウスオーバーしているメニューだけが止まって、 他のメニューは動いてぐちゃぐちゃになってしまいます。 ひとつのメニューをマウスオーバーするだけで他全部のムービークリップも停止、 マウスをはずすと同じ所から動きだす事って出来ますか? いい方法がありましたら教えて下さい。
- 締切済み
- Flash
- ムービークリップ再生順序 制御について
はじめて質問します。Flash初心者ゆえつたない説明ですいませんが、よろしくお願いします! Flash:ActionScript2.0 [現状] メインフレームにABCというムービークリップを配置しています。 それぞれ「mc1」「mc2」「mc3」というインスタンス名がついています。 各ムービークリップにはそれぞれ動きが設定しており、”moving”というフレームラベルをつけています。 [どう動作してほしいか] まずAのムービークリップが再生。Aのムービークリップ再生終了。 ↓ Bのムービークリップ再生開始。Bのムービークリップ再生終了。 ↓ Cのムービークリップ再生開始。Cのムービークリップ再生終了。 ↓ Aに戻る。 上記の動きをタイムラインを利用するのではなく、メインフレームに1つactionScriptを書くことで動作させるにはどうしたらいいでしょうか? ちなみに今は以下のように記述しており、実行すると3つのムービークリップが全て同時に動いてしまいます。 var list:Array = new Array(); for(var i=1; i < 4; i++) { var mcname = "mc" + i ; list[i] = eval(mcname); list[i].gotoAndPlay("moving"); } よろしくお願いいたします。
- ベストアンサー
- Flash
- Flash8のムービークリップ内で不具合があります。
下記について、わかるかた教えてください! ムービークリップ内で編集を行うときに、シンボル化したものを 入れると、なぜか同じものが並んで2つで入ってきてしまいます。 私が行った操作 ・オブジェクトAをムービークリップにシンボル化した。 ・インスタンスAをダブルクリックして中に入り、インスタンスAのアニメーション編集を行った(ちなみにこのインスタンスはある理由があって分解して編集してます。)。 ・同じ階層に別のインスタンスを追加したかったので、シンボル化したオブジェクトをライブラリからドラッグ。 ---ここでなぜか上記のとおり、新たに加わったインスタンスが 二つになるのです。いくつかシンボル化したオブジェクトがあるのですが、どれを試しても二つになります。シンボルの種類はムービークリップでもグラフィックでもボタンでも同様の現象が起こります。 この二つのインスタンスは位置は離れているのですが、グループ化されているように一緒になってます。 本当は画像が添付できればわかりやすいのだと思いますが、 上記の説明でわかりますでしょうか。 困っております。よろしくお願いします。
- ベストアンサー
- ホームページ作成ソフト
- AS2.0 ボタン化したムービークリップを途中で変更
AS2.0で困っています。 ●現在、ムービークリップ「color1」内のフレームに【_up】【_over】【_down】とラベルを作って、ボタンにしています。 ムービークリップ「color1」自体には、[on(release){}]と記述しています。 (ボタンとして機能しています。) そこまではよかったのですが、 ムービークリップ「color1」の【_down】ラベルのあとに【playing】というフレームラベルを作って、【playing】ラベルのアニメーションを再生したいと思ったら、できませんでした。 ○【_down】のスクリプトレイヤーに、gotoAndPlay("playing"); と記述しましたが、全く動きません。 初歩的な質問で大変申し訳ないのですが、 どのような構造にすれば、【_down】から【playing】レイヤーを再生できますか? よろしくお願いいたします。
- 締切済み
- Flash
お礼
キーボードのお話から、スクリプトの方はコメントも細かく交えて説明くださったので、 とても理解しやすかったです。ご説明の丁寧さが、心から有難いです。 フレームが移動しないことを解消するためには、中にムービークリップを入れ子にして あげればよかったんですね。なるほど! 更に「gotoAndStop」のアドバイスも勉強になりました。 今までは、StopもPlayもどっちでもいいか、という認識で両方を乱用していたので 自分の適当さに反省です…;その時々に合わせた綺麗な記述の仕方を心がけたいです。 そしてインスタンスを移動させる記述ですが、 「hito.move_x = 3;」のようにインスタンスに直接変数を設定して、 「e.target.x += e.target.move_x;」というようにtargetを使った変数の記述の仕方は まったく知識になかったやり方なので、大変勉強になりました。 恥ずかしながら「target」と「currentTarget」の違いも分からないレベルだったんです。 まだまだ知識が浅すぎて、おかしなことを言っていた部分もあったかもしれませんが それにも関わらず、丁寧なご回答ありがとうございました!