2016-04-25 5 views
1

Ich versuche, kleine Kreise innerhalb eines großen Kreises bewegen und auch Tasten zum Anhalten, Fortsetzen und Umkehren. Aber wenn ich es pausiere und fortsetze, ändert es die Position des kleinen Kreises, aber ich möchte, dass es an der ursprünglichen Position bleibt. Gibt es das überhaupt, um es zu tun? und gibt es auch eine Möglichkeit, die Richtung umgekehrt zu machen, wenn ich klicke? (zB Start ist cw, wenn ich auf "reverse" klicke, wird anti-cw gedreht und wenn ich wieder auf "reverse" klicke)Flash-Position des kleinen Kreises ändern sich, wenn ich auf "Resume" klicke

Dies ist mein Code für Aktionsebene:

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

Antwort

1

Versuchen Sie, den Rahmen Ereignis-Listener Geben Sie zu entfernen, wenn Sie anhalten möchten, und fügen Sie es zurück, wenn Sie wieder aufnehmen müssen. Das Rahmenereignis tritt auch dann noch auf, wenn Sie stop() aufrufen; (gotoAndStop in diesem Fall). Der Kreis bewegt sich also immer noch, auch wenn Sie ihn nicht sehen können, weil Sie zu einem anderen Bild gesprungen sind. Wenn du zurückkommst (Fortsetzung), sieht es so aus, als ob es sich bewegt hätte, aber es hat nie aufgehört.

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 
} 

Versuchen Sie auch, Ihr Actionscript in externen Dateien zu schreiben und es aus der Zeitlinie entfernen, auch Klassen verwenden ... es ist nicht so schwer ist, und haben Ihnen einen besseren Entwickler am Ende machen.

Verwandte Themen