トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     fpsに同期したmcの移動
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
mayor
Åê¹ÆNo.47879
投稿日時: 2011-8-12 11:22
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
Re: fpsに同期したmcの移動
メインのタイムラインに、ムービークリップ(インスタンス名: player_mc)を配置。
以下のスクリプトは、ステージ第1フレームに記述します。
(メインタイムラインは1フレームしかないものとします)

[case1]
var move:Number = 1;

player_mc.addEventListener(Event.ENTER_FRAME, enterframe);
function enterframe(e:Event):void {
	stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeydown);
	function onKeydown(e:KeyboardEvent):void {
		trace("onKeydown");
		if (e.keyCode == Keyboard.RIGHT) {
			player_mc.x +=  move;
		}
		if (e.keyCode == Keyboard.LEFT) {
			player_mc.x -=  move;
		}
		if (e.keyCode == Keyboard.UP) {
			player_mc.y -=  move;
		}
		if (e.keyCode == Keyboard.DOWN) {
			player_mc.y +=  move;
		}
		e.updateAfterEvent();
	}
}
trace結果を見ると、必要以上に、onKeydownが呼び出されているように思います。
enterframeのたびに、関数を何度も定義する必要はないように思います。

[case2]
var move:Number = 1;

player_mc.addEventListener(Event.ENTER_FRAME, enterframe);
function enterframe(e:Event):void {
	stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeydown);
}
function onKeydown(e:KeyboardEvent):void {
	trace("onKeydown");
	if (e.keyCode == Keyboard.RIGHT) {
		player_mc.x +=  move;
	}
	if (e.keyCode == Keyboard.LEFT) {
		player_mc.x -=  move;
	}
	if (e.keyCode == Keyboard.UP) {
		player_mc.y -=  move;
	}
	if (e.keyCode == Keyboard.DOWN) {
		player_mc.y +=  move;
	}
	e.updateAfterEvent();
}
で、行けるはずです。
ただし、fpsに合わせる話は別です。

onKeydownは、キーボードのイベントで呼び出されるわけですから、fpsに関係なく動くはずです。

fpsに合わせたいということであれば、
あくまでも、enterframeで、キーが押されているかどうかをチェックする
必要があるのではないでしょうか?

[case3]
var move:Number = 1;
var keyCode:uint = 0;
//チェックしたいキーコード(37, 38, 39, 40)以外の値を指定

player_mc.addEventListener(Event.ENTER_FRAME, enterframe);
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeydown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyup);
function enterframe(e:Event):void {
	if (keyCode == Keyboard.RIGHT) {
		player_mc.x +=  move;
	}
	if (keyCode == Keyboard.LEFT) {
		player_mc.x -=  move;
	}
	if (keyCode == Keyboard.UP) {
		player_mc.y -=  move;
	}
	if (keyCode == Keyboard.DOWN) {
		player_mc.y +=  move;
	}
	//e.updateAfterEvent();
}
function onKeydown(e:KeyboardEvent):void {
	keyCode = e.keyCode;
	trace(keyCode);
}
function onKeyup(e:KeyboardEvent):void {
	keyCode = 0;
}


また、スクリプトはコードを貼り付けるだけでなく、
どこに記述したとか、どんなインスタンスをどこに配置してあるかの情報も必要です。
第三者が再現しやすいような説明を心がけてください。


----------------
質問する際は、回答者に具体的な情報を与えてください。

フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   fpsに同期したmcの移動 ibm-old 2011-8-12 0:21
   » Re: fpsに同期したmcの移動 mayor 2011-8-12 11:22
       Re: fpsに同期したmcの移動 ibm-old 2011-8-12 21:22
         Re: fpsに同期したmcの移動 Fumio 2011-8-12 22:17
           Re: fpsに同期したmcの移動 Fumio 2011-8-12 22:31
             Re: fpsに同期したmcの移動 ibm-old 2011-8-13 3:17

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops