The Essential Guide to Open Source Flash Development Chris Allen Wade Arnold Aral Balkan Nicolas Cannasse John Grden Moses Gunesch Marc Hughes R. Jon MacDonald Andy Zupko The Essential Guide to Open Source Flash Development Copyright©2008byChrisAllen,WadeArnold,AralBalkan,NicolasCannasse,JohnGrden,MosesGunesch,MarcHughes, R.JonMacDonald,AndyZupko Allrightsreserved.Nopartofthisworkmaybereproducedortransmittedinanyformorbyanymeans,electronicor mechanical,includingphotocopying,recording,orbyanyinformationstorageorretrievalsystem,withoutthe priorwrittenpermissionofthecopyrightownerandthepublisher. ISBN-13(pbk):978-1-4302-0993-5 ISBN-13(electronic):978-1-4302-0994-2 PrintedandboundintheUnitedStatesofAmerica987654321 BuzzyillustratedbySillapanonHattachanchai,basedonasketchbyAralBalkan.Copyright©2008OSFlash.org.Releasedunderthe CreativeCommonsAttribution2.0UK:England&WalesLicense(creativecommons.org/licenses/by/2.0/uk/). Trademarkednamesmayappearinthisbook.Ratherthanuseatrademarksymbolwitheveryoccurrenceofatrademarkedname, weusethenamesonlyinaneditorialfashionandtothebenefitofthetrademarkowner,withnointentionofinfringementofthe trademark. DistributedtothebooktradeworldwidebySpringer-VerlagNewYork,Inc.,233SpringStreet,6thFloor,NewYork,NY10013. Phone1-800-SPRINGER,fax201-348-4505,[email protected],orvisitwww.springeronline.com. Forinformationontranslations,pleasecontactApressdirectlyat2855TelegraphAvenue,Suite600,Berkeley,CA94705. Phone510-549-5930,fax510-549-5939,[email protected],orvisitwww.apress.com. ApressandfriendsofEDbooksmaybepurchasedinbulkforacademic,corporate,orpromotionaluse.eBookversionsandlicenses arealsoavailableformosttitles.Formoreinformation,referenceourSpecialBulkSales–eBookLicensingwebpageat http://www.apress.com/info/bulksales. Theinformationinthisbookisdistributedonan“asis”basis,withoutwarranty.Althougheveryprecautionhasbeentakeninthe preparationofthiswork,neithertheauthor(s)norApressshallhaveanyliabilitytoanypersonorentitywithrespecttoany lossordamagecausedorallegedtobecauseddirectlyorindirectlybytheinformationcontainedinthiswork. Thesourcecodeforthisbookisfreelyavailabletoreadersatwww.friendsofed.comintheDownloadssection. Credits LeadEditor ProductionEditor BenRenow-Clarke LauraEsterman TechnicalReviewer Compositor ChristopheHerreman DinaQuan EditorialBoard Proofreader ClayAndres,SteveAnglin,EwanBuckingham, AprilEddy TonyCampbell,GaryCornell,JonathanGennick, MatthewMoodie,JosephOttinger,JeffreyPepper, Indexer FrankPohlmann,BenRenow-Clarke, BeckyHornyak DominicShakeshaft,MattWade,TomWelsh ProjectManager Artist KylieJohnston AprilMilne CopyEditor InteriorandCoverDesigner KimWimpsett KurtKrames AssociateProductionDirector ManufacturingDirector KariBrooks-Copony TomDebolski For my dear, wonderful parents, Haluk and Mehlika Balkan. Thank you for a lifetime of unconditional love and support. Thank you for believing in me. Thank you for teaching me that I can do anything I set my mind to. I am forever in your debt. —Aral Balkan To Airi. —Nicolas Cannasse A glass raised to Winsor McCay—the original animator and one of America’s greatest talents. —Moses Gunesch To my wife, Jess, for putting up with me, and to the open source community, for constantly amazing me. —Marc Hughes To my family and friends who provide constant encouragement and support even though I often take on much more work than our relationships should allow. —R. Jon MacDonald CONTENTS AT A GLANCE AbouttheAuthors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv AbouttheTechnicalReviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Chapter 1 IntroducingtheWorldofOpenSourceFlash . . . . . . . . . . . . . 1 Chapter 2 ExploringOpenSourceFlash:What’sAvailable. . . . . . . . . . . . 7 Chapter 3 PreparinganOpenSourceWorkflow . . . . . . . . . . . . . . . . . . 19 Chapter 4 UsinganOpenSourceWorkflow . . . . . . . . . . . . . . . . . . . . . 55 Chapter 5 TestingandDebugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Chapter 6 DeployingYourApplication . . . . . . . . . . . . . . . . . . . . . . . . 131 Chapter 7 UsingAMFPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Chapter 8 WorkingwithSWX:TheNativeDataFormatfor theFlashPlatform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Chapter 9 UsinghaXe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Chapter 10 FuseandGoASAP:OpenSourceAnimationTools . . . . . . . 247 Chapter 11 UsingPapervision3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Chapter 12 IntroducingRed5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Chapter 13 BuildingSomeRed5 Apps. . . . . . . . . . . . . . . . . . . . . . . . . 337 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 v CONTENTS AbouttheAuthors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv AbouttheTechnicalReviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Chapter 1 IntroducingtheWorldofOpenSourceFlash . . . . . . . . . . . . . 1 Chapter 2 ExploringOpenSourceFlash:What’sAvailable. . . . . . . . . . . . 7 Communityopensourceinitiatives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Developmenttools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 MTASC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 ASDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 FlashDevelop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 haXedevelopmenttools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 swfmill. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 SWFObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Ant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Sprouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Librariesandtoolkits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 FuseKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Papervision3D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 ScreenweaverHX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Server-sidetechnologies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 AMFPHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Red5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 SWX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Adobeopensourceinitiatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Flex3SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 BlazeDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 ActionScript3libraries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Andmanymore.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 vii CONTENTS Chapter 3 PreparinganOpenSourceWorkflow . . . . . . . . . . . . . . . . . . 19 ActionScript3development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 IntroducingtheFlexSDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 InstallingtheJavaJDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 InstallingtheFlexSDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Configuringyoursystem’ssearchpath. . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Testingyourinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 InstallingFlashDevelop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 ActionScript2development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 InstallingMTASC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 InstallinganIDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 InstallingEclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 InstallingEclipseplug-ins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 InstallingASDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 InstallingFDT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 InstallingActionScript2libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Creatingaproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Commoncomponents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Installingswfmill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 InstallingXray. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 InstallingtheActionScript3connector . . . . . . . . . . . . . . . . . . . . . . . . . . 42 InstallingtheActionScript2connector . . . . . . . . . . . . . . . . . . . . . . . . . . 42 InstallingtheXrayinterface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Installingawebserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 InstallingAnt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 UsingFlashDeveloptocreateanActionScript3buildscript. . . . . . . . . . . . . . . . . 49 UsingEclipsetocreateanActionScript2buildscript. . . . . . . . . . . . . . . . . . . . . 50 Chapter 4 UsinganOpenSourceWorkflow . . . . . . . . . . . . . . . . . . . . . 55 Gettingassetsfromdesigners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 IntegratingSWFsfromdesigners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Creatingsomedata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 ActionScript3development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 CreatingaFlashapplicationwithFlashDevelop . . . . . . . . . . . . . . . . . . . . . . . . 60 Enteringthecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Buildingtheapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 BuildingwithAnt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 CreatingaFlexapplicationwithFlashDevelop. . . . . . . . . . . . . . . . . . . . . . . . . 71 Creatingtheproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Enteringthecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Buildingtheapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 BuildingwithAnt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 viii CONTENTS ActionScript2development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Addingtheassettoyourproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Modifyingthebuildprocess. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Readingalistofrecipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Copyingtheinputfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 CreateaRecipeclass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 LoadtheXMLfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 CreateanXMLparser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Bringingitalltogether. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Viewingtherecipedetails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 CreatingtheRecipeDetails.swffile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Updatingthebuildscript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 LoadingRecipeDetails.swf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Displayingtherecipedetails. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Chapter 5 TestingandDebugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Unittesting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Testcases,suites,andrunners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Testcase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Testsuite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Testrunner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Structuringtests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Creatingn-tieredtestinghierarchies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 GettingstartedwithAsUnit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 AnoverviewofkeyAsUnitclasses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 CreatinganAsUnittestcase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 CreatinganAsUnittestsuite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 CreatinganAsUnittestrunner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 GettingstartedwithFlexUnit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 CreatingtheFlexUnitexample. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 CreatingtheFlexUnittestcase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 CreatingtheFlexUnittestsuite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 CreatingtheFlexUnittestrunner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Asynchronoustesting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Furtherreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 UsingXrayasadebugtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 UsingXraytologeffectively . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 UsingtheXrayPropertyInspector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Takingasnapshot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Modifyingvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Inspectingnonvisualobjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 ExecutingActionScriptatruntime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 Findingperformancebottlenecks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 ix CONTENTS Chapter 6 DeployingYourApplication . . . . . . . . . . . . . . . . . . . . . . . . 131 EmbeddingSWFcontent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 UsingSWFObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 InstallingSWFObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 SWFObjectstaticpublishingmethod . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 SWFObjectdynamicpublishingmethod . . . . . . . . . . . . . . . . . . . . . . . . . 136 Stagingstrategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Transferringyourfiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 UsingAntandFTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 UsingAntandSFTP/SCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Executingcommandsontheserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Excludingfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Deployingdesktopapplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Howitworks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Creatingthefront-endSWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 CreatingtheScreenweaverback-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 CompilingtheScreenweaverback-end. . . . . . . . . . . . . . . . . . . . . . . . . . 148 InteractingwiththeScreenweaverapplicationfromFlash . . . . . . . . . . . . . . . . . 149 Distributingyourdesktopapplication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Chapter 7 UsingAMFPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 IntroducingAMFPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 WhatarethebenefitsofAMF? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 WhatarethebenefitsofusingAMFPHP?. . . . . . . . . . . . . . . . . . . . . . . . . . . 155 TherequirementsforusingAMFPHPintheexamples. . . . . . . . . . . . . . . . . . . . 155 Gettingstarted. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Installationrequirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Serverconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Testingtheserverinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 It’sinstalled! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Creatingyourfirstservice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 UsingtheServiceBrowsertool. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 ConsumingHelloWorld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 TheHelloWorldlogic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Creating,reading,updating,anddeletingwithFlashandPHP. . . . . . . . . . . . . . . . . . 164 Buildingthedatabaseadapter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Testingthedatabaseconnection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 IntegratingthedatabaseandFlash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Updatingtheproductdatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 AdditionalProductServicemethods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Interfacealterationstomanipulateproducts. . . . . . . . . . . . . . . . . . . . . . . . . 170 ConnectingtoHelloWorldwithFlex. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 UsingFlextoupdatetheproductdatabase. . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 ClassmappingfromPHPtoActionScript3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Creatingthedataaccessobject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 DisplayingvalueobjectsinFlex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Creatingtheapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 x CONTENTS Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Narrowingitdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 DealingwithacorruptPHPinstallation. . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Dealingwithserviceerrors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 DealingwithActionScripterrors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Thanks... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Chapter 8 WorkingwithSWX:TheNativeDataFormatfor theFlashPlatform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 TheSWXphilosophy:systemwidesimplicity. . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Enjoyable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Experience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Acommonvocabulary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Whydoyouneedanewdataformat?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Supportedplatformsandtechnologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 HowsimpleisSWX?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Divingdeeper:SWXAS,SWXServiceExplorer,SWXDataAnalyzer. . . . . . . . . . . . . . . 202 SWXAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 SWXServiceExplorer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 SWXDataAnalyzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 InstallingSWXonyourserver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 MacOSX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Allplatforms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Writingyourfirstcustomservice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 CreatingthecalculatorserviceclassinPHP. . . . . . . . . . . . . . . . . . . . . . . . . . 207 TestingthecalculatorservicewiththeSWXServiceExplorer. . . . . . . . . . . . . . . . 207 ConsumingyourcalculatorserviceinFlash. . . . . . . . . . . . . . . . . . . . . . . . . . 207 Usingaresulthandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Usingatimeouthandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Usingafaulthandler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Casestudy:p.i.n.k.Spirits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Project:utilizingacustomserviceinFlashLite . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Goal:aproductlocator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 ThePHPserviceclass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 DownloadingtheSWXActionScriptlibrary. . . . . . . . . . . . . . . . . . . . . . . . 214 SettinguptheFlashLiteapplicationFLA. . . . . . . . . . . . . . . . . . . . . . . . . 214 Establishinganinitialserviceconnection . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Creatingassetsforsearchandresultsstates . . . . . . . . . . . . . . . . . . . . . . . . . 218 Addingthefunctionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Gettingmoreinformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 xi CONTENTS Chapter 9 UsinghaXe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Flashfordevelopers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 ThearrivalofMTASC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 ActionScript3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 ThebirthofhaXe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 haXeforFlash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 InstallinghaXe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 haXeIDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Hello,haXe! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 HXMLfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 DisplayingtheSWF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 haXetrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 haXevs.ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Syntaxdifferences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Basictypesdifferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 APIdifferences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 haXefeatures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Feature1:libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Feature2:interoperability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Feature3:typeinference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Feature4:typedarrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Feature5:ActionScript3generator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Feature6:speed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Feature7:independence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Feature8:andmuchmore.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Chapter 10 FuseandGoASAP:OpenSourceAnimationTools . . . . . . . 247 IntroducingFuse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 IntroducingGoASAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Fuse2:solvingActionScript2problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Opensourcemash-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 TheneedforspeedinAVM1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Afasterengine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Realitycheck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 ZigoEngine:Fuse’sanimationengine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Beginneroptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Stylizingmotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Fuse:sequencingsimplicity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Animationshorthand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Aplayablelist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Smartparsershavemorefun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Matchingtimelinefunctionality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Keepin’itdynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 AproblemFuse2didn’tsolve. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 LifeafterFuse2:transitioningtoActionScript3 . . . . . . . . . . . . . . . . . . . . . . . . . 261 xii
Description: