Som standard kan instanser av filmklippssymboler i ett Flash-dokumentbibliotek inte skapas dynamiskt (d.v.s. skapas endast med ActionScript). Det beror på att varje symbol som exporteras för användning i ActionScript ökar storleken på SWF-filen och det är känt att en del symboler kanske inte är avsedda för användning på scenen. Därför måste du ange att symbolen ska exporteras för ActionScript, för att tillåta den i ActionScript.
Så här exporterar du en symbol för ActionScript:
-
Välj en symbol i bibliotekspanelen och öppna dialogrutan symbolegenskaper.
-
Aktivera avancerade inställningar om det behövs.
-
Markera rutan Exportera för ActionScript i länkningsdelen.
Det aktiverar fälten Klass och Basklass.
Som standard fylls fältet Klass i med symbolnamnet utan mellanslag (en symbol med namnet ”Tree House” kommer att heta ”TreeHouse”). Om du vill ange att symbolen ska använda en anpassad klass för sitt beteende, anger du fullständigt namn på klassen inklusive dess paket i det här fältet. Om du vill ha möjlighet att skapa instanser av symbolen i ActionScript, men inte behöver lägga till ytterligare beteenden, kan du lämna klassnamnet som det är.
Standardvärdet för fältet Basklass är
flash.display.MovieClip
. Om du vill att symbolen ska utöka funktionerna för någon annan anpassad klass, kan du ange den klassens namn i stället så länge som klassen utökar klassen Sprite (eller klassen MovieClip).
-
Klicka på OK för att spara ändringarna.
I det här läget visas en varning om Flash inte kan finna en länkad SWC-fil eller en extern ActionScript-fil med en definition för den specificerade klassen (t.ex. om du inte behövde lägga till ytterligare beteende för symbolen):
Det gick inte att hitta en definition för den här klassen i klassökvägen. En definition kommer därför att skapas automatiskt i SWF-filen vid exporten
.
Du kan bortse från den här varningen om bibliotekssymbolen inte kräver en unik funktion förutom funktionerna i klassen MovieClip.
Om du inte anger en klass för symbolen, kommer Flash att skapa en klass motsvarande den här:
package
{
import flash.display.MovieClip;
public class ExampleMovieClip extends MovieClip
{
public function ExampleMovieClip()
{
}
}
}
Om du vill lägga till extra ActionScript-funktioner i symbolen, lägger du till lämpliga egenskaper och metoder i kodstrukturen nedan. Antag att du t.ex. har en filmklippssymbol som innehåller en cirkel 50 pixlar bred och 50 pixlar hög och symbolen har specificerats för att exporteras för ActionScript med klassnamnet Circle. Följande kod utökar klassen MovieClip när den placeras i en Circle.as-fil och symbolen får dessutom metoderna
getArea()
och
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;
}
}
}
Följande kod som placerats i en nyckelbildruta i bildruta 1 i Flash-dokumentet, skapar en instans av symbolen och visar den på skärmen:
var c:Circle = new Circle();
addChild(c);
trace(c.width);
trace(c.height);
trace(c.getArea());
trace(c.getCircumference());
I den här koden visas ActionScript-baserad instansiering som ett alternativ till att dra och släppa individuella resurser på scenen. Den skapar en cirkel som har alla egenskaper från ett filmklipp och den har också anpassade metoder som definierats i klassen Circle. Det här är ett mycket grundläggande exempel; bibliotekssymbolen kan specificera ett stort antal egenskaper och metoder i sin klass.
ActionScript-baserad instansiering är kraftfull eftersom den gör det möjligt att dynamiskt skapa ett stort antal instanser som skulle vara krävande att skapa manuellt. Den är också flexibel eftersom du kan anpassa varje instans egenskap när den har skapats. Du kan få en uppfattning om båda fördelarna om du använder en slinga för att dynamiskt skapa flera Circle-instanser. Med symbolen Circle och klassen som beskrevs tidigare i Flash-dokumentets bibliotek, placerar du följande kod i en nyckelbildruta i bildruta 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);
}
Här visas hur du kan snabbt kan skapa och anpassa flera instanser av en symbol utan kod. Varje instans placeras baserat på aktuellt värde inne i slingan och varje instans ges en slumpvis vald färg genom angivande av dess
transform
-egenskap (vilken Circle ärver genom utökning av klassen MovieClip).