Bibliotheeksymbolen voor ActionScript exporteren

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Instanties van filmclipsymbolen in de bibliotheek van een Flash-document kunnen standaard niet dynamisch worden gemaakt (dat wil zeggen gemaakt met alleen ActionScript). De reden hiervoor is dat elk symbool dat voor gebruik in ActionScript wordt geëxporteerd, uw SWF-bestand groter maakt en het bekend is dat sommige symbolen niet zijn bedoeld voor gebruik in het werkgebied. Daarom moet u, als u een symbool in ActionScript beschikbaar wilt maken, opgeven dat het symbool voor ActionScript moet worden geëxporteerd.

U kunt als volgt een symbool voor ActionScript exporteren:

  1. Selecteer het symbool in het deelvenster Bibliotheek en open het dialoogvenster met de symbooleigenschappen.

  2. Activeer zo nodig de Geavanceerde instellingen.

  3. Schakel in het gedeelte Koppeling het selectievakje Exporteren voor ActionScript in.

    De velden Klasse en Basisklasse worden nu geactiveerd.

    Het veld Klasse bevat standaard de symboolnaam, zonder spaties (een symbool met de naam “Hoog Huis" wordt bijvoorbeeld “HoogHuis”). Als u wilt opgeven dat het symbool een aangepaste klasse voor het gedrag moet gebruiken, vult u de volledige naam van de klasse, inclusief het pakket ervan, in. Als u instanties van het symbool in ActionScript wilt maken, maar geen aanvullend gedrag wilt toevoegen, hoeft u de naam van de klasse niet te wijzigen.

    De waarde van het veld Basisklasse is standaard flash.display.MovieClip. Als u wilt dat uw symbool met de functionaliteit van een andere klantenklasse wordt uitgebreid, kunt u in plaats daarvan de naam van die klasse opgeven, als die klasse tenminste een uitbreiding van de klasse Sprite (of MovieClip) is.

  4. Klik op OK om uw wijzigingen op te slaan.

    Als Flash op dit punt geen gekoppeld SWC-bestand of geen extern ActionScript-bestand met een definitie voor de opgegeven klasse kan vinden (als u bijvoorbeeld geen aanvullend gedrag voor het symbool hoefde toe te voegen), wordt een waarschuwing weergegeven:

    Kan geen definitie voor deze klasse vinden in het klassenpad. Er wordt automatisch een definitie gegenereerd in het SWF-bestand bij exporteren.

    U kunt deze waarschuwing negeren als uw bibliotheeksymbool naast de functionaliteit van de klasse MovieClip geen unieke functionaliteit nodig heeft.

Als u geen klasse voor uw symbool opgeeft, maakt Flash een klasse voor uw symbool, die gelijk is aan dit symbool:

package 
{ 
    import flash.display.MovieClip; 
     
    public class ExampleMovieClip extends MovieClip 
    { 
        public function ExampleMovieClip() 
        { 
        } 
    } 
}

Als u wel extra ActionScript-functionaliteit aan uw symbool wilt toevoegen, voegt u de relevante eigenschappen en methoden aan de codestructuur hieronder toe. Stel dat u bijvoorbeeld een filmclipsymbool hebt dat een cirkel van 50 pixels breed en 50 pixels hoog bevat en dat is opgegeven dat het voor ActionScript wordt geëxporteerd met een klasse met de naam Circle. Als de volgende code in een bestand Circle.as wordt geplaatst, vormt de code een uitbreiding van de klasse MovieClip. Het symbool heeft dan de aanvullende methoden getArea() en getCircumference():

package  
{ 
    import flash.display.MovieClip; 
     
    public class Circle extends MovieClip 
    { 
        public function Circle() 
        { 
        } 
         
        public function getArea():Number 
        { 
        // The formula is Pi times the radius squared. 
        return Math.PI * Math.pow((width / 2), 2); 
        } 
         
        public function getCircumference():Number 
        { 
        // The formula is Pi times the diameter. 
        return Math.PI * width; 
        } 
    } 
}

De volgende code, geplaatst op een hoofdframe op frame 1 van het Flash-document, maakt een instantie van het symbool en geeft deze op het scherm weer:

var c:Circle = new Circle(); 
addChild(c); 
trace(c.width); 
trace(c.height); 
trace(c.getArea()); 
trace(c.getCircumference());

Deze code demonstreert het maken van een op ActionScript gebaseerde instantie in plaats van individuele elementen naar het werkgebied te slepen. Er wordt een cirkel gemaakt die alle eigenschappen van een filmclip heeft en tevens de aangepaste methoden die in de klasse Circle zijn gedefinieerd. Dit is een eenvoudig voorbeeld. Uw bibliotheeksymbool kan een willekeurige hoeveelheid eigenschappen en methoden in de klasse opgeven.

Instanties op basis van ActionScript maken is een krachtig hulpmiddel, omdat u er dynamisch grote hoeveelheden instanties mee kunt maken, die handmatig erg veel werk zouden kosten. Het biedt ook flexibiliteit, omdat u de eigenschappen van elke instantie tijdens het maken ervan kunt aanpassen. U kunt een indruk van deze twee voordelen krijgen als u een lus gebruikt om meerdere Circle-instanties dynamisch te maken. Gebruik het symbool en de klasse Circle die eerder in de Flash-documentbibliotheek zijn beschreven en plaats de volgende code op een hoofdframe op frame 1:

import flash.geom.ColorTransform; 
 
var totalCircles:uint = 10; 
var i:uint; 
for (i = 0; i < totalCircles; i++) 
{ 
    // Create a new Circle instance. 
    var c:Circle = new Circle(); 
    // Place the new Circle at an x coordinate that will space the circles 
    // evenly across the Stage. 
    c.x = (stage.stageWidth / totalCircles) * i; 
    // Place the Circle instance at the vertical center of the Stage. 
    c.y = stage.stageHeight / 2; 
    // Change the Circle instance to a random color 
    c.transform.colorTransform = getRandomColor(); 
    // Add the Circle instance to the current timeline. 
    addChild(c); 
} 
 
function getRandomColor():ColorTransform 
{ 
    // Generate random values for the red, green, and blue color channels. 
    var red:Number = (Math.random() * 512) - 255; 
    var green:Number = (Math.random() * 512) - 255; 
    var blue:Number = (Math.random() * 512) - 255; 
     
    // Create and return a ColorTransform object with the random colors. 
    return new ColorTransform(1, 1, 1, 1, red, green, blue, 0); 
}

Dit demonstreert hoe u snel via code meerdere instanties van een symbool kunt maken en aanpassen. Elke instantie wordt op basis van het huidige getal binnen de lus geplaatst en elke instantie krijgt een willekeurige kleur door de eigenschap transform in te stellen (Circle overerft die eigenschap automatisch door de klasse MovieClip uit te breiden).