2016-04-25 2 views
1

Я пытаюсь сделать маленькие круги движущимися в большом круге, а также кнопки для паузы, возобновления и реверса. Но когда я приостанавливаю и возобновляю его, он изменит положение маленького круга, но я хочу, чтобы он остался в исходном положении. Есть ли все-таки сделать это? а также есть ли способ сделать обратное направление, когда я нажимаю? (например, начинать cw, когда я нажимаю «reverse», он превратится в anti-cw, и когда я нажму «reverse» снова, он будет идти cw)Flash-положение маленького круга меняется, когда я нажимаю «Resume»

Это мой код для слоя действий:

var Rec:Number=1; 

stage.addEventListener(Event.ENTER_FRAME,EntFrame); 
function EntFrame(e:Event):void 
{ 
if (Rec >= 1) 
{ 
    CircleL.rotation-= 2; 
} 
else if(Rec <= -1) 
{ 
    CircleL.rotation+=2; 
} 
} 

var twoPI = 2 * Math.PI; 
var circleSNum1:Number = Math.random(); 
var circleSNum2:Number = Math.random(); 
var circleSNum3:Number = Math.random(); 
var circleSNum4:Number = Math.random(); 
var circleSNum5:Number = Math.random(); 
function randomRange(minNum:Number, maxNum:Number):Number 
{ 
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum); 
} 


var radius = randomRange(10, 90); 

function move(event:Event):void{ 


CircleL.CircleS1.x = Math.cos(circleSNum1 * twoPI) * radius; 
CircleL.CircleS1.y = Math.sin(circleSNum1 * twoPI) * radius; 

CircleL.CircleS2.x = Math.cos(circleSNum2 * twoPI) * radius; 
CircleL.CircleS2.y = Math.sin(circleSNum2 * twoPI) * radius; 

CircleL.CircleS3.x = Math.cos(circleSNum3 * twoPI) * radius; 
CircleL.CircleS3.y = Math.sin(circleSNum3 * twoPI) * radius; 

CircleL.CircleS4.x = Math.cos(circleSNum4 * twoPI) * radius; 
CircleL.CircleS4.y = Math.sin(circleSNum4 * twoPI) * radius; 

CircleL.CircleS5.x = Math.cos(circleSNum5 * twoPI) * radius; 
CircleL.CircleS5.y = Math.sin(circleSNum5 * twoPI) * radius; 
} 
addEventListener(Event.ENTER_FRAME,move); 

Pause.addEventListener(MouseEvent.CLICK, clickPause); 
function clickPause(Event:MouseEvent):void{ 
gotoAndStop("Pause"); 
Rec=0 
} 

Resume.addEventListener(MouseEvent.CLICK, clickResume); 
function clickResume(Event:MouseEvent):void{ 
gotoAndStop("Resume"); 
Rec=1 
} 

Reverse.addEventListener(MouseEvent.CLICK, clickReverse); 
function clickReverse(Event:MouseEvent):void{ 
gotoAndStop("Reverse"); 
Rec=-1 
} 

When i test it is this position

After i click "pause" and "resume" the position of small circle changed

ответ

1

Попробуйте удалить Enter кадров прослушивателя событий, когда вы хотите сделать паузу и добавить его обратно, когда вам нужно возобновить. Событие ввода кадра все еще срабатывает, даже если вы вызываете stop(); (gotoAndStop в этом случае). Таким образом, круг по-прежнему перемещается, даже если вы не видите его, потому что вы перешли на другой кадр. Когда вы вернетесь к нему (резюме), это будет выглядеть так, как будто оно движется, но оно никогда не прекращалось.

Pause.addEventListener(MouseEvent.CLICK, clickPause); 
function clickPause(Event:MouseEvent):void{ 
//remove event listener 
stage.removeEventListener(Event.ENTER_FRAME,EntFrame); 
gotoAndStop("Pause"); 
Rec=0 
} 

Resume.addEventListener(MouseEvent.CLICK, clickResume); 
function clickResume(Event:MouseEvent):void{ 
//add event listener 
stage.addEventListener(Event.ENTER_FRAME,EntFrame); 
gotoAndStop("Resume"); 
Rec=1 
} 

Кроме того, попробуйте написания ActionScript во внешних файлах и удалить его из временной линии, а также использовать классы ... это не так уж трудно и сделает вас лучшим разработчиком в конце.

Смежные вопросы