打印

[AS3] flash能控制击键的频率吗?

比如现在我做了一个会根据方向键移动的小人,用了onkeydown,
但是发现如果在window控制面板改动了击键的频率,小人的移动速度就会不一样。
我希望小人的移动速度不会随着击键的频率的变化而变化。

有甚么好的解决方法?
没有模拟不了的效果,只有模拟不了的创作。
《死兔D.R.》的群:63094295
Keydown的时候设置  移动状态为 true
KeyUp的时候设置  移动状态为false
这样人物的移动指判断 移动状态为true 就移动,这样就不会受按键频率影响了
速度为什么会不一样呢
复制内容到剪贴板
代码:
var speed:Number = 5;
var range:Number = 5;
var tx:Number = 0;
var ty:Number = 0;
var vx:Number = 0;
var vy:Number = 0;
var boy:Sprite = new Sprite();
addChild(boy);
boy.graphics.lineStyle(1);
boy.graphics.drawCircle(10,-40 ,10);
boy.graphics.moveTo(10,-30);
boy.graphics.lineTo(10,-10);
boy.graphics.lineTo(0,0);
boy.graphics.moveTo(10,-10);
boy.graphics.lineTo(20,0);
boy.graphics.moveTo(10,-25);
boy.graphics.lineTo(2,-20);
boy.graphics.moveTo(10,-25);
boy.graphics.lineTo(18,-20);
boy.x = stage.stageWidth/2;
boy.y = stage.stageHeight/2
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
function mouseDownHandler(event:Event):void {
    tx = mouseX;
    ty = mouseY;
    var angel:Number = Math.atan2(mouseY - boy.y, mouseX - boy.x);
    vx = Math.cos(angel) * speed;
    vy = Math.sin(angel) * speed;
}
function enterFrameHandler(event:Event):void {
    var dy = ty - boy.y;
    var dx = tx - boy.x;
    if (Math.sqrt(dy*dy + dx*dx) >= range) {
        boy.x += vx;
        boy.y += vy;
    }else {
        boy.x = tx;
        boy.y = ty;
    }
}
裸奔也是一种美
楼主不应该用KeyDown作为驱动事件,以onEnterFrame或者 Timer作为驱动事件比较好。
http://www.flash023.cn 终极讨厌

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
嗯,我试试onEnterFrame,可能OK吧。。。。。。
没有模拟不了的效果,只有模拟不了的创作。
《死兔D.R.》的群:63094295

TOP

还是建议用 KeyDown, 这样可以最快速度响应用户操作, 当然此时应该把键值等信息先存起来, 而刷新屏幕换成 onEnterFrame 就好了

TOP

准确的说KeyDown,KeyUp这种只会瞬间执行一次的事件只适合做触发实践,对于出发后的连续动作建议使用onEnterFrame,Timer,setInterval,MOUSE_MOVE能具有循环执行特性的事件去执行

PS:MOUSE_MOVE不适合在这用,我只是随便一提,希望没人抬扛- -

TOP