ActionScript: Herhaling van een operatie Many Times


  Share  
|


U wilt een taak meerdere malen uit te voeren binnen een enkel frame.

Gebruik een lus om dezelfde taak uit te voeren meerdere malen binnen een enkel frame. Zo kunt u gebruik maken van een for-statement:

for (var i = 0; i <10; i + +) (/ / Geef de waarde van i. trace (i);)

Wanneer u dezelfde actie (of lichte variaties daarvan) meerdere malen uit te voeren binnen een enkel frame, gebruik dan een looping verklaring aan uw code beknopter, leesbaarder te maken, en makkelijker te updaten. U kunt een tijdje staat of voor een verklaring voor dit doel, maar over het algemeen voor een verklaring is de betere keuze. Beide verklaringen hetzelfde resultaat bereiken, maar de voor de verklaring is compacter en meer vertrouwd voor de meeste programmeurs.

De syntax van een for-statement bestaat uit vijf onderdelen:

Het sleutelwoord voor

Ieder voor de verklaring moet beginnen met een voor het zoekwoord.

Initialisatie meningsuiting

De lus telt doorgaans een index variabele (ook bekend als een lus teller) die wordt geïnitialiseerd wanneer de verklaring eerst wordt aangetroffen. De initialisatie wordt slechts een keer uitgevoerd, ongeacht hoe vaak de lus herhaald.

Test meningsuiting

Een lus moet een test expressie die waar of onwaar. De test expressie wordt geëvalueerd eenmaal elke keer door de lus. Het algemeen, de test uitdrukking vergelijkt de index variabele een andere waarde, zoals een maximum aantal iteraties van de lus. De algemene uitdrukking moet evalueren om ook voor de verklaring van het lichaam aan (dit met een contrast te doen uitvoeren... While-lus, die voert ten minste eenmaal, zelfs als de test expressie onwaar is). Aan de andere kant, als de test expressie nooit vals wordt, maakt u een oneindige lus, wat resulteert in een waarschuwing dat de Flash Player draait langzaam (die verschijnt na 15 seconden).

Update meningsuiting

De update uitdrukking meestal een actualisering van de waarde van de variabele in de test gebruikte uitdrukking, zodat op een bepaald punt, wordt de test uitdrukking valse en eindigt de lus. De update expressie wordt uitgevoerd zodra elke keer door de lus. Een oneindige lus wordt vaak veroorzaakt door niet de juiste variabele in de update expressie update (meestal dezelfde variabele in de test gebruikte uitdrukking).

Verklaring lichaam

De verklaring lichaam is een blok van substatements ingesloten in accolades die wordt uitgevoerd elke keer door de lus. Als de test expressie nooit waar is, zal de verklaring van het lichaam niet worden uitgevoerd.

Het zoekwoord voor de eerste plaats komen, en het moet worden gevolgd door de initialisatie, test en bijwerken uitdrukkingen tussen haakjes. Puntkomma moeten apart van de drie uitdrukkingen van elkaar (hoewel de initialisatie, test en bijwerken verklaringen facultatief zijn, de puntkomma's zijn verplicht). De rest van de for-lus is samengesteld uit de verklaring lichaam omsloten door accolades. De algemene vorm is:

for (initialisatie; test; update) () verklaring lichaam

Hier is een voorbeeld van een voor de verklaring dat de resultaten van de getallen 0 tot 999. Omdat de index variabele i is een lokale variabele, we voorwoord het met de var trefwoord in de initialisatie expressie.

for (var i = 0; i <1000; i + +) (trace (i);) trace ( "Dat is het einde.");

Het begrijpen van de voor de verklaring, kunt u samen volgen met de ActionScript tolk als zij de opdracht processen. In het voorgaande voorbeeld, het voor zoekwoord vertelt de tolk naar de verklaringen binnen de for-lus zolang de conditionele expressie is waar te voeren. De initialisatie expressie is slechts een keer uitgevoerd, en bevat de variabele i op 0. Vervolgens de tolk controleert de test expressie (i <1000). Omdat i is 0, wat minder is dan 1000, de expressie evalueert naar true en de () actie binnen het trace voor de verklaring van lichaam wordt uitgevoerd. De ActionScript tolk voert daarna de update verklaring, in dit geval i + +, welke stappen ik met 1. De tolk dan herhaalt het proces van de top van de lus (maar slaat de initialisatie stap). Dus de tolk opnieuw controleert of de test expressie waar is, en zo ja, voert de verklaring lichaam weer. Het voert daarna de update verklaring weer. Dit proces herhaalt totdat de test uitdrukking is niet langer waar. De laatste waarde weergegeven in het venster Output is 999, want toen ik eenmaal is verhoogd naar 1000, de test niet meer expressie evalueert naar waar en de lus komt een einde. Zodra de lus beëindigt, de uitvoering blijft met wat commando's volgen de lus.

Zowel de initialisatie en update uitdrukkingen kunt meerdere acties gescheiden door komma's. Het volgende voorbeeld tegelijkertijd stappen verlaagt i en j, en toont hun waarden in het venster Output:

for (var i = 0, j = 10; i <10; i + +, j -) (trace ( "i is" + i); trace ( "j" + j);)

Het voorgaande voorbeeld is niet hetzelfde als met behulp van twee geneste voor verklaringen (die wordt weergegeven in de volgende code blok).

Het is ook vaak te gebruiken voor geneste statements. Wanneer u een geneste for-statement, gebruik een andere index variabele is dan die gebruikt worden in de buitenste lus. Bij conventie, de buitenste lus maakt gebruik van de variabele i, en de geneste lus maakt gebruik van de variabele j. Bijvoorbeeld

for (var i = 1; i <= 3; i + +) (for (var j = 1; j <= 2; j + +) (trace (i + "X" + j + "=" + (i * j)) ;))

Het voorgaande voorbeeld geeft de volgende tafel van vermenigvuldiging in het Output-venster:

1 X 1 = 1 1 X 2 = 2 2 X 1 = 2 2 X 2 = 4 3 X 1 = 3 3 X 2 = 6

Het is mogelijk om nest meerdere niveaus van voor de verklaringen. Volgens afspraak, elke extra niveau van nesting gebruikt de volgende letter uit het alfabet als de index variabele. Daarom is het derde niveau van geneste voor verklaringen gebruikt doorgaans k als de index variabele:

for (var i = 1; i <= 3; i + +) (for (var j = 1; j <= 3; j + +) (for (var k = 1; k <= 3; k + +) (trace (i + " X "+ j +" X "+ k +" = "+ (i * j * k));)))

Daarnaast kunt u gebruik maken van achteruit voor verklaringen lus:

/ / Count achteruit 10 tot 1. For (var i = 10; i> 0; i -) (trace (i);)

U mag geen gebruik maken van een for-statement om taken uit te voeren in de tijd.

Veel programmeurs maken de fout om te proberen te gebruiken voor verklaringen filmclips animeren. Bijvoorbeeld

for (var i = 0; i <20; i + +) (myMovieClip._x + = 10;)

Hoewel de vorige code van de movie clip beweegt 200 pixels aan de rechterkant van zijn uitgangspunt, alle updates plaatsvinden binnen hetzelfde frame. Er zijn twee problemen met deze. Allereerst de stage-updates slechts eenmaal per frame, zodat alleen de laatste update wordt weergegeven op de stage (waardoor de filmclip van 200 pixels in plaats van springen plotseling bewegen soepel in 20 stappen). En ten tweede, zelfs als de Stage updates vaker, zou elke iteratie door de lus slechts een paar milliseconden duurt, zodat de animatie te snel gebeuren. Voor acties die u wilt plaatsvinden in de tijd, gebruik van een onEnterFrame () handler.

Bovendien moet herhalen strakke loops niet worden gebruikt voor het uitvoeren langdurige processen (iets dat meer dan een fractie van een seconde duurt). De Flash Player geeft een waarschuwing wanneer een enkele lus voert voor meer dan 15 seconden. Met behulp van een onEnterFrame ()-handler of de setInterval ()-functie voorkomt dat de waarschuwing en laat Flash om andere acties in aanvulling op de herhaalde acties die deel uitmaken van de lus uit te voeren.

een artikel afkomstig van Gabriel Savimbi


Share  

© 2005-2010 E-articles.info All Rights Reserved - Terms and conditions