2016-04-20 8 views
1

Ich habe einen Rahmen, der Aktionen hat. Der Code ist nicht in einer Funktion und als solche wird eine Schleife ausgeführt. Jetzt, wo ich eine neue Szene hinzugefügt habe, springt sie sofort zur neuen Szene. Gibt es eine Schleife, die ich benutzen kann, die es nur ausführt, bis eine Kollision zwischen player1 und thisBall passiert?Wie Loop-Code, ohne eine definitive Ende in AS3

+0

** Verwenden Sie keine Szenen! ** Sie verursachen nur Ärger. – null

+0

Also, was schlägst du vor? –

Antwort

2

Als null kommentiert, verwenden Sie keine Szenen (sie sind wirklich eine Tüte Schmerzen). Trotzdem scheint es, als benötigst du eine Spieleschleife. Das ist häufig genug ...

Die Art, wie Sie daran denken müssen, ist wie ein Video anzusehen. Jeder "Frame", auf dem Sie eine Logik ausführen, wie ball.x += 1;, die den Ball auf der rechten Seite des Bildschirms bewegen würde, jedes Mal, wenn der Bildschirm aktualisiert wird (a.k.a., ein neuer "Frame"). Wenn Sie etwas anderes tun wollten, wenn Ihre Bedingung erfüllt war, könnten Sie es Ihrer Schleifenlogik hinzufügen.

function onEnter(e:Event):void { 
    ball.x += 1; 

    if (ball.x == player.x) { 
     trace("You've hit the player with the ball.") 
    } 
} 

Das ist sehr rudimentär, und ich würde es nicht auf diese Weise angehen, wenn Sie Klassen verwenden, oder einen größeren Rahmen, aber das sollte Sie jetzt bekommen.

+0

Ich denke, das Herz der OP-Frage war, wie man den Abspielkopf stoppt, bis die Kollision erkannt wurde, und nicht, wie man eine Kollision erkennt. –

+0

Ich würde argumentieren, dass die Frage darauf gerichtet war, wie man eine Bedingung in einer Szene testet, die als Zeitfaktor durchlaufen wird. Ehrlich gesagt, ist 'x == x' ein schrecklicher Kollisionstest, aber er diente dazu, die angefragte Bedingung zu veranschaulichen. – Atriace

0

Wenn in Ihrem Root-Timeline, haben Sie zwei Movieclips, ein auf dem Rahmen 1 und eine auf dem Rahmen 2 können Sie dieses Dokument Klasse in der Haupt haben:

 
public class Main extends MovieClip { 
    public function Main() { 
     super(); 
     stop(); 
     addEventListener('collision', onCollision); 
    } 
    private function onCollision(e:Event) { 
     nextFrame(); 
    } 
} 

Dann überall in der MC auf dem Rahmen 1 (hoffentlich in einer angehängten Klasse), können Sie diesen Code haben:

 
dispatchEvent(new Event('collision', true)); 

Ihr Hauptdokument Klasse wird „hören“, dieses Ereignis und gehen zum nächsten Bild, das enthält, was Sie als nächstes sehen möchten.

+1

Ich werde überrascht sein, wenn der Benutzer sogar weiß, was eine Dokumentklasse ist und wie man sie benutzt. – BotMaster

+0

Es ist nicht schwer zu finden, und ich gehe nicht davon aus, dass das OP das nicht herausfinden kann, wenn er es nicht schon weiß. Es ist sicherlich etwas, was jeder wissen sollte, der Flash für seinen Lebensunterhalt erwartet. –