По первому клику по кнопке (черный квадрад внизу) ручка (деталь выше) должна перемещаться вправо, достугнув определенного значения по Х, должна возвращаться влево в начальное состояние, после чего опять перемещаться вправо и .д., пока не будет нажата снова кнопка (черный квадрад внизу). После повторного надания кнопки ручка должна остановиться. И уже при следующем нажатии на кнопку должна опять перемещаться в автоматическом режиме, описанном выше. Как это реализовать? Мне удалось сделать, чтобы по клику на кнопку, ручка перемещалась в одну сторону, по повторному клику по кнопке - возвращалась в исходную позицию.
Код AS3:
package
{
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.utils.*;
import mx.events.ModuleEvent;
import flash.filters.BitmapFilterQuality;
import flash.filters.BlurFilter;
/**
* ...
* @author miato
*/
public class Main extends Sprite
{
private var detal1handle:Sprite = new Sprite();
private var detal4start:Sprite = new Sprite();
private var timer:Timer;
private var timer1:Timer;
private var IsDetal4start:Boolean = false;
public function Main():void
{
detal1handle.graphics.lineStyle(1); //
detal1handle.graphics.beginFill(0xCCCCCC, 1);
detal1handle.graphics.drawRect(96, 112, 87, 6); // ДЛИНА
detal1handle.graphics.beginFill(0x999999, 1);
detal1handle.graphics.drawRect(153, 110, 7, 10);
detal1handle.graphics.beginFill(0x000000, 1);
detal1handle.graphics.drawRect(160, 100, 30, 30);
detal1handle.graphics.endFill();
detal4start.graphics.lineStyle(1); // кнопка запуска
detal4start.graphics.beginFill(0x000000, 1);
detal4start.graphics.drawRect(85, 225, 15, 30);
detal4start.graphics.endFill();
// detal4start.y = 260;
addChild(detal1handle);
detal1handle.x = 290;
detal1handle.y = 60;
addChild(detal4start);
detal4start.x = 525;
detal4start.y = 170;
detal4start.addEventListener(MouseEvent.CLICK, airStart);
}
private function airFeeding (e:MouseEvent):void {
IsDetal4start = false;
}
private function airStart (e:MouseEvent):void {
timer = new Timer(50, 0);
timer.addEventListener(TimerEvent.TIMER, moveAirStartButton);
timer.start();
IsDetal4start = true;
airWork();
}
private function airStartRevers (e:MouseEvent):void {
timer = new Timer(50, 0);
timer.addEventListener(TimerEvent.TIMER, moveAirStartButton);
timer.start();
IsDetal4start = true;
airWorkRevers();
}
private function moveAirStartButton(e:TimerEvent):void
{
if (detal4start.x <= 525) {
detal4start.x -= 10;
if (detal4start.x < 510) {
detal4start.x = 525;
timer.stop();
}
e.updateAfterEvent(); // обновляем экран после выхода из этой функции
}
// else {
// timer.stop();
// }
trace(detal4start.x);
}
private function airWork ():void {
if (IsDetal4start) {
timer1 = new Timer(50, 0);
timer1.addEventListener(TimerEvent.TIMER, moveAirHandle);
timer1.start();
}
}
private function airWorkRevers ():void {
if (IsDetal4start) {
timer1 = new Timer(50, 0);
timer1.addEventListener(TimerEvent.TIMER, moveAirHandleRevers);
timer1.start();
}
}
private function moveAirHandle (e:TimerEvent):void
{
if (detal1handle.x < 340) {
detal1handle.x += 10;
if (detal1handle.x < 340) {
detal1handle.x = 340;
} else if (detal1handle.x > 340) {
detal1handle.x = 340;
trace(detal1handle.x);
}
e.updateAfterEvent(); // обновляем экран после выхода из этой функции
}
else {
timer1.stop();
}
detal4start.removeEventListener(MouseEvent.CLICK, airStart);
detal4start.addEventListener(MouseEvent.CLICK, airStartRevers);
}
private function moveAirHandleRevers (e:TimerEvent):void
{
if (detal1handle.x > 290) {
detal1handle.x -= 10;
if (detal1handle.x > 290) {
detal1handle.x = 290;
} else
if (detal1handle.x < 290) {
detal1handle.x = 290;
trace(detal1handle.x);
}
e.updateAfterEvent(); // обновляем экран после выхода из этой функции
}
else {
timer1.stop();
}
detal4start.removeEventListener(MouseEvent.CLICK, airStartRevers);
detal4start.addEventListener(MouseEvent.CLICK, airStart);
}
}
}