Volledige versie bekijken : Embed SWF
Wivern
%Europe/Berlin %660 %2007, 16:51
Ik probeer in mijn flex applicatie (gebruik makend van het flexframework) een SWF te embedden, ik doe ik op deze manier:
[Embed(source='assets.swf')]
[Bindable]
public var assets:Class;
Maar nu wil ik een movieclip bijvoorbeeld "logo" uit assets.swf gebruiken in mijn applicatie.
Dus via addChild aan de displaylist toevoegen, maar ik kan dus nergens vinden hoe je dat met actionscript moet doen...
//----------------------- edit -----------------------
//------ onderstaand gedeelte is al opgelost :D -------
//---------------------------------------------------
Wat ik verder raar vind is dat als ik een symbol uit assets.swf wil embedden deze tijdens het compilen niet gevonden wordt. Ik doe dus het volgende:
[Embed(source='assets.swf', symbol='logo')]
[Bindable]
public var logo:Class;
Moeten de symbols in de swf aan bepaalde eisen voldoen zoals export for actionscript?
Zo ja hoe werkt dit export voor actionscript dan want bij mij begint ie te zeuren tijdens het exporteren naar swf met de volgende fout melding: 1046: Type was not found or was not a compile-time constant: logo. By the way ik gebruik flash CS3.
TheDutch
%Europe/Berlin %745 %2007, 18:52
Moeten de symbols in de swf aan bepaalde eisen voldoen zoals export for actionscript?
Ja, je moet ze exporten voor ActionScript en daar een Linkage ID (symbol) aan meegeven :).
Wivern
%Europe/Berlin %752 %2007, 19:02
Ja maar dan krijg ik dus een fout melding tijdens de export, heeft iets met een classe te maken die niet gevonden kan worden?? Snap het nie, was in flash 8 geen probleem in CS3 wel?
Edit:
Ooh duh, had de movieclips ook op de stage staan met de zeldfe Instance name als de class name voor de export for actionscript! Vond flash nie leuk :P
Wivern
%Europe/Berlin %964 %2007, 00:09
Ok na lang zoeken.... niks gevonden....
Maar na lang klooien het volgende verzonnen:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="startApp()">
<mx:Script><![CDATA[
import mx.core.UIComponent;
import mx.core.SpriteAsset;
[Embed(source='assets.swf', symbol='logo')]
[Bindable]
private var logo:Class;
public function startApp():void {
var myLogo:SpriteAsset = new logo();
var myUIComponent:UIComponent = new UIComponent();
myUIComponent.addChild(myLogo);
myLogo.x = myLogo.width/2;
myLogo.y = myLogo.height/2;
addChild(myUIComponent);
}
]]></mx:Script>
</mx:Application>
Moet er nog wel even een mooie classe van maken, is maar even een probeerseltje.
de embedded symbol zou volgens de help files een SpriteAsset zijn, als ik deze probeer toe te voegen aan de displaylist krijg ik gezeur dat de SpriteAsset niet omgezet kan worden naar IUIComponent? Oplossing: stop de SpriteAsset eest in een UIComponent en add deze UIComponent...
Lijkt mij een workaround en niet echt een juiste oplossing... iemand een idee hoe dit anders kan/moet?
TheDutch
%Europe/Berlin %320 %2007, 08:41
Dat klopt wel :).
Het Flex Framework verwacht dat alle visuele componenten afstammen van de UIComponent class. Op die manier is het framework er zeker van dat alle visuele componenten met het framework en elkaar overweg kunnen. Het is dus de juiste keuze geweest om SpriteAsset (wat afstamt van DisplayObject) toe te voegen als kind in een nieuwe instantie van UIComponent en die te gebruiken binnen het framework.
ps. Dit onderwerp staat trouwens in het verkeerde forum. Het moet in het Flex 2.0 & Apollo forum staan. Ik heb al een verzoek gedaan bij de beheerders om hem te verplaatsen.
Wivern
%Europe/Berlin %582 %2007, 14:58
hmmm vindt het wel een beetje raar dat het zo moet...
Dus als ik rechtstreeks de embedded symbol wil benaderen om te verschalen bijvoorbeeld omdat ik 9slice heb gebruikt in de symbol en 9slice niet werkt als je de parent verschaalt (tenminste voor zover ik weet, heb het ooit geprobeerd in AS3 zonder flexframework) dan moet je altijd:
myUIComponent.mySymbol.scaleX gaan doen dat is natuurlijk niet zo handig als rechtstreeks de symbol op aan de displaylist toevoegen.
Is er geen manier om de SpriteAsset om te zetten naar een UIComponent i.p.v. deze toe te voegen aan een UIComponent?
alle visuele componenten afstammen van de UIComponent class
Je kunt toch ook een Sprite (of FlexSprite) aan de displaylist toevoegen dat zijn toch ook geen UIComponents... (Een UIComponent is toch een Sprite? Inheritance : Sprite >> FlexSprite >> UIComponent toch?)
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.