Цитата:
|
Первое, что нужно знать автомату - это сколько пуль в секунду он выстреливает.
|
Зак, так, на заметку, темп стрельбы измеряется в выстрелах в
минуту, а не в секунду.
Если будешь пытаться сымитировать реальное оружие, то сразу поймешь, что везде указывается именно минута. То есть для того, чтобы указать реальный тем стрельбы, тебе сначала из минуты придется перевести в секунду, и уже потом считать промежутки между выстрелами. По мне, так это ненужная заморочка.
По теме: вот уж не думал, что такая простая задача, может вызывать такие трудности

Код AS3:
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.getTimer;
public class AutomaticWeapon extends Sprite {
private var _isShooting: Boolean = false;
// количество выстрелов в минуту, именно так измеряется темп стрельбы в реальном оружии, а не в секундах
private var _tempo: int = 0;
// время между выстрелами
private var _delta: int = 0;
// время совершения последнего выстрела
private var _lastShot: int = 0;
private var _counter:int = 0;
public function AutomaticWeapon() {
// например у автомата калашникова, темп стрельбы 600 / мин
tempo = 600;
stage ? init() : addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseAction);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseAction);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void {
if (isShooting) {
var curTime:int = getTimer();
if (curTime >= _lastShot + _delta) {
shoot();
_lastShot = curTime;
}
}
}
private function shoot():void {
trace("выстрел", ++_counter);
}
private function onMouseAction(e:MouseEvent):void {
isShooting = (e.type == MouseEvent.MOUSE_DOWN);
}
public function get tempo():Number {
return _tempo;
}
public function set tempo(value:Number):void {
_tempo = value;
_delta = (60000 / _tempo);
}
public function get isShooting():Boolean {
return _isShooting;
}
public function set isShooting(value:Boolean):void {
_isShooting = value;
if (value) _counter = 0;
}
}
}