BernardV
%Europe/Berlin %926 %2006, 23:14
Ik werk zonder de flash IDE en zo zullen er (vele) anderen zijn die dat ook doen.
Het probleem wat je dan kunt krijgen is dat je "standaard" geen movieclips kunt hebben waar je een class aan toewijst, zodat je je eigen functies kan gebruiken in de movieclip.
Er zijn manieren zoals de prototype om functies toe te voegen, maar er is ook een manier om een "lege" movieclip aan te maken met al de functies die je wilt.
De basis is dit:
Bij het compilen zorgt flash ervoor dat alle classes die een movieclip extenden en aan een movieclip in de library gelinked zijn (class myMovie extends MovieClip) in de "__Packages" geregistreerd worden. Dit wetende en gebruik te maken van de Object.registerClass functie kunnen we leuke dingen doen :)
De basis is dat je zorgt dat er een string is die de positie in de "__Packages" aangeeft.
Stel je class heet MyMovie dan maak je een string aan "__Packages.MyMovie"
static var symbolName:String = "__Packages.MyMovie";
static var symbolOwner:Function = MyMovie;
static var symbolLinked:Boolean = Object.registerClass(symbolName, symbolOwner);
Zoals hierboven te zien is is er een string met de positie in de packages, daarbij is de symbolOwner gelijk aan de constructor van je class.
Als je deze beide hebt opgegeven gebruik je Object.registerClass om deze globaal te registreren in Flash.
Voorbeeld van een class die een MovieClip extend:
class MyMovie extends MovieClip
{
static var symbolName:String = "__Packages.MyMovie";
static var symbolOwner:Function = MyMovie;
static var symbolLinked:Boolean = Object.registerClass(symbolName, symbolOwner);
public function MyMovie()
{
}
public function drawCircle(x:Number, y:Number, r:Number, color:Number):Void {
beginFill(color);
moveTo(x+r, y);
curveTo(r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
curveTo(Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
curveTo(-Math.tan(Math.PI/8)*r+x, r+y, -Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
curveTo(-r+x, Math.tan(Math.PI/8)*r+y, -r+x, y);
curveTo(-r+x, -Math.tan(Math.PI/8)*r+y, -Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
curveTo(-Math.tan(Math.PI/8)*r+x, -r+y, x, -r+y);
curveTo(Math.tan(Math.PI/8)*r+x, -r+y, Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
curveTo(r+x, -Math.tan(Math.PI/8)*r+y, r+x, y);
endFill();
}
}
Deze class heeft een functie die een cirkel tekent.
Om een movieclip toe te voegen in flash met deze functie doe je het volgende:
import MyMovie;
var myMovie:MovieClip = this.attachMovie(MyMovie.symbolName,"myMovieInstance",this.getNextHighestDepth());
Nu de dit hebt gedaan zul je nog niets zien, aangezien je eigenlijk een lege movieclip hebt aangemaakt met alleen extra functies.
Maar als je nu zou aanroepen:
myMovie.drawCircle(100,100,100,0xFF0000);
Dan krijg je een cirkel met als middelpunt 100,100 en een diameter van 100pixels met een rode kleur.
Zo zijn er vele toepassingen te bedenken om een class te maken die je kan laden als een movieClip. Denk aan classes die al tweens hebben ingebouwd, als een fade, of verplaatsingen. Zelfs classes waarbij je het registratiepunt kan wijzigen en draaien om het opgegeven punt.
Ik hoop dat alles hier een beetje duidelijk is, mocht het niet zo zijn... vraag maar raak!
Het probleem wat je dan kunt krijgen is dat je "standaard" geen movieclips kunt hebben waar je een class aan toewijst, zodat je je eigen functies kan gebruiken in de movieclip.
Er zijn manieren zoals de prototype om functies toe te voegen, maar er is ook een manier om een "lege" movieclip aan te maken met al de functies die je wilt.
De basis is dit:
Bij het compilen zorgt flash ervoor dat alle classes die een movieclip extenden en aan een movieclip in de library gelinked zijn (class myMovie extends MovieClip) in de "__Packages" geregistreerd worden. Dit wetende en gebruik te maken van de Object.registerClass functie kunnen we leuke dingen doen :)
De basis is dat je zorgt dat er een string is die de positie in de "__Packages" aangeeft.
Stel je class heet MyMovie dan maak je een string aan "__Packages.MyMovie"
static var symbolName:String = "__Packages.MyMovie";
static var symbolOwner:Function = MyMovie;
static var symbolLinked:Boolean = Object.registerClass(symbolName, symbolOwner);
Zoals hierboven te zien is is er een string met de positie in de packages, daarbij is de symbolOwner gelijk aan de constructor van je class.
Als je deze beide hebt opgegeven gebruik je Object.registerClass om deze globaal te registreren in Flash.
Voorbeeld van een class die een MovieClip extend:
class MyMovie extends MovieClip
{
static var symbolName:String = "__Packages.MyMovie";
static var symbolOwner:Function = MyMovie;
static var symbolLinked:Boolean = Object.registerClass(symbolName, symbolOwner);
public function MyMovie()
{
}
public function drawCircle(x:Number, y:Number, r:Number, color:Number):Void {
beginFill(color);
moveTo(x+r, y);
curveTo(r+x, Math.tan(Math.PI/8)*r+y, Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
curveTo(Math.tan(Math.PI/8)*r+x, r+y, x, r+y);
curveTo(-Math.tan(Math.PI/8)*r+x, r+y, -Math.sin(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y);
curveTo(-r+x, Math.tan(Math.PI/8)*r+y, -r+x, y);
curveTo(-r+x, -Math.tan(Math.PI/8)*r+y, -Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
curveTo(-Math.tan(Math.PI/8)*r+x, -r+y, x, -r+y);
curveTo(Math.tan(Math.PI/8)*r+x, -r+y, Math.sin(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y);
curveTo(r+x, -Math.tan(Math.PI/8)*r+y, r+x, y);
endFill();
}
}
Deze class heeft een functie die een cirkel tekent.
Om een movieclip toe te voegen in flash met deze functie doe je het volgende:
import MyMovie;
var myMovie:MovieClip = this.attachMovie(MyMovie.symbolName,"myMovieInstance",this.getNextHighestDepth());
Nu de dit hebt gedaan zul je nog niets zien, aangezien je eigenlijk een lege movieclip hebt aangemaakt met alleen extra functies.
Maar als je nu zou aanroepen:
myMovie.drawCircle(100,100,100,0xFF0000);
Dan krijg je een cirkel met als middelpunt 100,100 en een diameter van 100pixels met een rode kleur.
Zo zijn er vele toepassingen te bedenken om een class te maken die je kan laden als een movieClip. Denk aan classes die al tweens hebben ingebouwd, als een fade, of verplaatsingen. Zelfs classes waarbij je het registratiepunt kan wijzigen en draaien om het opgegeven punt.
Ik hoop dat alles hier een beetje duidelijk is, mocht het niet zo zijn... vraag maar raak!