キーボードを押した時のムービークリップの動きについて
横スクロールの簡単な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");
}
}
No.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);
}
------------------
※スクリプトは若干変更してますが
それはどうでも良いことです。
本題はスクリプトではなく
「どのようなしくみを作ってどう動かすか」
の部分です。
説明のためのイメージ図↓
キーボードのお話から、スクリプトの方はコメントも細かく交えて説明くださったので、
とても理解しやすかったです。ご説明の丁寧さが、心から有難いです。
フレームが移動しないことを解消するためには、中にムービークリップを入れ子にして
あげればよかったんですね。なるほど!
更に「gotoAndStop」のアドバイスも勉強になりました。
今までは、StopもPlayもどっちでもいいか、という認識で両方を乱用していたので
自分の適当さに反省です…;その時々に合わせた綺麗な記述の仕方を心がけたいです。
そしてインスタンスを移動させる記述ですが、
「hito.move_x = 3;」のようにインスタンスに直接変数を設定して、
「e.target.x += e.target.move_x;」というようにtargetを使った変数の記述の仕方は
まったく知識になかったやり方なので、大変勉強になりました。
恥ずかしながら「target」と「currentTarget」の違いも分からないレベルだったんです。
まだまだ知識が浅すぎて、おかしなことを言っていた部分もあったかもしれませんが
それにも関わらず、丁寧なご回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript スマホ上で、左右スワイプで次のページに移動させたいです 2 2022/11/11 17:04
- マウス・キーボード キーボードが動作しなくなりました。 4 2022/04/29 09:49
- マウス・キーボード キーボード設定で困っています。長文です。 2 2022/12/10 12:44
- マウス・キーボード scroll Lockキーを解除したけれど。 1 2022/09/16 09:23
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- その他(プログラミング・Web制作) iMacのシェル内カーソル移動 1 2022/06/15 17:27
- マウス・キーボード キーボードのCaps Lockキーと変換キーの挙動がおかしくなりました。 4 2022/09/04 22:44
- マウス・キーボード テンキーの設定がおかしくなっています。 5 2023/08/09 15:35
- その他(IT・Webサービス) AutoHotKeyで、キーボードにマウスの右クリックを割り当てられる? 1 2023/03/30 00:23
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲオでカードを作るのは何歳か...
-
フラッシュゲームアーカイブ2
-
レジリエンス 変換キーが作動し...
-
この曲はなんでしょう?
-
arduino プログラムについて
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
-
Windows10重い
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
iPhoneです。 Adobeフラッシュ...
-
Adobe(マクロメディア)のFLAS...
-
ヘッダーデザインをするさい形...
-
更新されて起きた問題
-
googlechromeでadobeflashplayer
-
Flash playerを有効にするには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
Flashでのゲーム用アナログ時計...
-
ムービーの早送りと巻き戻しが...
-
ボタンで移動する前に、特定のM...
-
Error#1009 時計のシーン移動ボ...
-
Flash Professional CS5
-
ループ再生のflashをタイムライ...
-
画像がランダムに表示されるFLA...
-
ActionScriptの基本的な部分で...
-
キーボードを押した時のムービ...
-
【ActionScript】命令文を再実...
-
FLASH lite1.1での質問というか...
-
画像をランダムに表示させたい
-
深い階層でのムービークリップ...
-
Flash lite1.0の計算クイズ
-
プルダウンメニューとフェード...
-
loadMovieで読み込んだswf
-
外部画像を読み込み、ボタンで...
-
Flashで右クリックメニューにつ...
-
フレーム内に移動したい
おすすめ情報