[swfmill] The <call> tag and HaXe / AS3
Mark Winterhalder
mark13 at gmail.com
Thu Apr 10 06:37:43 PDT 2008
Hi,
I've attached a short example that works for me. You need verdana.ttf
and verdanab.ttf to run it, in the same folder as the content of the
zip.
Let's have a look at the swfml first:
<?xml version="1.0" encoding="iso-8859-1" ?>
<movie width="1" height="1" framerate="12">
<frame>
<library>
<font name="verdana" import="verdana.ttf"/>
<font name="verdana" import="verdanab.ttf"/>
</library>
<Import url="verdana.swf"></Import>
</frame>
</movie>
It imports Verdana and Verdana Bold. They will both get the name
'verdana', so when you set the TextFormat to bold, the Flashplayer
will choose the right one. The key here is the <import url="..." />,
it must be set to the location of the library SWF, in this example,
verdana.swf.
Note that the name 'verdana' could be anything. This is your internal
name you use with TextFormat, there is no need to use the full name of
the font. A short name will do, and naming it, say, headlineFont will
make it easier and less confusing should the font change in the
future.
You generate it like this:
swfmill simple verdana.swfml verdana.swf
In the haXe file, two things are important: Wait for the font library
SWF to load, and set the TextField's embedFonts property to true.
HTH,
Mark
On Thu, Apr 10, 2008 at 2:01 PM, András Parditka
<andras at michaeltristram.com> wrote:
> Thank you for the idea, Mark.
>
> I went for the shared library option, and initially had no
> success.
> Sadly I was unable to get the example working at
>
>
> http://osflash.org/swfmill#dynamic_shared_font_loading
>
> and found that the examples link points to a missing page.
>
> I would very much appreciate if you could give me some
> pointers on this. I googled for it in vain.
>
> I had to pass the shared library created in swfmill
> through HaXe (an emtpy project), to get it to work.
> I am not sure why.
>
>
>
> Please look through the what I did, and I hope you can
> correct me on how to do it properly.
>
> 1.
> I created the main file called 'flash.swf' in the Flash IDE,
> with a single frame and a TextField called 'test_txt' on the
> stage. The file is AS3, targeted at Flash Player 9.
>
> I added a font to the library, checked the 'Import for runtime
> sharing', set its class to 'MySharedFont' and its URL to
> 'sl_haxe.swf'.
>
> I added this code to the first frame:
> ------------------------------------------------------------
> test_txt.embedFonts = true;
> test_txt.defaultTextFormat = new TextFormat('Univers 67 I Condensed
> Bold', 18);
> test_txt.text = 'Test successful.';
> ------------------------------------------------------------
>
> 2.
> Created this 'sl_mill.xml':
>
> ------------------------------------------------------------
> <?xml version='1.0' encoding='UTF-8'?>
>
> <movie version="9" width="1024" height="640" framerate="25">
> <background color="#ff0000"/>
> <frame>
> <library>
> <font id="MySharedFont" name="Univers 67 I Condensed
> Bold" import="library/UniversI-CondensedRegular.ttf" />
> </library>
> </frame>
> </movie>
> ------------------------------------------------------------
>
> 3.
> I used:
> ------------------------------------------------------------
> swfmill simple sl_mill.xml sl_mill.swf
> ------------------------------------------------------------
> (Please note the library file's name 'sl_mill.swf' is not the
> same as the file URL 'sl_haxe.swf' for the imported font above.)
>
> Now this 'sl_mill.swf' file cannot be imported for runtime
> sharing into the main swf ('flash.swf'). If you try to do so,
> it will simply show a blank window with even the above mentioned
> TextField ('test_txt') missing that was created in the Flash IDE and
> not by code.
> The loading fails for some reason, that is why we need to import
> another file ('sl_haxe.swf'), created below.
>
> 4.
> I created a simple, empty Main class ('Main.hx') for HaXe in the
> same folder:
> --------------------------------------------------------------
> class Main
> {
> public static function main()
> {
>
> }
> }
> --------------------------------------------------------------
>
> 5.
> I used:
> --------------------------------------------------------------
> haxe -swf sl_haxe.swf -swf-lib sl_mill.swf -main Main -swf-header
> 1024:640:25:ffffff -swf-version 9
> --------------------------------------------------------------
> And it worked! The font appeared in the main 'flash.swf' file.
>
> I am not sure this is the best way to do it. I have tried a other
> things, but nothing else worked. I'm afraid I am not doing
> it the way you meant, so if you could please give me some
> feedback, it would be well appreciated.
>
> Thank you,
> Andras
>
> P.S. If I try to do swf2xml on either the 'sl_mill.swf' or
> the 'sl_haxe.swf', it shows:
> WARNING: end of tag DefineFont2 is @29426, should be @25033
>
> This happens even with the latest build (0.2.12.4).
>
>
>
>
> Mark Winterhalder wrote:
> >> Am I right about this, or have I missed anything?
> >>
> >
> > Hmm... I'm not sure. But maybe there is another option for you, if
> > including everything into a single SWF is not a requirement -- loading
> > a shared font library at runtime:
> >
> > <http://osflash.org/swfmill#dynamic_shared_font_loading>
> >
> > This works for me.
> >
> > Alternatively, you can simulate what <call/> does (in a somewhat
> > hackish manner). Generate a simple SWF that calls your entry point,
> > and use 'swfmill swf2xml your.swf' to output its XML (swfml-ll)
> > representation. Copy the relevant <DoABCDefine/> (?) tag and include
> > that in your swfml.
> >
> > HTH,
> > Mark
> >
> >
> >
> > On Wed, Apr 9, 2008 at 4:12 PM, András Parditka
> > <andras at michaeltristram.com> wrote:
> >
> >> Thank you for your quick answer, Mark.
> >>
> >> The reason for creating the swf with the code first and
> >> trying to add assets with swfmill later was that I wanted
> >> to find out what it would involve to use swfmill's most
> >> tempting feature (that I currently know): the ability
> >> to include all glyphs of a font in an swf.
> >>
> >> It now seems to me this would involve having to use HaXe
> >> for compiling the code.
> >>
> >> (For the Flash IDE cannot use an existing swf file as a
> >> library, and without the ability to call a function with
> >> swfmill, it is not possible to add the assets into the
> >> compiled file.)
> >>
> >> Am I right about this, or have I missed anything?
> >>
> >> Andras
> >>
> >>
> >>
> >> Mark Winterhalder wrote:
> >> >> All the examples containing the <call> tag seem to refer
> >> >> to MTASC. Is the <call> tag usable with HaXe if you target
> >> >> Flash 9?
> >> >>
> >> >
> >> > No, it's not usable for anything but AS2. <call/> is left over from
> >> > the very early days of Swfmill, IIRC the problem was that MTASC
> >> > compiled code executed before the SWF was fully initialized. That
> >> > problem was fixed shortly after, and I would discourage use even with
> >> > AS2 -- it's just not necessary anymore.
> >> > If you just remove the <call/> tag and use haXe's -main setting
> >> > instead, it should work, no?
> >> >
> >> > Mark
> >> >
> >> >
> >> >
> >> > On Wed, Apr 9, 2008 at 3:34 PM, András Parditka
> >> > <andras at michaeltristram.com> wrote:
> >> >
> >> >> Hello everyone,
> >> >>
> >> >> All the examples containing the <call> tag seem to refer
> >> >> to MTASC. Is the <call> tag usable with HaXe if you target
> >> >> Flash 9?
> >> >>
> >> >> I've tried to find answer to this in the mailing list
> >> >> archives and in the available documentation, but could not
> >> >> find one. I have also tried doing it a few ways, but
> >> >> without success.
> >> >>
> >> >> I've set up a little test project:
> >> >>
> >> >> 1.
> >> >> Main.hx: (Just draws a black, 100x100px rectangle using script.)
> >> >> ----------------------------------------------------------------
> >> >> import flash.display.Sprite;
> >> >> import flash.Lib;
> >> >>
> >> >> class Main
> >> >> {
> >> >> public static var mySprite:Sprite;
> >> >>
> >> >> public static function main()
> >> >> {
> >> >> mySprite = new Sprite();
> >> >> Lib.current.addChild(mySprite);
> >> >>
> >> >> mySprite.graphics.beginFill(0x000000);
> >> >> mySprite.graphics.drawRect(0, 0, 100, 100);
> >> >> mySprite.graphics.endFill();
> >> >> }
> >> >> }
> >> >>
> >> >> 2.
> >> >> I use:
> >> >> haxe -swf haxe.swf -swf-version 9 -swf-header 1024:640:25:ffffff -main Main
> >> >>
> >> >> 3.
> >> >> mill.xml: (Should include the HaXe-generated swf, and call the
> >> >> main() method of the Main class.)
> >> >> --------------------------------------------------------------
> >> >> <?xml version='1.0' encoding='UTF-8'?>
> >> >>
> >> >> <movie version="9" width="1024" height="640" framerate="25">
> >> >> <background color="#ff0000"/>
> >> >> <frame>
> >> >> <library>
> >> >> <clip id="mainApp" import="haxe.swf" />
> >> >> </library>
> >> >> <place id="mainApp" name="mainApp" x="0" y="0" depth="1" />
> >> >> <call object="Main" method="main"></call>
> >> >> </frame>
> >> >> </movie>
> >> >>
> >> >> 4.
> >> >> I use: (swfmill-0.2.12)
> >> >> swfmill simple mill.xml mill.swf
> >> >>
> >> >> Sadly, the black rectangle does not appear, which suggests the
> >> >> call to Main.main() not taking place.
> >> >> Am I doing something wrong?
> >> >>
> >> >> Thank you in advance,
> >> >> Andras
> >> >>
> >> >> _______________________________________________
> >> >> swfmill mailing list
> >> >> swfmill at osflash.org
> >> >> http://osflash.org/mailman/listinfo/swfmill_osflash.org
> >> >>
> >> >>
> >> >
> >> > _______________________________________________
> >> > swfmill mailing list
> >> > swfmill at osflash.org
> >> > http://osflash.org/mailman/listinfo/swfmill_osflash.org
> >> >
> >>
> >> _______________________________________________
> >> swfmill mailing list
> >> swfmill at osflash.org
> >> http://osflash.org/mailman/listinfo/swfmill_osflash.org
> >>
> >>
> >
> > _______________________________________________
> > swfmill mailing list
> > swfmill at osflash.org
> > http://osflash.org/mailman/listinfo/swfmill_osflash.org
> >
>
> _______________________________________________
> swfmill mailing list
> swfmill at osflash.org
> http://osflash.org/mailman/listinfo/swfmill_osflash.org
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fontimport.zip
Type: application/zip
Size: 1011 bytes
Desc: not available
Url : http://osflash.org/pipermail/swfmill_osflash.org/attachments/20080410/83b0ce6b/attachment-0001.zip
More information about the swfmill
mailing list