Winter 01 | Attach & Duplicate

Leerdoelen

Deze les

duplicateMovieClip

Duplicatemovieclip is een functie in flash waarmee je movieclips kunt dupliceren. Deze functie is handig om iets op basis van de input van een gebruiker te kunnen herkalen. Een voorbeeld is bijvoorbeeld een schietspelletje. Iedere keer dat je op bijvoorbeeld de spatiebalk drukt om te schieten, dupliceert het filmpje de animatie van een kogel. Hierdoor lijkt kan het dat je iedere keer een nieuwe kogel afschiet. De functie ziet er als volgt uit:

On (release){
duplicateMovieClip("instancename", "nieuwenaam", 10);
}

Je ziet drie opties: target, newName en Depth. De target is de movieclip die je wil dupliceren. Wanneer je een duplicaat hebt gemaakt moet deze een nieuwe naam toegewezen krijgen, er mag immers geen dubbele instancename bestaan. De depht is omdat de movieclips worden bijgemaakt in dezelfde laag. Flash creert zelf binnen die laag nieuwe lagen, dit heet de depth. Er mag nooit meer dan een movieclip op een bepaalde depth bestaan. Wanneer je er toch meer aanmaakt, zal flash de oude movieclip vervangen met de nieuwe. Wanneer je deze parameters invuld, werkt het dupliceren en kan je het testen. Na het testen blijkt dat je niet ziet dat er iets gebeurd, dit wordt veroorzaakt doordat de nieuwe movieclip automatisch alle eigenschappen van zijn voorganger mee krijgt. Dus ook zijn positie. Dit betekent dat je de nieuwe movieclip niet kan zien, omdat die exact bovenop de oude ligt. Verstandig is om dan ook de _x waarde een beetje te wijzigen.

On (release){
    duplicateMovieClip("instancename", "nieuwenaam", 10);
    nieuwenaam._x = 30
}

createEmptyMovieClip

Hier worden twee filmpjes gebruikt. Het ene swf-filmpje wordt in de andere swf ingeladen. De ene swf heet main.swf en de andere laad.swf. Main.swf krijgt een button en de laad.swf een foto of een animatie. De button in 'main.swf' heeft het volgende script, zodat bij een klik op de button 'laad.swf' wordt ingeladen:

on (release) {
  createEmptyMovieClip("mcLeeg", 1);
  loadMovie("laadmovie.swf", mcLeeg);
  _root.mcLeeg._x = 200;
}

'createEmptyMovieClip' doet wat de naam al zegt. Het maak een lege movieclip aan waar het ingeladen filmpje ingeladen kan worden. Hier mee geef je het filmpje meteen een instancename:'mcLeeg'. Dit is handig want dan kan je altijd het filmpje weer aanspreken. Het is nu een gewoon onderdeel geworden van 'main.swf'. De functie loadMovie(); laadt het filmpje in de hoofdmovie en zegt meteen dat het fimpje in de nieuwe movieclip moet worden geladen. Daarna kan je movieclip dus gewoon aanspreken. Door bijvoorbeeld de x positie van het filmpje te veranderen.

attachMovie

Behalve dat je een movieclip kan dupliceren, kan je ook via actionscript een movieclip uit de library halen doormiddel van actionscript. Hiermee kan je je filmpjes heel erg dynamisch maken. Met genoeg gereedschap in je library is het mogelijk programma onder invloed van de gebruiker laten onstaan. Een voorbeeld is een menuutje, afhankelijk van de het aantal menuitems kan het altijd groter worden. Een ander voorbeeld is dat het script op basis van een keus in een menu andere achtergrondjes uit de library haald waardoor het menu van kleur veranderd. attachMovie(); kan gebruikt worden in plaats van duplicateMovieClip();. De movieclip die je wilt 'attachen', zoek je eerst op in de library en je past daar de properties aan. Je opent de properties, via rechtermuisknop, klik op advanced en vink dan export voor actionscript aan. Zorg dat je het een goede naam geeft en onthoudt deze. Dit werkt het zelfde als bij video, dus hebben we al eens eerder gedaan! Open nu het scriptje onder de button: en vervang het duplicate scriptje voor:

on (release) {
  this.attachMovie( "circle", "circle1", 2 ); 
}

of in hoofdtijdlijn:

btn_name.onRelease = function(){
  this.attachMovie( "circle", "circle1", 2 ); 
}

Array's

In PHP hebben we leren werken met Array's In flash werkt dit precies het zelfde. Voor de opdrachten heb je deze kennis nodig. Volgende week gaan we hier dieper op in. Hieronder een voorbeeld van hoe de code werkt in flash:

// simpele array
mijnLijstje = Array("een", "twee", "drie");
trace(mijnLijstje);

//array met variablen
var een = "oranje";
var twee = "groen";
var drie = "paars";
mijnLijstje = Array(een, twee, drie);
trace(mijnLijstje);

// array met array's
een = Array("een", "twee", "drie");
twee = Array("oranje", "groen", "paars");
drie = Array("huis", "boom", "beest");
mijnLijstje = Array(een, twee, drie);
trace(mijnLijstje);

//waarde van een array opvragen
test = een[0]; 
test = mijnLijstje[0][2]; 
	

toelichting

De eerste waarde in een Array is altijd nul. Dus begin altijd met nul te tellen. Wanneer je de nul tussen de vierkante haken veranderd in een 1 of een 2, geeft flash de tweede of derde waarde uit het rijtje weer. Op die manier kan je altijd de gewenste waarde weer oproepen. Als er sprake is van een Array in een Array, dan vraag je tussen de eerste vierkante haken de array op, en met de tweede vierkante haken de (1e, 2e of 3e) waarde in die array

Bronnen

Enkele Flash ontwikkel sites

ActionScript dictionary (pdf)

Enkele Flash pioneers ter inspiratie

Auteur: Roos Groenewegen
Seizoen: Winter
Lesnummer: 01
Datum: 20-11-2006
Type les: MME