Когда кто-то щелкает в моей активности вспышки, иногда он вызывает много вычислений. Если пользователь снова нажимает (например, двойной щелчок), это событие ставится в очередь и отправляется после завершения тяжелых вычислений. Если я много раз щелкнул, проблема просто усугубилась - если щелкнуть достаточно быстро, сложное вычисление в очереди закончится до десяти секунд позже, при каждом щелчке мыши медленно вытечет следующую задачу.получение точного времени для каждого события mousePressed
У меня есть два вопроса.
Во-первых: как я могу получить точное время, когда произошел щелчок? В приведенном ниже примере я получаю отправку быстрых кликов после того, как клик был взломан (sp?).
Во-вторых: что такое хороший шаблон дизайна для сбора каждого щелчка? С верхней части моей головы, я полагаю, я должен
отложить любое вычисление до следующего события EnterFrame, но если кто-то щелкает в процессе вычислений на события EnterFrame ... ну тогда, у меня такая же проблема !
Я полагаю, что разрушение тяжелых вычислений в psuedo-thread - это еще одно решение, но в зависимости от скорости процессора трудно найти детализацию.
Добавление флага после первого щелчка, чтобы игнорировать следующие клики ... но это решение не позволяет мне отслеживать, что пользователь пытался сделать, когда он был заблокирован. Решение моего первого вопроса - вот что мне нужно здесь.
Благодарим за любые советы. Вот некоторые примеры код для демонстрации вопроса:
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
public class clicky extends Sprite
{
private static var _lastTraceTime:Number = new Date().getTime();
private var _sp:Sprite;
private var _state1:Boolean;
public function clicky():void
{ super();
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
_state1 = true;
_sp = new Sprite();
addChild(_sp);
_sp.graphics.beginFill(0xFF00AA, 1);
_sp.graphics.drawRect(10, 10, 100, 100);
_sp.graphics.endFill();
_sp.addEventListener(MouseEvent.MOUSE_DOWN, mDnCb, false, 0, true);
}
private function mDnCb(evt:MouseEvent):void
{ traceTime("click");
_state1 = !_state1;
var c:uint = 0xFF0000;
if (_state1)
{ c = 0x00FFAA;
}
paintThatRect(c);
killTime();
}
private function paintThatRect(c:uint):void
{
_sp.graphics.beginFill(c, 1);
_sp.graphics.drawRect(10, 10, 100, 100);
_sp.graphics.endFill();
}
private function killTime():void
{ var r:Rectangle = new Rectangle(0, 0, 100, 100);
for (var i:uint = 0; i < 500000; i++)
{
var t:Rectangle = new Rectangle(i, i, i, i);
if (t.intersects(r) || r.containsRect(t) || t.containsRect(r))
{ r = t.union(r);
}
}
}
public static function traceTime(note:String):Number
{ var nowTime:Number = new Date().getTime();
var diff:Number = (nowTime-_lastTraceTime);
trace("[t" + diff + "] " + note);
_lastTraceTime = nowTime;
return diff;
}
}
}
Вы не объяснили, почему вам нужно время. Что вы планировали с этим делать? – Gunslinger47
Я хотел бы знать, какую скорость они нажимали, чтобы они могли ... стрелять в цель так много раз. Хиты должны быстро развиваться, чтобы быть эффективными. – jedierikb