返回列表 回复 发帖

请教 关于键盘捕获

//
//as 3.0
import flash.events.KeyboardEvent
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
function keyDownHandler(evt:KeyboardEvent):void
{
if(evt.keyCode == 38) char.y-=2; // up
if(evt.keyCode == 40) char.y+=2; // down
if(evt.keyCode == 37) char.x-=2; // left
if(evt.keyCode == 39) char.x+=2; // right
}

//as 2.0
onEnterFrame = function()
{
if (Key.isDown(Key.RIGHT)) char._x+=2;
if (Key.isDown(Key.LEFT)) char._x-=2;
if (Key.isDown(Key.UP)) char._y-=2;
if (Key.isDown(Key.DOWN)) char._y+=2;

}

as3那段代码 假设我按着下方向键然后再按上方向键 MC的运动过程有明显的停顿(as2那段不会有这种情况)
如果同时按下两个方向键(不是上边的代码 是照Essential as3里写的) 斜着运动的话效果更不理想(as2也不会 因为它在onEnterFrame里)

请问as3如何达到as2的那样效果?谢谢 赶着做东西 快抓狂了

[ 本帖最后由 cnchenrui 于 2007-11-13 20:45 编辑 ]
as2用enterframe,as3不照样可以用enterframe么?用keydown是有问题的

[ 本帖最后由 andy-tang 于 2007-11-13 21:03 编辑 ]
AS3及Game高级群:48089045欢迎加入!
?请问怎么写 能给个例子吗 谢谢
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
function keyDownHandler(evt:KeyboardEvent):void
{
if(evt.keyCode == 38) ychange=-2; // up
if(evt.keyCode == 40) ychange=2; // down
if(evt.keyCode == 37) xchange=-2; // left
if(evt.keyCode == 39) xchange=2; // right
}
stage.addEventListener(Event.ENTER_FRAME, enterframeHandler);
function enterframeHandler(e:Event){
char.x+=xchange;
char.y+=ychange;
}

以上代码还差一个归零的过程,但能说明我的意思

[ 本帖最后由 andy-tang 于 2007-11-14 09:38 编辑 ]
AS3及Game高级群:48089045欢迎加入!
谢谢!

[ 本帖最后由 cnchenrui 于 2007-11-13 23:37 编辑 ]
我给你一个KEY类.

package {
public class KEY{
  private static var keyObj:KEY = null;
  private static var keys:Object;
  
  public static function init( stage ):void {
   if(keyObj == null){
    keys = {};
    stage.addEventListener("keyDown", KEY.keyDownHandler);
    stage.addEventListener("keyUp", KEY.keyUpHandler);
   }
  }
  
  public static function isDown( keyCode ):Boolean {
   return keys[keyCode];
  }
  
  private static function keyDownHandler( e ):void {
   keys[e.keyCode] = true;
  }
  
  private static function keyUpHandler( e ):void {
   delete keys[e.keyCode];
  }
}
}

调用方法:

function enterFrameHandler(e){
        if(KEY.isDown(38)) trace("up.");
        if(KEY.isDown(40)) trace("down.");
        if(KEY.isDown(37)) trace("left.");
        if(KEY.isDown(39)) trace("right.");
}

KEY.init(stage);
stage.addEventListener("enterFrame", enterFrameHandler);

[ 本帖最后由 oooooobe 于 2007-11-15 13:57 编辑 ]
---oo------------------------------------------------------
snowman~
很不错~
喜帖街my blog
public static function isDown( keyCode ):Boolean {
   return (keys[keyCode]==true);
  }
---oo------------------------------------------------------
public static function isDown( keyCode ):Boolean {
   return !!keys[keyCode];
  }
喜帖街my blog
似乎无法捕获到退格键:Q
返回列表