views:

226

answers:

2

Hi,

Has anyone got experience in converting AS3 projects (no mxml) in Flex, to Flash CS4? Are there any resources out there as to what works in Flex Builder that doesn't work in Flash, and how to get the project running? I read somewhere that (for instance) certain Metadata tags don't work.

If I've got all my code in the src folder, should I just create the .fla file in that folder and basically copy all code from the .as file which launched the Flex project? Or create the .fla file somewhere else and point assign that src folder in the classpath? Also, not being familiar with the CS4 IDE, do I create a new Flash Project?

Thanks!

+1  A: 

It really depends. If it's just a pure AS3 project that relies only on playerglobal.swc it should be fairly easy. Just copy your .as files and add them to your new project as Cameron has suggested.

If however you've written a pure AS3 Flex app that relies on any of the other SWCs (flex.swc, framework.swc, etc) it's not really possible, as CS4 can't use SWC files. If you google around you might find somebody who's disassembled the SWC into various .abc files and a SWF full of resources, but you'll probably end up having to embed the entire Flex framework and all support code into your final SWF, which will bloat it big-time.

Sophistifunk
Thanks for responding! It doesn't require any of the other SWCs, but I'm still having the font problem, as described below. The approach described at http://www.adobe.com/devnet/flash/articles/embed_metadata_04.html seems to require that you use flex.swc -- meaning that CS4 apparently can use SWC files via the Flex framework.
David
A: 

So here's the issue I'm having. The code in the Flex AS3 looks like this:

    [Embed(source='C:/WINDOWS/Fonts/ArialBD.TTF',  fontWeight = 'bold', fontName='ArialBold', unicodeRange='U+0020-U+0020,U+0021-...')] //a bunch of other unicode
    public static var _VerdanaFontBold:Class;  

    [Embed(source='C:/WINDOWS/Fonts/Arial.TTF', fontWeight = 'regular', fontName='Arial', unicodeRange='U+0020-U+0020...')] //a bunch of other unicode
    public static var _VerdanaFont:Class;  

And in constructor of the extended textfield in which my text appears I have:

        Font.registerFont(_VerdanaFontBold);
        Font.registerFont(_VerdanaFont); 

CS4 doesn't allow use of the Embed metadata. So I've commented that out. In CS4, I understand that I'm supposed to create a blank textfield in design mode, which I've done. I then can select fonts to embed. I've selected verdana (upper and lower case, punctuation, number, etc).

When I run the app in CS4, the textfield is blank.

What am I doing wrong? Do I need to give the verdana font an instance name of _VerdanaFont? I wouldn't think so, since I've had to comment out the Font.registerFont as well. The fact that I'm embedding the font in a blank textfield, and not the one that's called by the document class I've set, shouldn't matter, right -- the font should just be embedded in the swf and available for use. But it's blank.

Does anyone know what to do here?

Edit: Well given that the apparent reason this isn't working now has to do with fonts not showing up correctly, I better create that as a new Question. Also, there's a clearer description than the one in the link provided above regarding the document class, here: http://www.heaveninteractive.com/weblog/2008/03/04/introduction-to-the-document-class-in-actionscript-30-tutorial/

David
The problem here (I think) is the version of ASC that Flash CS4 uses to compile your code doesn't support metadata, so you'll have to use the normal (for Flash Authors) method of embedding fonts. I can't tell you what it is off the top of my head, but it should be pretty easy to google.
Sophistifunk
Here's hoping Adobe gets their act together WRT AS3 compilation, and before CS5 + Builder 4. Currently we've got at least 3 different ASC compilers; MXMLC, the Flash authoring environment, and a special one for Alchemy that can use the secret opcodes.
Sophistifunk
Here's what I found: you must remove myTextField.embedFonts = true; from the code if you want the text to show up in Flash.
David