メインのタイムラインに、ムービークリップ(インスタンス名: 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;
}
また、スクリプトはコードを貼り付けるだけでなく、
どこに記述したとか、どんなインスタンスをどこに配置してあるかの情報も必要です。
第三者が再現しやすいような説明を心がけてください。
----------------
質問する際は、回答者に具体的な情報を与えてください。