主要下跌滞后鼠标在Flash中使用FF

我试图提高Flash游戏我们做的性能。 它是一个游戏非常类似于GTA但闪光...这就是为什么它的重要的鼠标和键盘可以在同一时间使用...

但在Firefox(与过去的Flash版本,而最后的Firefox版本)在某些情况下,如果你按一个键(WASD),你移动鼠标,鼠标事件键盘事件之后dispached,当你松开键盘.. ..

我发现,很多人都具有自己的游戏同样的问题,但他们想不出解决它!

一些帮助PLZ!

编辑:

完整的代码是非常大的,我colund't查找部分是问题。 但我没有这个类来进行测试(这个类是与游戏乳宁:

public function MouseAndKeyboardTest() { var stage : Stage = FW.Stage_; stage.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove); stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown); stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp); } private function KeyUp(e : KeyboardEvent) { trace("Key Up : " + e.keyCode); } private function KeyDown(e : KeyboardEvent) { trace("Key Down : " + e.keyCode); } private function MouseMove(e : MouseEvent) { trace("Mouse Move : [" + e.stageX + ", " + e.stageY + "]" ); }

这是跟踪结果,当你有钥匙下来,鼠标的同时移动,鼠标部分之间移动的和大量的所有键后均达到:

Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 87 Key Down : 65 Key Down : 65 Key Down : 68 Key Up : 65 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 65 Key Up : 68 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 65 Key Down : 68 Key Up : 65 Mouse Move : [353.65, 137.55] Mouse Move : [354.8, 138.4] Mouse Move : [354.8, 137.4] Mouse Move : [362.8, 135.4] Mouse Move : [372.9, 135.25] Key Down : 68 Mouse Move : [449.9, 139.25] Mouse Move : [462.85, 139.35] Key Down : 68 Key Down : 68 Mouse Move : [479.85, 139.35] Mouse Move : [477.85, 139.35] Mouse Move : [469.85, 141.35] Mouse Move : [458.95, 145.2] Key Down : 68 Mouse Move : [445.95, 148.2] Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Key Down : 68 Mouse Move : [330.65, 171.55] Key Down : 68 Key Up : 87 Key Up : 68 Mouse Move : [210, 196.2] Mouse Move : [207, 198.2] Mouse Move : [246.2, 190] Mouse Move : [354.2, 180] Mouse Move : [431.15, 173] Mouse Move : [323.15, 197] Mouse Move : [181.15, 220] Mouse Move : [80.15, 231] Mouse Move : [267.15, 203] Mouse Move : [186.15, 225] Mouse Move : [20.15, 217] Mouse Move : [161.15, 217] Mouse Move : [132.15, 223]

--------------解决方案-------------

存在与在Firefox 3.6.4和上述插件容器的问题。 通过改变:

'dom.ipc.plugins.enabled.npswf32.dll' to false

在有关:从FF配置它解决witht鼠标的问题和键盘在Firefox。

但我还是得到了,我不能在所有的Firefoxs从游戏用户更改的问题。 重要的问题是,用户没有滞后。

这里的东西来看看:

var keys:Object = {};
var keyTimer:Timer = new Timer(1000);

keyTimer.addEventListener(TimerEvent.TIMER, keyTimed, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownManager, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpManager, false, 0, true);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoved, false, 0, true);

function keyTimed(evt:TimerEvent):void
{
keyTimer.stop();
keyTimer.reset();
if(stage.hasEventListener(KeyboardEvent.KEY_DOWN))
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownManager);
}
}

function keyDownManager(evt:KeyboardEvent):void
{
keyTimer.start();
switch(evt.keyCode)
{
case 37:
keys['left'] = true;
break;
case 38:
keys['up'] = true;
break;
case 39:
keys['right'] = true;
break;
case 40:
keys['down'] = true;
break;
}
trace("key is down");
}

function keyUpManager(evt:KeyboardEvent):void
{
keyTimer.stop();
keyTimer.reset();
switch(evt.keyCode)
{
case 37:
keys['left'] = false;
break;
case 38:
keys['up'] = false;
break;
case 39:
keys['right'] = false;
break;
case 40:
keys['down'] = false;
break;
}
trace("key is up");
if(!stage.hasEventListener(KeyboardEvent.KEY_DOWN))
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownManager, false, 0, true);
}
}

function mouseMoved(evt:MouseEvent):void
{
trace("mouse moved");
}

我指定的边界1000毫秒每当一个键被按下,将运行一个计时器。 这将使你有多个按键的工作,但一旦按键的任意组合已连续举办下来会删除监听1000毫秒。 一旦任何按键被释放,听者重新添加和定时器复位。 这是什么让你做的是控制去除听者如果有人是抱着键的组合为一组(长期在这种情况下)的时间。

此外,我实现了一个对象来存储关键布尔所以,这些属性可以内部利用ENTER_FRAME或运动类似的东西。

让我知道,如果这有助于在所有。

我运行Firefox 3.6.14,我不能复制你的错误。 但是,我创建了一个小班,这样你就可以测试它自己。 它的工作原理,只要你想? 要使用它,创建一个新的项目,使用这个类为主。 你应该有一个对象,你可以用WASD和目标移动,你用鼠标移动。 可以在任何方向移动,并在同一时间鼠标。 请发表你的结果。

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
public class Main extends Sprite {
private var keys:Array = new Array();
private var hero:Sprite = new Sprite();
private var aim:Sprite = new Sprite();
public function Main():void {
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(Event.ENTER_FRAME, update);

// create the objects for testing
hero.graphics.beginFill(0xff0000);
hero.graphics.drawRect(0, 0, 50, 50);
hero.graphics.endFill();
hero.x = stage.stageWidth / 2;
hero.y = stage.stageHeight / 2;
stage.addChild(hero);

aim.graphics.lineStyle(1, 0);
aim.graphics.drawCircle(0, 0, 10);
aim.graphics.moveTo(0, -10);
aim.graphics.lineTo(0, 10);
aim.graphics.moveTo(-10, 0);
aim.graphics.lineTo(10, 0);
aim.x = hero.x + hero.width / 2;
aim.y = hero.y + hero.height / 2;
stage.addChild(aim);
}

private function update(e:Event):void {
if (keys[65]) hero.x -= 5;
if (keys[68]) hero.x += 5;
if (keys[87]) hero.y -= 5;
if (keys[83]) hero.y += 5;
}

private function onMouseMove(e:MouseEvent):void {
aim.x = e.stageX;
aim.y = e.stageY;
}
private function onKeyDown(e:KeyboardEvent):void {
keys[e.keyCode] = true;
}
private function onKeyUp(e:KeyboardEvent):void {
keys[e.keyCode] = false;
}
}

}

当你的说'W'可以为您节省了事实变量key down事件,说布尔wKeyIsDown。 然后取消该事件停止recieving事件。 然后,当你wKeyIsDown变量W高达更改为false,并再次取消事件。 你不经常需要知道发生。

这可能是有益的,看看你是如何使用的事件。 你的运动逻辑可能存在缺陷。

尝试使用弱引用。

addEventListener(KeyboardEvent.MOUSE_MOVE, MouseMove, false, 0, true):
addEventListener(KeyboardEvent.KEY_UP, KeyUp, false, 0, true):
addEventListener(KeyboardEvent.KEY_DOWN, KeyDown, false, 0, true):

注意最后一个参数,对于弱引用,必须设置为true。

PS:BIENVENIDO一个计算器;)

分类: 时间:2012-09-10 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.326 (s). 10 q(s)