<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5332102462806692298</id><updated>2011-12-28T06:40:11.965-08:00</updated><category term='Flash'/><category term='3D'/><category term='frameworks'/><category term='FDT'/><category term='sql'/><category term='php'/><category term='as2'/><category term='as3'/><category term='AIR'/><category term='video'/><category term='Flex'/><category term='flexmobile'/><category term='papervision'/><category term='project'/><category term='Web 2.0'/><category term='FlashLite'/><category term='AMFPHP'/><title type='text'>Tell me about computers</title><subtitle type='html'>Ramblings with a few photos of what I have been doing in with Flash/Flex/AIR and related technology arenas recently.  It's less hassle than keeping a portfolio up to date!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-8573757263189457788</id><published>2011-12-28T05:48:00.000-08:00</published><updated>2011-12-28T06:40:11.977-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='flexmobile'/><title type='text'>RTMFP - Flex Mobile Redeems Itself</title><content type='html'>&lt;font style="font-weight:bold;"&gt;Peer-to-peer with Flex Mobile using RTMFP&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;As I was starting to doubt that Flex Mobile, I had an idea to link together my iPad with my Android phone.  That was when I came across RTMFP.  This is a really really simple way to connect multiple devices on the same wireless network.  Just create a NetConnection and connect with 'rtmfp'.  Then join a group and you're good to send and receive messages from all members of the group!&lt;br /&gt;&lt;br /&gt;I created a simple app which will transfer images between the devices.  I am sure this will not be allowed by Apple as it means you can transfer images without iTunes.  Great for me though!&lt;br /&gt;&lt;br /&gt;It should be possible to transfer any type of file between any devices that support AIR using this technique.  It's not super quick (takes about 4 seconds to transfer an image) but could probably be speeded up by using FZip of something similar. &lt;br /&gt;&lt;br /&gt;To use devices that are not connected via the same LAN is still possible, but you'd need to use Adobe's Cirrus.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/%20http://labs.adobe.com/technologies/cirrus/"&gt;http://labs.adobe.com/technologies/cirrus/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;which is not currently available for commercial use.&lt;br /&gt;&lt;br /&gt;Here is the code snippet to connect devices on the same LAN.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;localNc = new NetConnection();&lt;br /&gt;localNc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);&lt;br /&gt;localNc.connect("rtmfp:");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Then you need to join a group:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//define the group&lt;br /&gt;var groupspec:GroupSpecifier = new GroupSpecifier("MyGroupName");&lt;br /&gt;groupspec.ipMulticastMemberUpdatesEnabled = true;&lt;br /&gt;groupspec.multicastEnabled = true;&lt;br /&gt;groupspec.routingEnabled = true;&lt;br /&gt;groupspec.postingEnabled = true;&lt;br /&gt;//multicast ip should begin with 224 at least and port should be higher than 1024&lt;br /&gt;groupspec.addIPMulticastAddress("238.254.254.1:30302");&lt;br /&gt;//creates/joins existing group&lt;br /&gt;netGroup = new NetGroup(localNc, groupspec.groupspecWithAuthorizations());&lt;br /&gt;netGroup.addEventListener(NetStatusEvent.NET_STATUS, netStatus);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To send an image, you first need to turn it into a byte array:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var size:Rectangle = new Rectangle(0,0,loader.content.width,loader.content.height);&lt;br /&gt;var byteArray:ByteArray = Bitmap(loader.content).bitmapData.getPixels(size);&lt;br /&gt;byteArray.position = 0;&lt;br /&gt;//send object to listeners&lt;br /&gt;netGroup.sendToAllNeighbors({type:GALLERY_IMAGE, size:size,ba:byteArray});&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;When this is received it can be deserialsed.  Here I display the image and attempt to save it to the gallery as well:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var byteArray:ByteArray = data.ba;&lt;br /&gt;var bitmapData:BitmapData = new BitmapData( data.size.width,  data.size.height, false,0x00000000);&lt;br /&gt;bitmapData.setPixels(new Rectangle(0,0, data.size.width,  data.size.height),byteArray);&lt;br /&gt;myImage.source =  bitmapData;&lt;br /&gt;if(CameraRoll.supportsAddBitmapData){&lt;br /&gt; //this will probably not be allowed by Apple as I believe it is against their control policy&lt;br /&gt; trace('saving image to gallery');&lt;br /&gt; var cr:CameraRoll = new CameraRoll();&lt;br /&gt; cr.addBitmapData(bitmapData);&lt;br /&gt;}else{&lt;br /&gt; trace('cannot save image to gallery');&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The full source for this experiment can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jeejee.co.uk/chris/MobileP2PTests.mxml"&gt;SOURCE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's rough, but just shows the process of how to do the above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-8573757263189457788?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/8573757263189457788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=8573757263189457788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8573757263189457788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8573757263189457788'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2011/12/rtmfp-flex-mobile-redeems-itself.html' title='RTMFP - Flex Mobile Redeems Itself'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-3372463161952333354</id><published>2011-12-28T05:20:00.000-08:00</published><updated>2011-12-28T06:37:02.301-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='flexmobile'/><title type='text'>Flex Mobile In Practice</title><content type='html'>So I need to make an a mobile app... should I build it natively twice (I can do a bit of Java dev, but would have to learn xcode a bit better for this), build it in HTML (not sure how jazzy it's going to look) or try out Flex mobile (should be easy for an AS3 developer right?!  And it's going to work on a Blackberry Playbook without any extra work!).&lt;br /&gt;&lt;br /&gt;So, I have spent a few weeks exploring the pros and cons of Flex mobile development.  There are a number of decent tutorials that are out there, but I found that I still had to work out a lot of stuff for myself (like in the olden days), so I decided to note down a few things that I have learnt that may save someone a bit of searching.&lt;br /&gt;&lt;br /&gt;This is written for experienced AS3 developers.  The things I picked up are from my own research and inevitably a bit of searching on the web.&lt;br /&gt;&lt;br /&gt;I usually don't work in Flex, just pure AS3.  I decided to go down the Flex route for this though, mainly to save time as I didn't want to build common components from scratch and that Adobe are pushing 'Flex Mobile', which comes with a few nice inclusions such as (amongst other things) simple navigation and data storage.&lt;br /&gt;&lt;br /&gt;The first thing I learnt was that in actual fact, although some components are, not all Flex components are actually 'mobile ready' at the time of writing.  The list of ones that are ready, which should be kept up to date can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/skins/mobile/package-detail.html"&gt;http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/skins/mobile/package-detail.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the end I used Flash Builder 4.6 as it worked with Flex 4.6 out of the bag.  I usually use FDT, but Flash Builder seems a bit better at dealing with MXML for the uninitiated, as it's always possible to switch to design view.  There was also an issue whereby I couldn't get FDT debug to run on my device either, but it seemed to work ok from Flash Builder and I didn't have the patience to work out why.&lt;br /&gt;&lt;br /&gt;The devices I was testing on were an HTC Incredible S and a Sony S Tablet.  Setting up the Android SDK  and getting them recognised by the ADT was pretty straight forward and there are lots of tutorials that will help you do this.  The only minor pain was finding drivers for the devices, but this was just a case of googling around a bit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Switching between layouts &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When making any mobile app, effectively you are making an app that needs to look good in three resolutions (160,240 and 320 dpi) all of which run in two layouts (horizontal and vertical).  So that's 6 different layouts per app!&lt;br /&gt;From reading around, it seems that the best thing to do is to make the app for the smallest target dpi (160) and scale up.  Bitmaps are handled slightly differently but I'll look at that later.  By declaring the application dpi in the application's mxml constructor (not sure the correct name for this in Flex) as such:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;applicationDPI="160"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Flex will then scale everything up automatically for the bigger dpi's.&lt;br /&gt;One of the drawbacks of this are that it's probably not desirable for bitmaps to be scaled up.  This is easily remedied by using the mutli-dpi source bitmap property of a Flex Image component.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;s:image id="myImage"&amp;gt;&lt;br /&gt;&amp;lt;s:source&amp;gt;&lt;br /&gt;  &amp;lt;s:multidpibitmapsource&lt;br /&gt;source160dpi="assets/low-res/my-image.jpg"&lt;br /&gt;source240dpi="assets/med-res/my-image.jpg"&lt;br /&gt;source320dpi="assets/high-res/my-image.jpg"&amp;gt;&lt;br /&gt;  &amp;lt;/s:multidpibitmapsource&amp;gt;&lt;br /&gt;&amp;lt;/s:source&amp;gt;&lt;br /&gt;&amp;lt;/s:image&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;All three images get packaged up into your application, but the one closest to the target applications dpi will be used.  Simple.&lt;br /&gt;&lt;br /&gt;One thing that I wanted to do was to be able to change the actual layout when there were different dpi's and different orientations.  The 'cleanest' way seemed to be through CSS.  It took a bit of messing around but eventually I worked out how to do this.&lt;br /&gt;&lt;br /&gt;For orientations, it was just a case of listening to the onResize event in the main application and then check whether the width was more than the height or visa versa.  This would tell me whether the app was in landscape or portrait.&lt;br /&gt;&lt;br /&gt;So, in the application's mxml constructor I defined resize function:&lt;br /&gt;resize="resizeHandler(event)"&lt;br /&gt;&lt;br /&gt;defined the possible orientation states:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;s:states&amp;gt;&lt;br /&gt;        &amp;lt;s:state name=&amp;quot;portraitPhone&amp;quot; stategroups=&amp;quot;phone,portrait&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;s:state name=&amp;quot;landscapePhone&amp;quot; stategroups=&amp;quot;landscape,phone&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;s:state name=&amp;quot;portraitTablet&amp;quot; stategroups=&amp;quot;portrait,tablet&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;s:state name=&amp;quot;landscapeTablet&amp;quot; stategroups=&amp;quot;landscape,tablet&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;/s:state&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;and defined the resize handler, which would work out what the orientation and device type was.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;protected function resizeHandler(event:ResizeEvent):void&lt;br /&gt;{&lt;br /&gt;var isPortrait:Boolean = height &amp;gt; width;&lt;br /&gt;//determining if its a tablet worked ok with the hardware I tested, but this is not a water tight method.&lt;br /&gt;isTablet = height &amp;gt; 960 || width &amp;gt; 960;&lt;br /&gt;&lt;br /&gt;var orientation:String = (isPortrait ? "portrait" : "landscape");&lt;br /&gt;var device:String = (isTablet ? "Tablet" : "Phone");&lt;br /&gt;&lt;br /&gt;currentState = orientation + device;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ok, so that's pretty easy.&lt;br /&gt;&lt;br /&gt;The CSS in Flex is pretty nifty and can be written in such a way as to change automatically depending on the state of the application.  This makes it easy to deal with the orientations.  The example I am about to give is not that great.  It shows what I am talking about, but once I had it sussed I found out that Form components were not actually mobile ready!  Still, the syntax is the same.  It's possible to change properties of classes as such:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;s|Application:portraitPhone s|FormItem #labelDisplay&lt;br /&gt;{&lt;br /&gt;text-align: left ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;s|Application:landscapePhone s|FormItem #labelDisplay&lt;br /&gt;{&lt;br /&gt;text-align: right ;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and also the skins of componenets as such:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;s|Application:portraitPhone s|FormItem&lt;br /&gt;{&lt;br /&gt;skinClass: ClassReference("spark.skins.spark.StackedFormItemSkin");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;s|Application:landscapePhone s|FormItem&lt;br /&gt;{&lt;br /&gt;skinClass: ClassReference("spark.skins.spark.FormItemSkin");&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So, as I was changing the state dependant on orientation in the main Application class, the syntax is:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;s|Application:&lt;span style="font-style:italic;"&gt;stateName&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;When the main application changes state the Forms label display should switch from left to right.  There was a few more bits of CSS to get the form changing but as I mentioned above, at the moment, you shouldn't be using Forms components in mobile apps, so I won't bother to show the complete example.&lt;br /&gt;&lt;br /&gt;Now to get the componenets to update their CSS and redraw at runtime, you will need to add the following line to the end of the resize handler:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;styleManager.styleDeclarationsChanged();&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I have no idea how fast or slow this is in comparison to other methods people may have, or whether there is a better solution, but the method above seems clean and can be used in conjuction with dpi declarations by nesting them in a @media tag (this is not something I got round to testing mind).  It would look something like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;/* landscape @ 240dpi */&lt;br /&gt;@media (application-dpi: 240) {&lt;br /&gt;s|Application:landscapePhone s|FormItem&lt;br /&gt;{&lt;br /&gt;skinClass: ClassReference("spark.skins.spark.FormItemSkin");&lt;br /&gt;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So, that is the basics of dealing with the different layouts on Flex mobile.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Loading in local HTML files&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One thing I wanted to do, as lots of apps will, is to use Google Maps.  This is very simple and looks great using native Android programming, but I found that the same is not true in Flex.  In fact I would go as far as to say that if you want to use Google Maps in your app then don't use Flex.  It sucks.&lt;br /&gt;&lt;br /&gt;As the Flash API is now deprecated from Google Maps (and even if you do use it, it won't work on Apple devices), the answer is to use the Javascript API.  Hmmmm.... There were a number of things I needed to do such as placing down markers that the user could then move around so i figured I needed some JS functions to achieve this.  No problem, I would just use a static HTML page, put all the JS I needed into that and load that into a stageWebView.&lt;br /&gt;&lt;br /&gt;Displaying local HTML pages in a Flex mobile app and communicating with it via JavaScript was not as straightforward as I had hoped.  After a lot of looking around, experimenting, laughing, crying and cups of tea I ended up using this incredibly useful set of classes called the stageWebViewBridge.  The details of this project can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/%20http://code.google.com/p/stagewebviewbridge/"&gt;&lt;br /&gt;http://code.google.com/p/stagewebviewbridge/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Essentially it simplifies the process of loading in local files and communicating via JavaScript.  The wiki entry regarding loading the files was still a bit confusing if using Flash Builder as all the examples are made in Flash CS 5.5 (yes some serious programmer is still using Flash!).  The main confusion for myself was working out where to put the HTML files on my machine and how to reference that location from Flash Builder so I will try and clear that up a bit.&lt;br /&gt;&lt;br /&gt;When running the app from Flash Builder on a device all you need to do is to create a folder called "www" in the source folder (by default src).  This automatically gets copied across to the bin-debug folder by Felx and can then be loaded using:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;webView.loadLocalURL("applink:/myHTMLpage.html");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;When running using the emulator, things seemed a tad more odd.  I had to put the files in:&lt;br /&gt;&lt;br /&gt;C:\Users\&lt;span style="font-style:italic;"&gt;UserName&lt;/span&gt;\AppData\Roaming\LocationAlarm.debug\Local Store\wwwSource&lt;br /&gt;&lt;br /&gt;Which got copied across to&lt;br /&gt;&lt;br /&gt;C:\Users\&lt;span style="font-style:italic;"&gt;UserName&lt;/span&gt;\AppData\Roaming\LocationAlarm.debug\Local Store\www&lt;br /&gt;&lt;br /&gt;at runtime by the bridge. To load the file was exactly the same as for using a device.&lt;br /&gt;&lt;br /&gt;Communication to and from JavaScript was very simple and needs no explanation.  Just read the stageWebViewBridge wiki on the link above.&lt;br /&gt;&lt;br /&gt;One issue I did have was due to the auto-scaling feature of Flash mobile that I was using.  The viewport for the StageWebView needs to have it's size set in pixels.  I was using a TabbedViewNavigatorApplication as my main class and wanted the web view to sit inside this.  The StageWebView reminds me a bit of the 'directToStage' video in Director (remember that?) in that it sits above all content above the actual application.  So, it needs to be the right size. My tabbed navigator was using auto-scaling though, so I had to work out how many pixels big the StageWebView needed to be for the current device.  I couldn't find an elegant solution for this but I did find a solution.  As discussed here you need to scale it yourself:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/6759547/air-stagewebview-on-iphone"&gt;http://stackoverflow.com/questions/6759547/air-stagewebview-on-iphone&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, I needed to get the size of the screen inbetween the (scaled) top bar and the (scaled) tabs.  This is how I did that:&lt;br /&gt;&lt;br /&gt;//firstly get the current scale factor&lt;br /&gt;&lt;code&gt;var currentFlexScalingFactor:Number=FlexGlobals.topLevelApplication.runtimeDPI/FlexGlobals.topLevelApplication.applicationDPI;&lt;br /&gt;//then get the size of the screen minus the scaled sizes of the top bar and the bottom nav buttons&lt;br /&gt;webView.viewPort=new Rectangle(0, systemManager.screen.height*currentFlexScalingFactor-height*currentFlexScalingFactor-FlexGlobals.topLevelApplication.tabbedNavigator.tabBar.height*currentFlexScalingFactor,width*currentFlexScalingFactor,height*currentFlexScalingFactor);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Not very pretty, but it works.&lt;br /&gt;The code to size the viewport needs to be called when the device's orientation changes as well.  This will not happen automatically.&lt;br /&gt;&lt;br /&gt;So, ultimately I got my map working, but then came across a problem whereby the actual web page would zoom in and out when using pinch/reverse pinch gestures.  So the map controls then get massive when zooming in and out, rather than just the map.  I found the following "fix" for this.  In the HTML page (which I created) just add the following meta tag:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Simple? Well it would be if it worked.  Unfortunately HTC have their own flavour of browser which doesn't support the viewport meta tag.  This means that on virtually all HTC devices (I believe there may be one exception) the stageWebView is not a good user experience.&lt;br /&gt;&lt;br /&gt;I guess (although am yet to test) that this means HTML based apps will suffer the same problems on HTC devices.  If so, they're not an option for commercial apps targeting Android.  HTC has distributed way too many devices to be ignored.&lt;br /&gt;&lt;br /&gt;Next up was storing data locally.  This was easy enough.  I ended up using a SQLlite database.  This is done the same as it would be in any AIR application.  There are great tutorials all over the web on this so I will not bother to explain how this is done.&lt;br /&gt;&lt;br /&gt;There is an 'auto-save' type function alos, to save small bits of data when switching between views.  Essentially, you just turn it on in the main navigation constructor by setting:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;persistNavigatorState="true"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;As far as I could tell this is a shortcut to creating shared objects which you save and load using:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;//set value&lt;br /&gt;persistenceManager.setProperty("someProp","myProperty");&lt;br /&gt;//get value&lt;br /&gt;persistenceManager.getProperty("someProp");&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;A more detailed discussion of how this works and other ways of working with it can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devgirl.org/2011/05/18/flex-4-5-mobile-data-handling/"&gt;http://devgirl.org/2011/05/18/flex-4-5-mobile-data-handling/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;By this point I had come to the conclusion that Flex Mobile was not good at handling any of the 'phone' features that may need to be intergrated.  I had a brief look at using Native Libraries to get the phone to vibrate but it isn't a simple procedure.  When making a native android app it's two lines of code!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-3372463161952333354?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/3372463161952333354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=3372463161952333354' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/3372463161952333354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/3372463161952333354'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2011/12/flex-mobile-in-practice.html' title='Flex Mobile In Practice'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-5212515954320407184</id><published>2011-03-27T14:24:00.000-07:00</published><updated>2011-12-28T05:20:03.284-08:00</updated><title type='text'>Nissan Music Mixer</title><content type='html'>UPDATE:  This project won a DMA Gold Award (whatever that's worth)&lt;br /&gt;&lt;a href="http://www.dmaawards.org.uk/content/2011gold-best-use-social-media-or-viral"&gt;http://www.dmaawards.org.uk/content/2011gold-best-use-social-media-or-viral&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-RAeqdDr3xk8/TY-t4wHwXSI/AAAAAAAAAHI/_hvRhUeuF34/s1600/Nissan_juke_1.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 172px;" src="http://1.bp.blogspot.com/-RAeqdDr3xk8/TY-t4wHwXSI/AAAAAAAAAHI/_hvRhUeuF34/s320/Nissan_juke_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5588876853091786018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I recently worked on a really interesting project for Nissan, which essentially was to be a live mixing desk.  As doing anything 'clever' with sound in Flash is something most people (bar Andre Michelle) steer clear of I was looking forward to seeing how much things had changed since my last sound exploits.  Not being a maestro of digital sound/music creation, I knew this was going to be fairly tough assignment but one I was going to learn a lot from.&lt;br /&gt;&lt;br /&gt;The brief went something like this.  The application would consist of five sound channels each channel being a different component of a song (e.g. drums, bass etc).  The channels would be represented by cars (the Nissan angle).  Each channel would play one of five loops, each loop being a different genre of music (e.g. funk, ambient, rock) which could be changed by clicking on the car.  It was also to be possible to change the volume of each channel by moving the car forward and backward.  The idea then was that the user could mix and match genre on the fly, bringing in and out different components of the track to create their own master piece.  There needed to be a number of sound effects that could be applied too, such as envelopes, flanges and such like.  Once they had a play around, they could then record a mix, which would be uploaded to a server as an MP3.  Oh, and they wanted some lighting effects in the background (such as fireworks) and a spectrum analyser!  Nothing too much then.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-xGjfaDLrRtc/TY-t5KEUzkI/AAAAAAAAAHQ/rOaG4pXyjUw/s1600/Nissan_juke_2.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 190px; height: 113px;" src="http://2.bp.blogspot.com/-xGjfaDLrRtc/TY-t5KEUzkI/AAAAAAAAAHQ/rOaG4pXyjUw/s320/Nissan_juke_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5588876860056718914" border="0" /&gt;&lt;/a&gt;Initially there were a number of technical questions I had, like what the hell is a flange and whether it was even possible to create an MP3 from within Flash!  Also, how much control we had over the loops (which were to be made by LaRoux) in regards to length and BPM as I had an idea matching up beats was going to be very difficult, given Flash's slack regard to accurate timing!&lt;br /&gt;&lt;br /&gt;So, beat matching... firstly it was decided that the loops should all be the same length and the same BPM as this would make life easier.  Naturally there were assets available but luckily one of the guys I was working with was really into his music and knocked up some beats for me.  It soon became apparent that Flash's onSoundComplete event is hopelessly inefficient for beat matching as there would always end up being a very small delay between stopping and starting a sound, which was never going to acceptable.&lt;br /&gt;&lt;br /&gt;Eventually (with a little help from my very talented friend &lt;a href="http://www.kelvinluck.com/" target="_blank"&gt;Kelvin Luck&lt;/a&gt;!) I turned to ByteArrays. The solution was to start a single 'empty' sound and add a SampleDataEvent.SAMPLE_DATA event, which would be called everytime the sound buffer was empty.  It was then a case of reading the correct samples of each track that was designated to play, alter the volumes of the samples to that which were set, add any sound effect that was on at the time and then write this out to the event data to be outputed as one sound.  By doing the mixing in Flash and playing a single sound, things would never get out of synch, which was always the problem playing and changing multiple sounds at the same time.&lt;br /&gt;&lt;br /&gt;So first I needed to start the empty sound and listen for the SampleDataEvent.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;_sound = new Sound();&lt;br /&gt;_sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);&lt;br /&gt;_sound.play();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I would store an index for the current sample to read which would be incremented by 4096 (1 second) each time the buffer was empty.  When the function was called, I extracted the appropriate samples from each of the tracks that were playing.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;//Get index&lt;br /&gt;var n:int = _currentSample + 1 *SAMPLES_PER_EVENT; //SAMPLES_PER_EVENT was set at 4096&lt;br /&gt;&lt;br /&gt;//create Vectors for the extracted audio and the volumes&lt;br /&gt;var extractedAudios:Vector.&lt;bytearray&gt; = new Vector.&lt;bytearray&gt;();&lt;br /&gt;var volumes : Vector.&lt;number&gt; = new Vector.&lt;number&gt;();&lt;br /&gt;&lt;br /&gt;//and another Vector for the final output&lt;br /&gt;var buffer : Vector.&lt;vector.&gt;&lt;number&gt;&amp;gt; = new Vector.&lt;vector.&gt;&lt;number&gt;&amp;gt;();&lt;br /&gt;buffer[0] = new Vector.&lt;number&gt;();&lt;br /&gt;buffer[1] = new Vector.&lt;number&gt;();&lt;br /&gt;&lt;br /&gt;for each(var loopId:int in loopIds) {&lt;br /&gt;var playableLoop:PlayableLoop = loops[loopId];&lt;br /&gt;&lt;br /&gt;  if (playableLoop.isPlaying) {&lt;br /&gt;      //store the volume of the track&lt;br /&gt;      volumes.push(playableLoop.volume);&lt;br /&gt;      //create a new byte array&lt;br /&gt;      var sd:ByteArray = new ByteArray();&lt;br /&gt;      //get all the samples up to the total samples of the loop&lt;br /&gt;      var samplesLoaded:int = playableLoop.sound.extract(sd, SAMPLES_PER_EVENT, _currentSample % _totalSamples);&lt;br /&gt;      //get some more samples from the start of the track if the loop got to the end&lt;br /&gt;      if (samplesLoaded &amp;lt; SAMPLES_PER_EVENT) {&lt;br /&gt;          playableLoop.sound.extract(sd, SAMPLES_PER_EVENT - samplesLoaded, 0);&lt;br /&gt;      }&lt;br /&gt;      //reset the byte array position&lt;br /&gt;      sd.position = 0;&lt;br /&gt;      //add the byteArray to the Vector&lt;br /&gt;      extractedAudios.push(sd);&lt;br /&gt;  }&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then I looped through all the extracted samples multiplying the bytes by the volume of the channel and then looped through again, adding the bytes together.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;for (; _currentSample &amp;lt; n ;  _currentSample++) {&lt;br /&gt;  var leftChannel:Number = 0;&lt;br /&gt;  var rightChannel:Number = 0;&lt;br /&gt;&lt;br /&gt;  var index:Number = 0; &lt;br /&gt;&lt;br /&gt;  for each(var soundData:ByteArray in extractedAudios) {&lt;br /&gt;      leftChannel += (soundData.readFloat()*volumes[index]);&lt;br /&gt;      rightChannel += (soundData.readFloat()*volumes[index]);&lt;br /&gt;      index++;&lt;br /&gt;  }&lt;br /&gt;  buffer[0].push(leftChannel);&lt;br /&gt;  buffer[1].push(rightChannel);&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt; &lt;br /&gt;This could perhaps be done in the first loop to make it more effecient, but it worked fine so I just left it as such.  I needed to add the effects too.  I don't have the knowledge required to write sound modulators from scratch so adapted some I found on &lt;a href="http://blog.andre-michelle.com/2007/popforge-opensouce-project/"&gt;popforge by Andre Michelle&lt;/a&gt;.  These took a Number Vector as input and made the mathematical changes for the required effect.&lt;br /&gt;&lt;br /&gt;With all that done, I could loop through and write out the byte arrays into the event.&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;for ( ; i &amp;lt; len ; i++) {&lt;br /&gt;  event.data.writeFloat(buffer[0][i]);&lt;br /&gt;  event.data.writeFloat(buffer[1][i]);&lt;br /&gt;}&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Eh voila, the sound mixing part of the project was done!&lt;br /&gt;&lt;br /&gt;The next challenge was to create an MP3 from within Flash. Again, a tricky task indeed, if infact it could be done.  After a whole lot of googling and experimenting, it seemed that it was going to be possible to create a WAV from within Flash, and then post that to the backend to be converted into an MP3.  I think someone 'may' have written a WAV to MP3 converter in Flash using Alchemy (I vaugely remember seeing something like that), but the client was happy enough with a WAV, which in itself was pretty tricky to do.&lt;br /&gt;&lt;br /&gt;Luckily I found a &lt;a href="http://markmail.org/message/dy5j7obrkudxg3qf" target="_blank"&gt;WAVWriter class by Bernard Visscher&lt;/a&gt;, which took the samples as a byteArray, adds a header and rewrites the samples so that they are read correctly when played as a WAV.  Job done!  To test I saved the WAV to the desktop using the FileReference class and it worked great, other than that Flash can't time 30 seconds accurately and the tracks were usually about 36 seconds long using getTimer() in Flash to time 30 seconds!  I soon found &lt;a href="http://www.computus.org/journal/?p=25" target="_blank"&gt;John Dalziel's Timekeeper class&lt;/a&gt; which sorted this out without any dramas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-5212515954320407184?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/5212515954320407184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=5212515954320407184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5212515954320407184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5212515954320407184'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2011/03/nissan-music-mixer.html' title='Nissan Music Mixer'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-RAeqdDr3xk8/TY-t4wHwXSI/AAAAAAAAAHI/_hvRhUeuF34/s72-c/Nissan_juke_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-8645535430987869639</id><published>2011-03-27T14:18:00.000-07:00</published><updated>2011-04-01T05:07:20.352-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Is the future of Flash mobile?</title><content type='html'>Recently I started to get interested in the future of Flash.  Given all the Apple fueled hype of HTML 5 I wondered where will Flash be most useful.  One massive problem with mobile and tablet development is that when a client wants an application to run on mobile then it has to be remade at great expense on each platform.  I would have to find an Objective C developer for the mandatory iPhone version, a Java programmer for the Android version and so on.  The images have to be remade and the projects have to managed.  Not an ideal scenario...&lt;br /&gt;&lt;br /&gt;This is where AIR comes (is coming?) in.  I find that mobile apps are often 'addons' to the main web offerings.  If the web app is already done in Flash/Flex then it seems like a good idea to create all the other versions in AIR, as most the code is already done.&lt;br /&gt;&lt;br /&gt;I had a friend who has a Flash game that he wanted to put onto Android, so I thought this would be the perfect time to have a look at how Flash Mobile is getting on.  I downloaded the Flex Hero SDK, the Android SDK and after looking around the web a lot managed to get it all working with FDT.  I found a beautie &lt;a href="http://www.terrenceryan.com/blog/post.cfm/using-ant-to-package-the-same-air-app-to-multiple-devices"&gt;ANT script that will output multiple versions&lt;/a&gt; to iPhone, Android and Blackberry Tablet (of which I know nothing about).  Anyway I only got to test the Android version on a Galaxy Tab and it worked straight off the bat.&lt;br /&gt;&lt;br /&gt;I tried the same project, compiling from Flash CS5 as well, which was super super easy to set up and run.&lt;br /&gt;&lt;br /&gt;Also I had a look at Flash Builder Burrito, which has some nice project templates for mobile apps and the Hero components, which are Flex components for use on all mobile platforms to try and keep the interface consistent.&lt;br /&gt;&lt;br /&gt;The main downside to using AIR is that it will not run as fast as natively programmed apps and that there is no access to native componenets (sliders, buttons and so on) so the app will not look like a native app.&lt;br /&gt;&lt;br /&gt;Juding by what I played around with, it looks like Adobe have really targeted mobile development for the next phase of the future of digital communication and I think there will be real benefits for AIR in the mobile market place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-8645535430987869639?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/8645535430987869639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=8645535430987869639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8645535430987869639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8645535430987869639'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2011/03/is-there-future-for-flash-mobile.html' title='Is the future of Flash mobile?'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-801662108643600495</id><published>2010-10-22T13:01:00.000-07:00</published><updated>2010-10-22T13:15:56.505-07:00</updated><title type='text'>Unity 3D two day training course</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/TMHwrqIzO5I/AAAAAAAAAGk/-Ws3lg_uzCg/s1600/Unity3D_0.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 242px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/TMHwrqIzO5I/AAAAAAAAAGk/-Ws3lg_uzCg/s320/Unity3D_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5530966450223922066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/TMHwrzqcTGI/AAAAAAAAAGs/N5PL9FXbHlg/s1600/Unity3D_2.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 238px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/TMHwrzqcTGI/AAAAAAAAAGs/N5PL9FXbHlg/s320/Unity3D_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5530966452780944482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/TMHwsLh2UmI/AAAAAAAAAG0/Mfm3X6ozQlE/s1600/Unity3D_1.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 243px;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/TMHwsLh2UmI/AAAAAAAAAG0/Mfm3X6ozQlE/s320/Unity3D_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5530966459187352162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have just completed a 2 day training course in using Unity3D which I thought would be another string to my bow.  I think it's useful to have 'some' knowledge about as many technologies as possible to keep decision making over which technology is best for a job less biased.  Given the choice I think people tend to go for what they know rather than what is most appropriate.&lt;br /&gt;&lt;br /&gt;Unity3D is an IDE specifically built for creating 3D games.  It's cross platform and has exporters for iPhone, Android, standalone (for PC and Mac) and web.  Initially it was for first person games only, but in the most recent release it will support third person games as well.  This is great, as I did worry about the variety of games that would end up being created.  There's only so many ways to skin a cat, and FPS's have been done to death on the console.&lt;br /&gt;&lt;br /&gt;So Unity3D is amazing for creating terrains and running around in them.  This can be done very quickly with no coding necessary.  All the collistion detection can be done very simply too.  Shadows are a breeze to create (baked that is... real time shadows didn't really look that great).  There is a really good physics engine built in and the whole thing runs really quickly.  Yeah, you have to install the plugin, but it's really quick and easy.  I don't think that will be a barrier to it's future.&lt;br /&gt;&lt;br /&gt;The scripting can be done in c# or javascript.  I think the scripting side may seem a bit messy compared to most modern languages, and is a bit reminiscent of the days AS2.  Organising which scripts are attached where and referencing other scripts can lead to messy code.  I was told that the c# code supports listeners but haven't got round to looking to see if that works the same way as it does in AS.&lt;br /&gt;&lt;br /&gt;Here is the game I ended up creating:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://online-bingo-halls.com/Unity/index.html"&gt;Unity3D ROBOT WARS IN THE DESERT!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was inspired to make some more games, but finding the right models for my ideas may put a stop to me getting too into the whole thing.  I like the ability in 2D to be able to quickly knock up images for myself to use which is proving a lot more time consuming in 3D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-801662108643600495?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/801662108643600495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=801662108643600495' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/801662108643600495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/801662108643600495'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2010/10/unity-3d-two-day-training-course.html' title='Unity 3D two day training course'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_b2NoaZMSi58/TMHwrqIzO5I/AAAAAAAAAGk/-Ws3lg_uzCg/s72-c/Unity3D_0.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-5988371520953974247</id><published>2010-10-19T13:08:00.000-07:00</published><updated>2010-10-19T13:24:51.693-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='papervision'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Sony 3D</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/TL39JYkPYtI/AAAAAAAAAGc/m3pBibfLEYc/s1600/Sony_3d_1.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 189px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/TL39JYkPYtI/AAAAAAAAAGc/m3pBibfLEYc/s320/Sony_3d_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5529854255135941330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/TL39JXXPtqI/AAAAAAAAAGU/aCGVEcqsCDc/s1600/Sony_3d_0.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 188px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/TL39JXXPtqI/AAAAAAAAAGU/aCGVEcqsCDc/s320/Sony_3d_0.jpg" alt="" id="BLOGGER_PHOTO_ID_5529854254813001378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/TL39JEBh8fI/AAAAAAAAAGM/NN51kYnyq90/s1600/Sony_3d_2.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 188px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/TL39JEBh8fI/AAAAAAAAAGM/NN51kYnyq90/s320/Sony_3d_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5529854249621647858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was lucky enough to recently re-make the Sony 3D European flagship site at Tonic.&lt;br /&gt;The site supports around 25 countries, all of which need to able to localise all new and existing content as well as customise the size and style of boxes.&lt;br /&gt;&lt;br /&gt;The site was made originally for the US market by a Japanese company, and then hacked by a number of developers so that it had become completely unmaintainable.  This wasn't helped by Sony's CMS/asset server set up which really seems to be set up for banners and microsites, as opposed to this pretty huge Flash site.&lt;br /&gt;&lt;br /&gt;I was charged with starting from scratch to create a version that could be used going forward.  I really had carte blanche to approach it any way I saw fit.  After a number of discussions with the Tech Director, we decided to try and remake it in Robot Legs using a very different structure than was there.  Also we intergrated the build into Hudson and using Ant, got it building and deploying automatically to a test server.&lt;br /&gt;&lt;br /&gt;Code wise it took a while to pull out the useful bits and I had to rewrite most of it.&lt;br /&gt;&lt;br /&gt;The final product is about 10x quicker than the original (even quicker than the original Japanese version) and changes that before were taking a week could now be done in a day.  All in all a great project to be involved in.  It's one of the very few projects I've worked on that makes good use of Papervision and not a carousel in sight!&lt;br /&gt;&lt;br /&gt;At the time of writing, the UK version is available to see here:&lt;br /&gt;&lt;a href="http://www.sony.co.uk/article/id/1237477711352"&gt;Sony 3D World&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-5988371520953974247?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/5988371520953974247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=5988371520953974247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5988371520953974247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5988371520953974247'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2010/10/sony-3d.html' title='Sony 3D'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_b2NoaZMSi58/TL39JYkPYtI/AAAAAAAAAGc/m3pBibfLEYc/s72-c/Sony_3d_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-7176960773541509862</id><published>2010-06-03T14:25:00.000-07:00</published><updated>2010-06-04T02:13:49.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Childline</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgehuZee4I/AAAAAAAAAF0/1qRrOKjsyO8/s1600/img1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgehuZee4I/AAAAAAAAAF0/1qRrOKjsyO8/s320/img1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478662511435611010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgehQeIQvI/AAAAAAAAAFs/Tyh-hyVtMaU/s1600/img2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 208px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgehQeIQvI/AAAAAAAAAFs/Tyh-hyVtMaU/s320/img2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478662503402062578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgehIJQSaI/AAAAAAAAAFk/HRSh2KSwuRQ/s1600/advert.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 181px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgehIJQSaI/AAAAAAAAAFk/HRSh2KSwuRQ/s320/advert.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478662501167024546" /&gt;&lt;/a&gt;&lt;br /&gt;One of the latest projects I did was a hi profile job for Saatchi/MovingPictureCompany which was part of a large crosss-media campaign for the NSPCC called &lt;a href='http://www.howyoufeelinremixer.com/' target='_blank'&gt;How You Feelin?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The project was tied in closely with the &lt;a href='http://www.youtube.com/watch?v=ptpXEf_ugm0' target='_blank'&gt;TV advert&lt;/a&gt; which was a series of clips projected onto buildings of children saying how they felt to a funky beats created by Orbital's Paul Hartnell.&lt;br /&gt;&lt;br /&gt;Using a host of videos and sound clips, users piece together a 30 second remix which can then be played back in a fashion which makes it look similar to the original.  They can then enter a competition which gives saves their entry and provides them with a url to share if they want to.  The winning entry was remade at video quality and aired on MTV.&lt;br /&gt;&lt;br /&gt;Php/SQL&lt;br /&gt;&lt;br /&gt;I was the only technical guy on the job.  As the timeline wasn't too bad I decided not only to do the Flash but to also do the PHP/SQL and to set up the mySql database.  I thought it was about time I started branching out and getting some commercial experience in other languages.&lt;br /&gt;&lt;br /&gt;The setup was fairly simple, with the Flash app saving to the database using amfphp.  The Php also creates a unique url and sends an email to the judges to let them know that a new entry has been entered, with a link to that entry. The user also gets the url once they have saved the entry.  Clicking on the unique url would send the user to a seperate page where the Flash would pull in the remix data, again via amfphp, with the users name and the title of the remix displayed.  The user could then link back to the original site to make a new remix.&lt;br /&gt;&lt;br /&gt;Social Networking&lt;br /&gt;&lt;br /&gt;Originally we were then going to allow the users to then share their url directly to Facebook, mySpace, Twitter and Yahoo without leaving Flash, although due to legal reasons related to Childline this functionality was dropped.  I did create a service class which did this though so I am hoping a project in the not too near future will ask for similar functionailty as it was pretty tough to make!&lt;br /&gt;&lt;br /&gt;I used the new(ish) &lt;a href='http://www.adobe.com/devnet/flashplatform/services/social/' target='_blank'&gt;Adobe networking classes&lt;/a&gt; which work in conjunction with &lt;a href='http://www.gigya.com' target='_blank'&gt;Gigya&lt;/a&gt;.  It was pretty tricky to get it all working though, as each site that I needed to publish too had to be set up on the Gigya site first which in turn created api keys for each of the sites.  Any incorrect settings meant that the thing just didn't work!  Luckily there are some good instructions on how to do this, although I did struggle occasionaly.  Once it was working though it was great.  The user would click on the icon of the site they wanted to publish to, a popup would appear asking them to login.  Once they clicked the login button the popup would ask for any permissions required to be granted and then close.  The item would then be published.  The beauty was that once permissions were granted, if the person was already logged into say a Facebook session no popups would be created if they did it again, it just published straight to their wall.&lt;br /&gt;&lt;br /&gt;Synching Video and Sound issues&lt;br /&gt;&lt;br /&gt;One big issue I had was synching video and audio.  Typically there would be around 20 video clips of varying lengths with their own soundtracks, that would play in sync with between none and around 15 audio clips.  There was a timeline too, so everything had to look and sound right.&lt;br /&gt;Sounded simple enough.  If we have how ever many video clips which last 30 seconds (say 30x1 second clips) and we have say 15x2 second audio clips then everything should be fine.  Of course in theory this is ok, but.... I found out along this rocky road that Flash videos would never take the same amount of time to play the same video!  That is, creating a little code to trace out the start and end of the video and then set the video to play say 20 times, every time it would take a different amount of time to play!  It was never much, around a tenth or two tenths of a second different normally, so generally imperceptably to the human eye, but times this delay by 30 and suddely the video runs over by 3 or more seconds!  &lt;br /&gt;&lt;br /&gt;After much brain ache and testing, the solution which I used, which worked, was to embed all the videos into swfs and put a silent clip on the timeline under them which I set to synch as Stream.  I also embedded all the sounds in swfs, so I could then use frame counting as a way of keeping them in synch rather than timings which never really seem accurate in Flash at the best of times.  There was still a problem though as Flash didn't want to drop frames from the video, no matter how loaded the processor got.  What I did then, was to count the number of frames passed when the video finished, compared to the number of frames that the video was supposed to have lasted for.  I would then skip the first x number of frames of the next clip, thus making everything synch.  Admitedly this is not 'the way' to always synch video and could cause problems with very short video clips, typically the video would only overrun by 2 or 3 frames.  On a 30 frame clip, skipping the first couple of frames  wasn't too bad and ultimately it all synched up.&lt;br /&gt;&lt;br /&gt;RobotLegs - MVCS framework&lt;br /&gt;&lt;br /&gt;This was my first project using the &lt;a href='http://www.robotlegs.org' target='_blank'&gt;RobotLegs MVCS framework&lt;/a&gt;.&lt;br /&gt;I had been using my own MVC template after trying Cairngorm (boo, hiss) and deciding that frameworks were to bloated, slowed production and actually made sites less maintainable as you had to find someone else who knew the framework to make changes.  I went to a talk by &lt;a href='www.richardlord.net/' target='_blank'&gt;Richard Lord&lt;/a&gt; at the London Flash User Group, who made a very good presentation on the various new frameworks which gave me the inspiration to go back and take another look at them.&lt;br /&gt;&lt;br /&gt;The last point is still valid (on the whole, you still need to find someone who is familiar with the framework to fix and change things), but I have been fully converted and wouldn't start a project now without RobotLegs!  It is really lightweight, simple and intuitive.  I really liked it and will continue working with it for the foreseable future.  Try it out if you haven't already.  My own MVC template did start to run into troubles in big projects, but was fine for small/medium projects, although I have dropped it altogether now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-7176960773541509862?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/7176960773541509862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=7176960773541509862' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7176960773541509862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7176960773541509862'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2010/06/childline.html' title='Childline'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_b2NoaZMSi58/TAgehuZee4I/AAAAAAAAAF0/1qRrOKjsyO8/s72-c/img1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-3011574412245910864</id><published>2010-06-03T14:23:00.000-07:00</published><updated>2010-06-03T14:31:26.851-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>P&amp;O AIR application</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/TAgdidR6CxI/AAAAAAAAAFc/tRXK-PwwA9w/s1600/widget-screenshot-2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 268px;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/TAgdidR6CxI/AAAAAAAAAFc/tRXK-PwwA9w/s320/widget-screenshot-2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478661424508701458" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgdh1nawBI/AAAAAAAAAFU/-EelMLVhTho/s1600/widget-screenshot1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 236px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgdh1nawBI/AAAAAAAAAFU/-EelMLVhTho/s320/widget-screenshot1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478661413861507090" /&gt;&lt;/a&gt;&lt;br /&gt;This is the first commercial AIR application I made, despite learning as much as I could about AIR several years ago when it came out.&lt;br /&gt;&lt;br /&gt;The company I did it for, &lt;a href='http://www.thetin.net'&gt;The Tin&lt;/a&gt; have made a number of commercail AIR apps, including a really cool animated FTP app.&lt;br /&gt;This widget is part of a bigger project, which is a two phase site launch, dedicated to P&amp;O's building of two new ships.&lt;br /&gt;&lt;br /&gt;I found AIR really fun to use.  It was easy to use and very powerful.  One challenge I was tasked with was to make it check to see if there had been any updates.  A quick search of the web lead me to see there are a handful of ways people do this, but they all required quite a bit of manual work, changing numbers in xml files, which is never a great method.  I ended up using this &lt;a href='http://codeazur.com.br/lab/airremoteupdater/' target='_blank'&gt;brilliant class by Claus Wahlers&lt;/a&gt; from a Brazillian company called Côdeazur.&lt;br /&gt;&lt;br /&gt;Essentailly as the .AIR installer file is a PKZIP archive the second file of which contains the version number.  The class uses FZIP to stream in this file and then closes the stream, uncompresses it and reads the version number.  Genius!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-3011574412245910864?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/3011574412245910864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=3011574412245910864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/3011574412245910864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/3011574412245910864'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2010/06/p-air-application.html' title='P&amp;O AIR application'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_b2NoaZMSi58/TAgdidR6CxI/AAAAAAAAAFc/tRXK-PwwA9w/s72-c/widget-screenshot-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-2244492150065087305</id><published>2010-06-03T14:15:00.000-07:00</published><updated>2010-06-03T14:31:19.659-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>P&amp;O Ferries new site</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgb_anQKYI/AAAAAAAAAFM/CEaJJwBLsSc/s1600/website_screenshot_2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 198px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgb_anQKYI/AAAAAAAAAFM/CEaJJwBLsSc/s320/website_screenshot_2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478659722985875842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgb_K5ciAI/AAAAAAAAAFE/FwUodLO9esM/s1600/website_screenshot_1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgb_K5ciAI/AAAAAAAAAFE/FwUodLO9esM/s320/website_screenshot_1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478659718767216642" /&gt;&lt;/a&gt;&lt;br /&gt;I had to make this site which charts the making of the &lt;a href='http://www.onenewera.com'&gt;new P&amp;O ferries&lt;/a&gt; which are currently in production.&lt;br /&gt;&lt;br /&gt;It links with a seperate blog via RSS and has to be updated with new content regularly.  Added to this, there were two phases of launch, but phase two had around 80% of phase one's pages in it, but at different page sizes.  This made the build quite challenging.  I had to therefore kind of build phase two as well, although most of the assets were not going to be ready for some months after I finished.  The client I was working for, &lt;a href='http://www.thetin.net'&gt;The Tin&lt;/a&gt;, didn't want to have to maintain two seperate sites, as there were likely to be changes down the road, so I had to keep them merged into one project as much as possible but also keep them seperate enough that if one part of phase one changed, phase two would still work the same.  It was challenging, but ultimately we got it pretty well worked out.&lt;br /&gt;&lt;br /&gt;Adobe Media Encoder Issue&lt;br /&gt;I got to revisit cue points in flash video in phase two, as there was an interactive video where uses could click on hotspots or jump to places in the timeline to see information about certain aspects of the ships.  I had done something very similar a few years back for Agency.com for the British Airways site so it wasn't too bad.  One weird thing I did notice though was that the Adobe Media Encoder (AME) doesn't count frames properly when putting in cue points.  AME measures the video at 30fps in the cuepoint window even if the video is 25fps!&lt;br /&gt;&lt;br /&gt;For example if the position that the cuepoint should be added is frame 50, this would be 2 seconds into the video and not 1sec20 as AME would have you believe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-2244492150065087305?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/2244492150065087305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=2244492150065087305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2244492150065087305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2244492150065087305'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2010/06/p-ferries-new-site.html' title='P&amp;O Ferries new site'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_b2NoaZMSi58/TAgb_anQKYI/AAAAAAAAAFM/CEaJJwBLsSc/s72-c/website_screenshot_2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-8394224327518417490</id><published>2010-06-03T14:11:00.000-07:00</published><updated>2010-06-03T14:31:11.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project'/><title type='text'>Space Ranger</title><content type='html'>A bit of fun at last!  I love making games (even ones with the brief to make it play exactly like another one).&lt;br /&gt;&lt;br /&gt;This was a game that sat on Facebook to drive traffic to enter free prize draws (with a view to collecting user data).  It was only a couple of days work, but really good to be making a game again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgbJOklTTI/AAAAAAAAAE0/naZdDqThCaM/s1600/spaceranger_screenshot4_small.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 253px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/TAgbJOklTTI/AAAAAAAAAE0/naZdDqThCaM/s320/spaceranger_screenshot4_small.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478658792040516914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgbJb53aCI/AAAAAAAAAE8/4s01LYMnf3w/s1600/spaceranger_screenshot2_small.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/TAgbJb53aCI/AAAAAAAAAE8/4s01LYMnf3w/s320/spaceranger_screenshot2_small.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5478658795619444770" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-8394224327518417490?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/8394224327518417490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=8394224327518417490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8394224327518417490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8394224327518417490'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2010/06/space-ranger.html' title='Space Ranger'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_b2NoaZMSi58/TAgbJOklTTI/AAAAAAAAAE0/naZdDqThCaM/s72-c/spaceranger_screenshot4_small.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-4395271902662036968</id><published>2010-01-06T08:36:00.000-08:00</published><updated>2010-01-06T08:43:40.062-08:00</updated><title type='text'>A handy regular expression</title><content type='html'>Often I need to find a substring which can be easily done with a regular expression.&lt;br /&gt;&lt;br /&gt;I find regular expressions really useful once I worked it out, but invaribly it takes me longer to work it out than to use substr or something similar&lt;br /&gt;&lt;br /&gt;Hopefully this snippet will be handy for someone else, or at the very least a reference for me the next time I need to do it and have forgotten how it's done.&lt;br /&gt;&lt;br /&gt;So, for example if my string is:&lt;br /&gt;var videoName:String = "assets/videos/video_235.flv"; &lt;br /&gt;and I need to find the number of it (235) then a quick and easy way is to use a regular expression such as: &lt;br /&gt;var regEx:RegExp = /assets\/videos\/video_([^;]+).swf/&lt;br /&gt;trace(regEx.exec(videoName)[1]);&lt;br /&gt;will display 235&lt;br /&gt;The handy bit is:&lt;br /&gt;([^;]+)&lt;br /&gt;&lt;br /&gt;This will get the regex to return everything inbetween what you put infront and behind it.&lt;br /&gt;The backslashes I used are just to escape the forward slashes in the url.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-4395271902662036968?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/4395271902662036968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=4395271902662036968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4395271902662036968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4395271902662036968'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2010/01/handy-regular-expression.html' title='A handy regular expression'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-441120944781668139</id><published>2009-11-02T13:07:00.000-08:00</published><updated>2009-11-02T13:10:23.744-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FlashLite'/><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><title type='text'>FlashLite 3.1</title><content type='html'>I have recently being done some FlashLite 3.1 work for Sky's next generation set-top boxes.&lt;br /&gt;&lt;br /&gt;The project is under wraps so I can't reveal much, but the future STB's are looking fairly powerful but still waiting for technology to catch up.  Until the boxes become quicker, Flash on an STB still has to be pretty basic in terms of animation and effects.  There is a lot of development going on though and new boxes should be around in early 2010 which promise better processors. Once that happens Sky have got a number of rearly nice looking interfaces in development which will look very different from ones on the boxes today.&lt;br /&gt;&lt;br /&gt;There are new control devices in development too, which again I am not at liberty to divulge, but I can say there are a number of concepts being explored at the moment, but in my opinion, nothing drastically different will be introduced in the near future.&lt;br /&gt;&lt;br /&gt;So, Flashlite 3.1 is supposed to be much better than Flashlite 2.0, but at the end of the day it's still AS2 which if you don't remember is not a lot of fun to work with.  To be honest there were a couple of things that are actually easier to do (attaching movieclips and associating clips with a class) but this is heavily out weighed by the silent erroring which is so painful when you've only been doing AS3 for ages.  Also the main problem is that the devices that run the code are so slow that even though nice interfaces can be created, the rarely run as planned, so testing on the actual device throughout development is essential.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-441120944781668139?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/441120944781668139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=441120944781668139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/441120944781668139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/441120944781668139'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2009/11/flashlite-31.html' title='FlashLite 3.1'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-9013058226393672195</id><published>2009-11-02T12:55:00.000-08:00</published><updated>2009-11-13T04:26:24.975-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Math and Physics Demos</title><content type='html'>I (fairly) recently went on a two day course with Keith Peters which was all about animating with code. This was rearly interesting. I have been meaning to do a maths refresher course for a while but never got round to it so thought this would be ideal, which it turns out it was!  &lt;br /&gt;&lt;br /&gt;We covered a lot of basic trig and physics (including velocity, kinematics, collision detection and resolution) over the two days which is always necessary for games programming.  Once you understand how to perform roataions and understand velocity, there is so many things you can do with such little code.  &lt;br /&gt;&lt;br /&gt;I have included a few demos which look nice, but are infact really simple to make.&lt;br /&gt;&lt;br /&gt;This is some basic kinematics of some running legs that you can interact with to make the affect more or less realistic.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://www.jeejee.co.uk/chris/Walking5.swf" quality="high" width="550" height="400" align="middle" allowscriptaccess="sameDomain" type="appl4ication/x-shoc0kwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;This is a pseudo 3D demo, which uses rotation and scaling to create the affect.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://www.jeejee.co.uk/chris/Line3D.swf" quality="high" width="550" height="400" align="middle" allowscriptaccess="sameDomain" type="appl4ication/x-shoc0kwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Finally a nice little demo which uses easing on the ball. So simple, but looks pretty cool. Move the mouse around the window to throw the ball on the spring around.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://www.jeejee.co.uk/chris/Easing.swf" quality="high" width="550" height="400" align="middle" allowscriptaccess="sameDomain" type="appl4ication/x-shoc0kwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-9013058226393672195?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/9013058226393672195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=9013058226393672195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/9013058226393672195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/9013058226393672195'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2009/11/math-and-physics-demos.html' title='Math and Physics Demos'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-7942107021674540114</id><published>2009-11-02T12:48:00.000-08:00</published><updated>2009-11-02T12:55:49.359-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Sky Free Pass Weekend</title><content type='html'>I have been lucky enough to continue working at Sky as new projects have come up as others end.  I programmed the Free Weekend Pass site, which was part of a large campaign across the company which proved very successful.  So much so that the department got other work off the back of it!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/Su9GQRoGTqI/AAAAAAAAAEs/64C3FqheWNY/s1600-h/freePass3.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 152px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/Su9GQRoGTqI/AAAAAAAAAEs/64C3FqheWNY/s320/freePass3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399611723663953570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/Su9GQGcV2jI/AAAAAAAAAEk/HB-37ZkxLEw/s1600-h/freePass2.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 152px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/Su9GQGcV2jI/AAAAAAAAAEk/HB-37ZkxLEw/s320/freePass2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399611720661850674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/Su9GPx6ZLKI/AAAAAAAAAEc/rDMGjhi7wV8/s1600-h/freePass1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 151px;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/Su9GPx6ZLKI/AAAAAAAAAEc/rDMGjhi7wV8/s320/freePass1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5399611715150752930" /&gt;&lt;/a&gt;&lt;br /&gt;Even though the site was just for a weekend, it is still online at the time of writing at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sky.com/freepass" target="_blank"&gt;http://www.sky.com/freepass&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-7942107021674540114?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/7942107021674540114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=7942107021674540114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7942107021674540114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7942107021674540114'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2009/11/sky-free-pass-weekend.html' title='Sky Free Pass Weekend'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_b2NoaZMSi58/Su9GQRoGTqI/AAAAAAAAAEs/64C3FqheWNY/s72-c/freePass3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-5634896162758260025</id><published>2009-09-02T12:31:00.001-07:00</published><updated>2009-09-02T13:47:15.741-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMFPHP'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Saving  Binary Data - better than XML?</title><content type='html'>Appologies for the formatting of the code coming up. This is the first time I have put up code on Blogger and probably the last as it has almost no options to let me publish it in a readable format.&lt;br /&gt;&lt;br /&gt;The project I was working on was a microsite for the Sky Animation Season.  To give you a taste here are a few screen shots:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/Sp7J-Dex4UI/AAAAAAAAAEU/Sv7CVEerRl0/s1600-h/flipbook3.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 218px;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/Sp7J-Dex4UI/AAAAAAAAAEU/Sv7CVEerRl0/s320/flipbook3.jpg" alt="" id="BLOGGER_PHOTO_ID_5376957073050427714" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/Sp7J9807p5I/AAAAAAAAAEM/JijpvsKfIPA/s1600-h/flipbook2.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 213px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/Sp7J9807p5I/AAAAAAAAAEM/JijpvsKfIPA/s320/flipbook2.jpg" alt="" id="BLOGGER_PHOTO_ID_5376957071264294802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/Sp7J9TfG-CI/AAAAAAAAAEE/XvFIu6xro3M/s1600-h/flipbook1.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 216px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/Sp7J9TfG-CI/AAAAAAAAAEE/XvFIu6xro3M/s320/flipbook1.jpg" alt="" id="BLOGGER_PHOTO_ID_5376957060166907938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can see it in all it's glory (if it's still live at the time of reading) here:&lt;br /&gt;&lt;a href="http://skycreative.tv/animation/"&gt;Sky Animation Season&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Basically the main part of the site which is of interest for this article was the section where a user can create a flickbook by drawing lines (the second image above).  They can have up to 100 pages and there is not really a limit on the number of lines they can draw for each page.  This data needed to be stored for the show a friend section.&lt;br /&gt;&lt;br /&gt;My normal initial reaction when saving data is to use XML as it's easy to use and everyone knows what it is.  In this case though each line would have a start point, end point, colour, thickness and page number.  Once a user draws a curve, the lines really start to add up! I could of course save each page as bitmap data as it didn't need to be re-edited but 100 pages of bitmap data is a lot of data as well and test were showing that it was going to be a bit slow.&lt;br /&gt;&lt;br /&gt;For this project we were going to use AMFPHP as the backend and somewhere along the line when I was reading something about AMFPHP I read something about saving data as binary arrays and decided that this was going to be a much better way to go.  I have a load of data which I wanted to save as a block, why can't I just put that wad of data into a database and then read it back out when I wanted it?  Well, I could!  Basically we could convert all the data into a binary array, send that to the database, which only had to expect one entry (the binary data) and just do the reverse when we wanted the data back. This would mean the size of the data would be really small and fast.  There were other benefits too which I will sum up at the end.&lt;br /&gt;&lt;br /&gt;So, how did we do it? Firstly by looking on google!  There were a couple of good but not complete tutorials on similar subjects. I can't remember what they were now to give credit to them, but if you search for 'saving binary data in amfphp' you should stumble upon them pretty quickly.&lt;br /&gt;&lt;br /&gt;Here is the crux of the code:&lt;br /&gt;&lt;br /&gt;Firstly you have to register your classes.  As far as I can tell this adds a little data to them so that when they are turned back into classes from binary data, they remember what objects they were.&lt;br /&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;&lt;br /&gt;registerClassAlias("com.skymovies.flipbook.model.vo.Line",Line);&lt;br /&gt;registerClassAlias("com.skymovies.flipbook.model.vo.SendDetails",SendDetails);&lt;br /&gt;registerClassAlias("com.skymovies.flipbook.model.vo.FlipBookLines",FlipBookLines);&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;This only really works on value objects as far as I can tell, but these values can be other value objects.&lt;br /&gt;Here's an example of a value object:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;&lt;br /&gt;package com.skymovies.flipbook.model.vo {&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;class FlipBookLines {&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public var arrLines:Array;//an array of Line value objects&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public var sendDetails:SendDetails;//send details is another value object&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public function FlipBookLines() {&lt;br /&gt;    &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So this is how to convert the data into an array and send it.  Some of this is project specific but you should get the gist.  Don't forget to import the relevant classes if you're using some dodgy IDE that doesn't do this for you.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;&lt;br /&gt;public function sendData():void{&lt;br /&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//get the line data&lt;br /&gt;     &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var voFlipBook:FlipBookLines = getFlipbookData();&lt;br /&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;var byteArray:ByteArray = new ByteArray();&lt;br /&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteArray.writeObject(voFlipBook);&lt;br /&gt;      &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byteArray.compress();&lt;/strong&gt;&lt;br /&gt;          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//pass array of lines to amfphp&lt;br /&gt;          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myService = new NetConnection();&lt;br /&gt;         &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NetConnection.defaultObjectEncoding = ObjectEncoding.AMF3;&lt;br /&gt;          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myService.connect('../../gateway.php');//the path to the gateway.php file&lt;br /&gt;          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//the responder handles the server response.  The arguments are the functions that will be called&lt;br /&gt;          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var responder:Responder = new Responder(onResult, onFault);&lt;br /&gt;          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//call(className.methodName, responder object, line data);&lt;br /&gt;          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myService.call("FlipBookLines.putFlipBook", responder, byteArray);&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So that sends the data as a single blob of binary, how is it retrieved?&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;&lt;br /&gt;//retreive data like this&lt;br /&gt;public function retrieveData() : void {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//call the amfphp service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var myService:NetConnection = new NetConnection();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NetConnection.defaultObjectEncoding = ObjectEncoding.AMF3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myService.addEventListener(NetStatusEvent.NET_STATUS,netError);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myService.connect(drawMod.gateway);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var responder:Responder = new Responder(onLinesLoaded, onFault);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//call(className.methodName, responder object, line data, send data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myService.call("FlipBookLines.getFlipBook", responder, drawMod.saved_flipbook_id);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//once the response has been got it gets a little more interesting&lt;br /&gt;private function onLinesLoaded(result:Object):void{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (! (result is ByteArray)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  throw new Error("Result is not a ByteArray. Check AMFPHP 'encoding' property");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt;var ba:ByteArray = result as ByteArray;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (! ba) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  throw new Error("An error occurred: " + result.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//decompress&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ba.uncompress();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//read object turns it back into a FlipBookLines object&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var fbLines:FlipBookLines = ba.readObject() as FlipBookLines&lt;/strong&gt;&lt;br /&gt;//&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (! fbLines) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  throw new Error("An error occurred.");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}else{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  //success&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  dispatchEvent(new Event(FLIPBOOK_LOADED));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Eh voila we have a value object back just as it was in the begining which makes it nice and easy to redraw the screens.&lt;br /&gt;The php service is very simple as well.  Here are the bones of it:&lt;br /&gt;&lt;br /&gt;Php&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: courier new;font-size:85%;" &gt;public function putFlipBook($arrLines){&lt;br /&gt;$this-&gt;connect();&lt;br /&gt;$arrLines = $arrLines-&gt;data;&lt;br /&gt;$arrLines = mysql_real_escape_string($arrLines);&lt;br /&gt;&lt;br /&gt;$query = "INSERT into linedata (picture_id, arrlines) VALUES ('$hash', '$arrLines')";&lt;br /&gt;$result = mysql_query($query);&lt;br /&gt;$error = mysql_error();&lt;br /&gt;$recnum = mysql_insert_id();&lt;br /&gt;mysql_close();&lt;br /&gt;if ($error)&lt;br /&gt;          return "error: " . $error;&lt;br /&gt;      else&lt;br /&gt;      return $hash;&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;One important thing to note that in the database, the data needs to be saved as a BLOB (Binary Large Object)!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So what are the benefits of doing it in like this?&lt;br /&gt;Data can be changed in the AS; new items can be added, existing items can be changed without any change needed to the back end.&lt;br /&gt;Low data size vs xml.  Much quicker to save, load.&lt;br /&gt;Items are converted back to objects on load, which cuts down parsing xml and creating new objects and setting values.&lt;br /&gt;&lt;br /&gt;Its not all a bed of roses though, there could be potential problems.&lt;br /&gt;Nothing else can use the data. If you are collecting names and addresses this isn't any use.&lt;br /&gt;If it needs manually edited or moderated at the database end this can't be done as there is nothing really to inspect.&lt;br /&gt;&lt;br /&gt;So thats it.  In this case it was really useful and saved me a lot of xml creation and reading and the backend didn't have to do anything either.  It won't be great in all circumstances but if you have a piece of data that will only be read by that app that needs to be saved for later retrieval this could be a good option to expore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-5634896162758260025?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/5634896162758260025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=5634896162758260025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5634896162758260025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5634896162758260025'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2009/09/saving-binary-data-better-than-xml.html' title='Saving  Binary Data - better than XML?'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_b2NoaZMSi58/Sp7J-Dex4UI/AAAAAAAAAEU/Sv7CVEerRl0/s72-c/flipbook3.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-4480908117496120657</id><published>2009-05-03T03:17:00.000-07:00</published><updated>2009-05-03T03:55:19.647-07:00</updated><title type='text'>Flash 10 Audio</title><content type='html'>Here's a little demo I put together trying to learn a bit more about manipulating sound in Flash 10.  Clicking on a radio button will generate a different type of soundwave and moving the slider changed the amplitude. Finally at the bottom, I am drawing the wave that is created.&lt;br /&gt;&lt;embed src="http://www.online-bingo-halls.com/soundDemo.swf" quality="high" width="550" height="400" align="middle" allowscriptaccess="sameDomain" type="appl4ication/x-shoc0kwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;This demo requires Flash 10 Player to be installed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-4480908117496120657?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/4480908117496120657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=4480908117496120657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4480908117496120657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4480908117496120657'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2009/05/flash-10-audio.html' title='Flash 10 Audio'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-2376169876961051105</id><published>2009-04-30T12:00:00.001-07:00</published><updated>2009-05-03T04:15:35.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Skellig Game</title><content type='html'>I recently had the luck to work with some really tallented guys over at Sky on one of my favourite projects of recent time.&lt;br /&gt;Behold Skellig - Shed or Alive!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_b2NoaZMSi58/Sfn6pPRcDxI/AAAAAAAAADs/ld4yWzfUKDw/s1600-h/skellig1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 275px; height: 191px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/Sfn6pPRcDxI/AAAAAAAAADs/ld4yWzfUKDw/s320/skellig1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5330567220350947090" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_b2NoaZMSi58/Sfn6ppZtwxI/AAAAAAAAAD8/ckJN6yiQoXk/s1600-h/skellig3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 263px; height: 128px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/Sfn6ppZtwxI/AAAAAAAAAD8/ckJN6yiQoXk/s320/skellig3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5330567227364983570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_b2NoaZMSi58/Sfn6pAG6A-I/AAAAAAAAAD0/N-Ry75IO3QI/s1600-h/skellig2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 171px;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/Sfn6pAG6A-I/AAAAAAAAAD0/N-Ry75IO3QI/s320/skellig2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5330567216280241122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sky1.co.uk/skellig/game.php"&gt;&lt;strong&gt;&gt;&gt;&gt;&gt;Play it here&lt;&lt;&lt;&lt;&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a sideways scroller, based around the film made by Sky, "Skellig" which is out around now.  &lt;br /&gt;&lt;br /&gt;You have to fly the fly out of the shed to freedom.  You get three lives and limited energy for each fly.  The shed is comprised of three levels and has a host of different garden implements to avoid such as spanners, saws, blowtorches, hungry frogs, wasps and more.  There is even a bit where you get caught with fly spray which makes our hero trip out for a few seconds!&lt;br /&gt;&lt;br /&gt;There are loads of great graphical bits in it and the sound for each level has a unique feel to it.  It plays pretty well too, even though I'm having to do a lot of collision detection and scroll massive bitmaps as well it seems to run quickly enough.&lt;br /&gt;&lt;br /&gt;It was a great team effort and a lot of fun to work on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-2376169876961051105?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/2376169876961051105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=2376169876961051105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2376169876961051105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2376169876961051105'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2009/04/skellig-game.html' title='Skellig Game'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_b2NoaZMSi58/Sfn6pPRcDxI/AAAAAAAAADs/ld4yWzfUKDw/s72-c/skellig1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-2776945787358713169</id><published>2009-04-30T11:21:00.001-07:00</published><updated>2009-04-30T11:59:10.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>FITC Amsterdam</title><content type='html'>Recently I attended the FITC conference in Amsterdam for the second year running.&lt;br /&gt;The more conferences I go to, the more I see the same people talking about the same things!  This year there wasn't too much new.  &lt;br /&gt;&lt;br /&gt;The two main things I went for were:&lt;br /&gt;1. A CS4/Flash 10 workshop to get me up to speed on new things in Flash 10.&lt;br /&gt;2. An iPhone development session.&lt;br /&gt;&lt;br /&gt;The CS4 workshop was by Lee Brimlow who is a pretty good presenter.  Sadly CS4 is possibly worse than CS3 and holds nothing new for programmers. It's as if they have gone out of their way to add features that do not benefit programmers in any way, thus creating a workflow in which we need to buy Flex, Flash and Photoshop.  Having spent an afternoon playing around with the new Sound capabilites, I can honestly say that I don't see anyone buying Flash CS4 anytime soon.  It's slow and crashes soo often.  I only use Flash these days to label assets anyway, so I think CS3 is going to stay for a while longer.&lt;br /&gt;&lt;br /&gt;The iPhone developer session was useful in as much as it put me off wanting to develop for the iPhone.  Sure, it looks good to have Objective C on your CV at the moment but the hassle of being able to commercially develop (registering with Apple as a developer for instance, which costs money and takes months, buying an Apple computer as they don't have and SDK for PC, and the SDK which is so feature poor it makes Flash look like the best bit of software ever written.&lt;br /&gt;&lt;br /&gt;Apart from that there were the usual band of speakers.&lt;br /&gt;&lt;br /&gt;Carlos and others talking about Papervision as usual.  His new site looks great!  He explained how he put it together.  Papervision is becoming so complicated now-a-days and constantly being updated (such is OS code) that unless you're constantly doing projects with it, it's hard to keep up.  Then again, isn't everyone just using if for carousels now, replacing 'page flipping over' as the current client-must-have.&lt;br /&gt;&lt;br /&gt;A number of people were banging on about AIR still, same as last year.  I have seen a couple of AIR apps, but most the places I work haven't embraced it like I think Adobe would have hoped.  I saw a cool site recently which has just come out which allows people to make cash distributing their AIR apps which may get more people to come up with cool apps.&lt;br /&gt;&lt;br /&gt;Andre Michelle is still developing his &lt;a href="http://www.hobnox.com/audiotool"&gt;music application&lt;/a&gt;, under the auspicious title of AudioTool.  I saw it last year and it is even better now. I would go as far as to say it's one of the 'best' Flash applications I've seen to date.  Where does he find the time???  I struggle to keep this blog up-to-date!&lt;br /&gt;&lt;br /&gt;Thats it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-2776945787358713169?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/2776945787358713169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=2776945787358713169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2776945787358713169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2776945787358713169'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2009/04/fitc-amsterdam.html' title='FITC Amsterdam'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-1538813787442644982</id><published>2008-12-05T09:29:00.000-08:00</published><updated>2009-12-22T02:51:50.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='papervision'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Nissan Europe - Murano and Qashqai entry page</title><content type='html'>This was my first bigish papervision projects and although initially I was a little doubtful of the concept at first (driving cars around with no purpose) I think it turned out pretty good in the end.  My biggest surprise was how quickly it ran.  I had to do a bit of fixing, swapping the 3d car on the bottom of the screen for a bit map when it wasn't in use to keep things quick but apart from that not too much optimising was necessary.  We kept adding to the polys on the car to see how it would run and it runs fast!  Too fast almost.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nissan-crossover.co.uk"&gt;www.nissan-crossover.co.uk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/STllFn73CwI/AAAAAAAAADY/2xcbUyUYk2A/s1600-h/crossover.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 185px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/STllFn73CwI/AAAAAAAAADY/2xcbUyUYk2A/s320/crossover.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276359585735052034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on one of the cars for the full 3D experience!  Wow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-1538813787442644982?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/1538813787442644982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=1538813787442644982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1538813787442644982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1538813787442644982'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/12/nissan-europe-murano-and-qashqai-entry.html' title='Nissan Europe - Murano and Qashqai entry page'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_b2NoaZMSi58/STllFn73CwI/AAAAAAAAADY/2xcbUyUYk2A/s72-c/crossover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-2145424278294427843</id><published>2008-12-05T09:25:00.000-08:00</published><updated>2008-12-05T09:29:06.904-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Cross Domain Issues in AS3</title><content type='html'>Working for Sony was 'challenging', for one thing they keep all the assets for a project (external images, videos etc) on seperate server to the main Flash app, which has to uploaded via a CMS.  Why do companies persist with CMS'?  Maybe because they were sold them 3 years ago for a huge amount of money by someone promising that they would be future proof.  Of course, the internet moves so quickly I don't think anything online can be sure to be good for more than a year.  Anyway, back to CMS'.  They are ALWAYS a pain in the ass to develop on.  &lt;br /&gt;Making sure everything will load cross-domain can be tricky and it took a while to figure out that we had to use little line of code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;context.securityDomain = SecurityDomain.currentDomain;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;but this would course an error when running it locally, so this had to be switched on and off. A bit of a pain but once in, it sorted the cross domain errors.  This is a lot less hassle than doing projects cross-domain with AS2, thats for sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-2145424278294427843?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/2145424278294427843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=2145424278294427843' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2145424278294427843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2145424278294427843'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/12/cross-domain-issues-in-as3.html' title='Cross Domain Issues in AS3'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-7418128133015967934</id><published>2008-12-05T09:19:00.000-08:00</published><updated>2008-12-05T09:25:08.015-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Fun things I worked on at Dare</title><content type='html'>I got to work on a couple of really cool projects at Dare.  I got to work on this one for Vodafone music which has great creative.  It was lacking content on launch (clients not supplying content?  There's a surprise.) but still looks great.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://music.vodafone.com/"&gt;http://music.vodafone.com/&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/STli4jwrv_I/AAAAAAAAAC4/pcGoNOkoIIQ/s1600-h/vodafone_music.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 148px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/STli4jwrv_I/AAAAAAAAAC4/pcGoNOkoIIQ/s320/vodafone_music.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276357162252877810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I had to do some updates to this fairly aged site, which still looks nice.&lt;br /&gt;&lt;a href="http://www.sonyericsson.com/walkman/"&gt;http://www.sonyericsson.com/walkman/&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/STljIZ2ZymI/AAAAAAAAADA/06pOWxKHp00/s1600-h/sony_walkman.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 149px;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/STljIZ2ZymI/AAAAAAAAADA/06pOWxKHp00/s320/sony_walkman.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276357434470419042" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A couple of small flash apps I did for the Sony e-book, the Reader:&lt;br /&gt;&lt;a href="http://www.sony.co.uk/hub/reader-ebook/block/2"&gt;http://www.sony.co.uk/hub/reader-ebook/block/2&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/STljU1fexrI/AAAAAAAAADI/QmVBCi4I9-A/s1600-h/Aboutreader.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/STljU1fexrI/AAAAAAAAADI/QmVBCi4I9-A/s320/Aboutreader.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276357648048899762" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And in a similare vein:&lt;br /&gt;&lt;a href="http://www.sony.co.uk/hub/reader-ebook"&gt;http://www.sony.co.uk/hub/reader-ebook&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/STljhuON6NI/AAAAAAAAADQ/ep9v8z2YzH8/s1600-h/reader1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 185px;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/STljhuON6NI/AAAAAAAAADQ/ep9v8z2YzH8/s320/reader1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276357869435742418" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-7418128133015967934?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/7418128133015967934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=7418128133015967934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7418128133015967934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7418128133015967934'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/12/fun-things-i-worked-on-at-dare.html' title='Fun things I worked on at Dare'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_b2NoaZMSi58/STli4jwrv_I/AAAAAAAAAC4/pcGoNOkoIIQ/s72-c/vodafone_music.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-3638765361082164448</id><published>2008-12-05T09:15:00.000-08:00</published><updated>2008-12-05T09:19:33.271-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Standardising code - are frameworks really the answer?</title><content type='html'>Another interesting thing about working at Dare was their attempt at standardising code.  This makes sense.  They have a lot of freelancers and permanent Flash staff so having to find your way into different styles of coding to make changes can be time consuming.  What they have come up with is a framework based on Cairngorm which they use for all projects.I hear from friends that other compaines are doing the same, PureMVC being quite popular too.  In theory it is a great idea.  All projects will look the same, run the same way, can be worked on by multiple developers and new developers should require less supervision when writing the projects, once the framework has been learnt.  This works great for large scale projects however for smaller projects, learning how bits of the framework worked for doing tracking or similar simple tasks and then implementing it took ages.  If for instance the project had two calls to action which needed to be tracked two, I had to create an xml file for the tracking, load it in, set up the tracking manager, dispatch system events and so on.  It seemed a bit much for something that could have been 'bodged' in 5 minutes with a few lines of code.  So although this approach certainly has it's merits I think it still needs working on.  I know someone, not at Dare I hasten to add, who had to do a three button page where each button changed an image.  They were told it had to be done using PureMVC and were given 2 weeks to do it!  If done the 'old fashioned' way, it could have been done in an afternoon.  My own preference would be to use a project template (which I now do) rather than using a framework, which has inspired me to start writing an article on the use of Frameworks in Flash which I think has got a little out of hand.  Banners made using Cairngorm?  Why would you you do that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-3638765361082164448?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/3638765361082164448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=3638765361082164448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/3638765361082164448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/3638765361082164448'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/12/standardising-code-are-frameworks.html' title='Standardising code - are frameworks really the answer?'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-4096721580007689010</id><published>2008-12-05T09:09:00.001-08:00</published><updated>2009-01-21T12:09:39.448-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='papervision'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>Nissan Film Festival</title><content type='html'>I did quite a bit of work for Duke Interactive for a large site they were building for Nissan UK.&lt;br /&gt;&lt;br /&gt;Primarily I did a preview page which consisted of a 3d cirle of images that the user can navigate around and watch previews of various films which can then be downloaded if certain conditions are met (using IE on a PC and have Media Player!). The videos are downloaded in conjuction with Microsofts Digital Rights Management (DRM) and I know the server developer had a lot of trouble getting this to run smoothly.  Sounded like a real nightmare. The back end was made using RoR and the live version seems to have a number of issues still.&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.nissan-4x4.co.uk/adventure_films/load_films'&gt;The video preview section can be seen HERE.&lt;/a&gt;&lt;br /&gt;but seems to download rather slowly...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/STlgeii-qcI/AAAAAAAAACg/e8fclIbWWxM/s1600-h/NFF_1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 190px;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/STlgeii-qcI/AAAAAAAAACg/e8fclIbWWxM/s320/NFF_1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276354516227107266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/STlgqu-7g1I/AAAAAAAAACo/JvoCIB1oyMQ/s1600-h/NFF_2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/STlgqu-7g1I/AAAAAAAAACo/JvoCIB1oyMQ/s320/NFF_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276354725723997010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/STlgz6mONxI/AAAAAAAAACw/DdYmlM-5BuI/s1600-h/NFF_3.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 197px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/STlgz6mONxI/AAAAAAAAACw/DdYmlM-5BuI/s320/NFF_3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276354883460413202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Working on this site has inspired and article I am currently writing called 'Work flow roles and responsibilities'.  I will publish it here soon.  I will think of a snappier title once it's finished!  It outlines my theory on how projects should be organised and deployed picking on my fairly wide experience of companies worked as a freelancer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-4096721580007689010?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/4096721580007689010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=4096721580007689010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4096721580007689010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4096721580007689010'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/12/nissan-film-festival.html' title='Nissan Film Festival'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_b2NoaZMSi58/STlgeii-qcI/AAAAAAAAACg/e8fclIbWWxM/s72-c/NFF_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-4956822035458187937</id><published>2008-12-05T08:54:00.000-08:00</published><updated>2008-12-05T09:08:58.579-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='FDT'/><title type='text'>Develop with Flex Builder 3 or FDT3??</title><content type='html'>I have had a stint at Dare Digital for around 3 months.  They exculsively use Flex/AS3 for all projects, except banners.  All programmers have to use FDT 3 for all Flash/Flex projects which was interesting.  I have used FDT for a couple of years for AS2 stuff and more recently Flex Builder 3 (FB3) for doing AS3/Flex projects so using FDT for Flex builds was new for me.  A few comparisons that quickly become obvious:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;FDT vs Flex Builder 3 for AS3/Flex projects&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;FDT is a pain in the ass to set up.  Quite a lot of stuff has to be configured which can be a real bugger.&lt;br /&gt;FB3 requires no set up&lt;br /&gt;&lt;br /&gt;FDT seems to be constantly building, locking the machine.&lt;br /&gt;FB3 only builds on compile (as far as I can tell)&lt;br /&gt;&lt;br /&gt;FDT error checking is instant and it highlight issues straight away, sometimes too quickly.&lt;br /&gt;In FB3 you have to look at the Errors window to see any issues.  This can cause problems to new users is the error window is not tabbed.  Usually it will report that there are errors when you try to compile but sometimes it seems not to.  Hence it will still appear to compile and show you the last swf that it made so you can go mad trying to see why something is not happening, only to find out that there was an error in the compile and you're infact looking at an old swf.&lt;br /&gt;&lt;br /&gt;FDT templates are great.&lt;br /&gt;In FB3 I still have to write out loops and other mundane stuff :(  Maybe this is added in FB4?  I hope so.&lt;br /&gt;&lt;br /&gt;Auto-completion is better in FDT.&lt;br /&gt;&lt;br /&gt;FDT doesn't run Flash in a browser.  As all developers know running things in browsers is not the same as running it in an external player.&lt;br /&gt;Although FB3 does run in a browser, sometimes folders get copied from the source folder to the deploy folder automatically in FB3 which shouldn't.  Some folders of code were getting copied across which shouldn't be included in the deployment.  I can't find a way of getting FB3 to ignore them.&lt;br /&gt;&lt;br /&gt;For AS2 projects I used to swear by FDT, but doing AS3 projects I feel a little differently, actually prefering FB3.  It does a little less stuff for you but feels cleaner and runs quicker in my opinion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-4956822035458187937?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/4956822035458187937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=4956822035458187937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4956822035458187937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4956822035458187937'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/12/develop-with-flex-builder-3-or-fdt3.html' title='Develop with Flex Builder 3 or FDT3??'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-1010697420534262350</id><published>2008-12-05T08:52:00.000-08:00</published><updated>2008-12-05T08:54:13.998-08:00</updated><title type='text'>Post summer update!</title><content type='html'>I haven't updated this blog for quite a while now...  I haven't had to do an AS2 project since March I think. I have been doing almost exclusively papervision for the last 3 months, a bit of consultancy but mostly project work with a few other bits and pieces thrown in before that for good measure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-1010697420534262350?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/1010697420534262350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=1010697420534262350' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1010697420534262350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1010697420534262350'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/12/post-summer-update.html' title='Post summer update!'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-6022642887937998863</id><published>2008-08-05T14:01:00.000-07:00</published><updated>2008-08-05T14:36:52.813-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='papervision'/><title type='text'>3ds vs DAE files in Papervision</title><content type='html'>I have been lucky enough to work on a cool Papervision project this week.  It's for a car company and in idea is rather similar to Carlos' Ford Focus on his site, but hey, I get paid to make these things, not come up with the concepts.  The guy doing the 3d is great at 3d but has no experience porting to Flash and I have very little 3d modelling experience so it was always going to be a steep learning curve!&lt;br /&gt;&lt;br /&gt;What follows is our findings on whether it is better to use 3ds models or DAE models.&lt;br /&gt;&lt;br /&gt;Initially I asked for DAE's as this seems to by the Papervision 'standard' format.  The presented the first problem we had, which was that the 3d guy couldn't get a Collada model to export correctly from Studio Max.  He kept sending me models but they would never get parsed by Flash.  I kept getting a vertice count of null.  I found on the web somewhere this little gem to quickly if a DAE file was exported correctly:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;If you open the file and there is a &amp;lt polygon&amp;gt node (or polygons I forget exactly) then it's not been triangulated properly.  There should be a &amp;lt triangles&amp;gt node!&lt;/span&gt;  If not then it aint right!&lt;br /&gt;The 3d guy insisted that the models were triangulated and that he was using the latest and greatest Collada export plugin.  This may well have been true but Papervision isn't the latest and greatest application which uses Collada!  By the end of the day when I persuaded him to use the &lt;a href="http://www.feelingsoftware.com/component/option,com_docman/Itemid,80/lang,en/"&gt;plug in from feeling software&lt;/a&gt; rather than the great Autodesk one, then the models actually started to export properly.&lt;br /&gt;&lt;br /&gt;In the time between us not being able to use any of the DAE models and using Feeling Software's plugin we tried to use 3ds models.  They are approximately half the size of the DAE's and seemed to import just fine.  No export issues either.  Great!  But not.  Almost an entire day of tests later we realised that we needed to go back to creating DAE's.  The issues were these:&lt;br /&gt;1.&lt;span style="font-weight: bold;"&gt; No heirarchy of objects would be imported &lt;/span&gt;into Flash.  So as we had a car, with wheels as children, we expected this to come in as such, but it didn't.  It would only come in with all objects all as children on the same level.  We tried grouping them and putting them in more containers but nothing seemed to work.&lt;br /&gt;2. &lt;span style="font-weight: bold;"&gt;Objects that had their own pivot points shifted&lt;/span&gt; once they were imported into Flash.  So, if a wheel had it's pivot point say 100 units forward and 20 units to the right of the world centre then when imported into Papervision, the wheel would appear 100 units forward and 20 units to the right of the car!  The 3d guy came up with a wa y to get the model to come in with everything in the correct place in the end, but that wasn't the final issue.&lt;br /&gt;3. The final issue was that after running a number of tests it appears that &lt;span style="font-weight: bold;"&gt;it isn't possible to rotate any of the objects in the model around anywhere but the world centre&lt;/span&gt;, no matter what we did!&lt;br /&gt;&lt;br /&gt;One solution would have been to import each object as it's own 3ds file and then positioned them together in Flash, but once we got the DAE model exporting ok, all these problems evaporated.&lt;br /&gt;&lt;br /&gt;In summary then, I would recommend using 3ds models only when the object has one rotation point for all children, as the file size is very small, but when the object has multiple rotation points for various children, then from my findings, you have to use DAEs.&lt;br /&gt;&lt;br /&gt;I could find no information on the web about using 3ds models in Papervision, so hopefully this will save someone a few hours of wasted effort.  Papervision is being developed at such a rate however that I am sure that someone will get all this working sometime soon, but until then....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-6022642887937998863?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/6022642887937998863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=6022642887937998863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6022642887937998863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6022642887937998863'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/08/3ds-vs-dae-files-in-papervision.html' title='3ds vs DAE files in Papervision'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-8257579562889293669</id><published>2008-06-20T13:20:00.001-07:00</published><updated>2008-06-20T13:28:36.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Papervision Course - Stockholm</title><content type='html'>I attended FitC's 2 day Papervision course in Stockholm as a follow on from the course I did with Rob Bateman in London.  The course was hosted by Ralph Hewart (can't remember how to spell his surname) who is one of the guys in the core Papervision team.  The course was quite different from Rob's one in London.  Although some of the same things were gone over in both courses, I probably learnt equal amounts from both.&lt;br /&gt;&lt;br /&gt;Rob went over basic things in more detail and was better at explaining things IMHO.  What Ralph did though was go into more detail about importing different models types into Papervision and exporting from 3D Studio Max, all of which was new to me.&lt;br /&gt;&lt;br /&gt;Since coming back, I have been offered a few Papervison-orientated projects so hopefully I will be putting my knowledge to good use.  It's really only through projects that I think you can really learn any new developments.  There is only so much you can learn by doing demos, so hopefully I will have some good commercial use of Papervision up here to show in the next 6 weeks...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-8257579562889293669?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/8257579562889293669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=8257579562889293669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8257579562889293669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/8257579562889293669'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/06/papervision-course-stockholm.html' title='Papervision Course - Stockholm'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-1028383169537556015</id><published>2008-06-20T13:10:00.000-07:00</published><updated>2008-06-20T13:28:55.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>APE AS3 Physics Engine</title><content type='html'>I have recently been looking at what people have been doing in 3D physics with a view to ramping up what I can do in Papervision.  During my research I came across APE (Actionscript Physics Engine) and I have to say it is pretty amazing.&lt;br /&gt;&lt;br /&gt;It is a 2D physics engine and like lot's of new things in the Flash world, it's very easy to make cool demos with, but hopefully I will find a 'real life' use for this on a job soon... in the mean time, here is a cool demo which I knocked up in an hour....&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.infopods.com/chris/ape/apeTest.html' target='_blank'&gt;GRATUITOUS DEMO&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-1028383169537556015?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/1028383169537556015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=1028383169537556015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1028383169537556015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1028383169537556015'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/06/ape-as3-physics-engine.html' title='APE AS3 Physics Engine'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-6671405347929592440</id><published>2008-06-09T05:42:00.000-07:00</published><updated>2008-12-05T08:52:23.423-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><title type='text'>Scrapshoot goes live</title><content type='html'>Scrapshoot has finally gone live in Europe!&lt;br /&gt;&lt;a href='http://www2.disney.co.uk/DisneyMovies/Walle_games/scrap_shoot/' target="_blank"&gt;The standalone UK version is HERE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It seems to have been nabbed by a whole load of websites!&lt;br /&gt;&lt;br /&gt;The MSN version is going live this week to but there is a preview page here:&lt;br /&gt;&lt;a href='http://wall-e.msn.co.uk/Game.aspx' target="_blank"&gt;MSN Scrapshoot&lt;/a&gt;&lt;br /&gt;You play against a friend and have to blow up the stuff before they do!&lt;br /&gt;&lt;br /&gt;Both games were done in AS2, mainly because of MSN restrictions....&lt;br /&gt;&lt;br /&gt;Check them out!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/STlcDe1UXmI/AAAAAAAAACY/lvdNck0fsJU/s1600-h/walle.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 250px;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/STlcDe1UXmI/AAAAAAAAACY/lvdNck0fsJU/s320/walle.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5276349653327306338" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-6671405347929592440?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/6671405347929592440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=6671405347929592440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6671405347929592440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6671405347929592440'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/06/scrapshoot-goes-live.html' title='Scrapshoot goes live'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_b2NoaZMSi58/STlcDe1UXmI/AAAAAAAAACY/lvdNck0fsJU/s72-c/walle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-331511827967944917</id><published>2008-06-09T05:21:00.000-07:00</published><updated>2008-06-09T05:37:42.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Skybox Panaorama</title><content type='html'>Creating a skybox is a really nice and simple demo to do.  One of the tough parts is creating the image and making sure it is layed out correctly.&lt;br /&gt;&lt;br /&gt;How it works is that it applies the image (which looks something like this):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_b2NoaZMSi58/SE0hPfrwflI/AAAAAAAAABw/lnojuV-3K8E/s1600-h/skybox.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_b2NoaZMSi58/SE0hPfrwflI/AAAAAAAAABw/lnojuV-3K8E/s320/skybox.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5209856894024318546" /&gt;&lt;/a&gt;&lt;br /&gt;as a texture to the inside of a cube and then the camera is moved inside of the cube.  Moving the mouse then gives the effect of being in a 3D world.  &lt;br /&gt;&lt;br /&gt;Away3D has a very nice simple Skybox6 class which allows you to put all the images into 1 image and use that, as opposed to applying 6 images, one to each side of the cube, which can be tricky to get them in the right order at first.&lt;br /&gt;&lt;br /&gt;&lt;a href ='http://www.infopods.com/chris/away3d/skybox/skybox.html' target='_blank'&gt;Here's one I made earlier (down shep)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This one uses Rectangle Clipping too, just to make it a bit quicker.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-331511827967944917?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/331511827967944917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=331511827967944917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/331511827967944917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/331511827967944917'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/06/skybox-panaorama.html' title='Skybox Panaorama'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_b2NoaZMSi58/SE0hPfrwflI/AAAAAAAAABw/lnojuV-3K8E/s72-c/skybox.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-1010862598983603523</id><published>2008-06-09T03:47:00.001-07:00</published><updated>2008-06-09T04:08:39.829-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Extruding map example</title><content type='html'>Following on from the Away3D course I thought I better knock together a few of my own demos!  Here is a simple example of how to make a terrain.&lt;br /&gt;First you need to create a 2D map in a sort of ordanance survey style, with lighter colours representing peaks and darker colours represnting valleys on a sliding scale.  This is a very simple one that I knocked up quickly in Flash.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/SE0LFscsfmI/AAAAAAAAABg/kMP3W9Wxs8A/s1600-h/mountain.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/SE0LFscsfmI/AAAAAAAAABg/kMP3W9Wxs8A/s320/mountain.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5209832536396299874" /&gt;&lt;/a&gt;&lt;br /&gt;Take this into Photoshop or whatever you use and change the colour pallete to grey scale, so you have another image that looks like this:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/SE0LgsVRPUI/AAAAAAAAABo/a51YbSa9JGk/s1600-h/mountain_greyscale.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/SE0LgsVRPUI/AAAAAAAAABo/a51YbSa9JGk/s320/mountain_greyscale.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5209833000221621570" /&gt;&lt;/a&gt;&lt;br /&gt;Next step is to create a plane with around 25 polygons (depending on your speed/detail requirements) and use the colour image as the material, which will give you a flat plane with the colour image on it.&lt;br /&gt;The code will look something like this:&lt;br /&gt;material = new BitmapMaterial( Cast.bitmap(elevationImage) );&lt;br /&gt;var nPolys:Number = 25;&lt;br /&gt;plane = new Plane({material:material, width:512, height:512, segmentsW:nPolys,segmentsH:nPolys});&lt;br /&gt;&lt;br /&gt;Then create a bitmap data object from the grey scale image and loop through that picking a pixel at increments of the width/number of polygons.  If you use getPixel32 and bit shift the result, then set it to a base 10 number, you will get a number between 0(black) and 255(white).  The code will be something ala:&lt;br /&gt;var px = (bmp.getPixel32((nWidth/nPolys)*(nPolys-x),(nHeight/nPolys)*(nPolys-y)) &amp; 0xFF).toString(10);&lt;br /&gt;You can use this number to extrude that vertex of the plane to a the number px/maximum height you are achieving:&lt;br /&gt;var vert:Vertex = plane.vertex(y,nPolys-x);&lt;br /&gt;vert.position = new Number3D(vert.x,vert.y+(px*.75),vert.z);&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.infopods.com/chris/away3d/SimpleExtrudeExample.html' target='_blank'&gt;There is an example of how it works here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This could have real application for something such as an extruding floor plan for an estate agent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-1010862598983603523?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/1010862598983603523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=1010862598983603523' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1010862598983603523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1010862598983603523'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/06/extruding-map-example.html' title='Extruding map example'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_b2NoaZMSi58/SE0LFscsfmI/AAAAAAAAABg/kMP3W9Wxs8A/s72-c/mountain.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-7838981484693865320</id><published>2008-06-09T03:31:00.000-07:00</published><updated>2008-06-09T03:47:03.154-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><title type='text'>Away3D/Papervision course</title><content type='html'>I attended Rob Bateman's Away3D/Papervision course a few weeks ago so thought I would make a quick blog entry about it.  It spanned two days and covered all the basics from setup to interaction using PhongMaterials.  We covered lights, textures, transforms, filters, loading and interacting with models using Colada.  &lt;br /&gt;&lt;br /&gt;All in all it was a very good course.  I learnt and understand all the basics of what's what and how it fits together now.  Also I now have a decent overview on what is and isn't possible with 3D in Flash.  When to use it and when to look at alternatives can be a tricky thing to decide especially with all the hype surrounding Papervision and Flash generally.&lt;br /&gt;&lt;br /&gt;I think that Flash 3D (whether it be Papervision or Away) certainly does have a place, although it should not be used for the sake of having 3D.  Spinning globes and the like are fine but I haven't seen too much else which really warrants the use of 3D in Flash (with one notable exception which used a really nice 3D navigation which I can't remember the url of!)&lt;br /&gt;&lt;br /&gt;In Flash3D, the interaction between objects is very limited (although Wow physics engine looks very promising) and creating games or immersive environments seems to be beyond it at the moment. There are better tools for this such as Unity or even Director 3D, which although I haven't used for a number of years was still well ahead then where 3D in Flash is now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-7838981484693865320?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/7838981484693865320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=7838981484693865320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7838981484693865320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7838981484693865320'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/06/away3dpapervision-course.html' title='Away3D/Papervision course'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-7526028004974084409</id><published>2008-04-29T12:33:00.000-07:00</published><updated>2008-04-29T12:42:15.158-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><title type='text'>MSN Messenger Game</title><content type='html'>I am currently working on an MSN version of a really cool shoot-em-up game that I made for WallE.  The standalone version is not live anywhere yet as it was just release to the markets today.  The stand along version is a basic duck shoot type of affair with 6 levels, a whole host of different objects to shoot and a bonus video trailer to unlock.  It should be live in the next week.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/SBd5QHRI5lI/AAAAAAAAABY/z9x2QiMCEB0/s1600-h/scrapshoot.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/SBd5QHRI5lI/AAAAAAAAABY/z9x2QiMCEB0/s320/scrapshoot.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194754012930958930" /&gt;&lt;/a&gt;&lt;br /&gt;The MSN Messenger version will allow two people to play against each other in real time . Each player has to shoot the items first to get the points.  There is going to be a little lag as MSN only allows for 2 messages to be sent a second, but so far in testing it looking very playable!  I will put it up here as soon as it goes live, which 'hopefully' will be in the next week or so....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-7526028004974084409?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/7526028004974084409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=7526028004974084409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7526028004974084409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7526028004974084409'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/04/msn-messenger-game.html' title='MSN Messenger Game'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_b2NoaZMSi58/SBd5QHRI5lI/AAAAAAAAABY/z9x2QiMCEB0/s72-c/scrapshoot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-7357479308864933774</id><published>2008-04-29T12:20:00.000-07:00</published><updated>2008-04-29T12:28:34.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Wall E - europe version live</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/SBd21XRI5kI/AAAAAAAAABQ/bOqfUO32rCw/s1600-h/walle.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/SBd21XRI5kI/AAAAAAAAABQ/bOqfUO32rCw/s320/walle.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194751354346202690" /&gt;&lt;/a&gt;&lt;br /&gt;I recently worked on the trailer site for the new disney movie WallE.  It is AS3 and I hasten to add, was designed in the States!  It had been made but in a completely non-localisable fashion.  I reworked it to include a few design tweaks, update a few sections and make it all xml driven for 12 European markets.  It was made originally in an 'interesting' fashion (think all AS3 on the timeline!) which made it quite a challenge!  Still, it was good to be doing some more AS3 stuff.&lt;br /&gt;Have a look at the french version here: &lt;a href=""&gt;http://www.disney.fr/FilmsDisney/Wall-E/index_fr.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-7357479308864933774?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/7357479308864933774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=7357479308864933774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7357479308864933774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/7357479308864933774'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/04/wall-e-europe-version-live.html' title='Wall E - europe version live'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_b2NoaZMSi58/SBd21XRI5kI/AAAAAAAAABQ/bOqfUO32rCw/s72-c/walle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-6682984221701777427</id><published>2008-04-29T12:04:00.000-07:00</published><updated>2008-04-29T12:17:05.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>Famous Five goes live!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/SBd0EXRI5jI/AAAAAAAAABI/CFnkDvqNnxg/s1600-h/famousfive.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/SBd0EXRI5jI/AAAAAAAAABI/CFnkDvqNnxg/s320/famousfive.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194748313509357106" /&gt;&lt;/a&gt;&lt;br /&gt;The new &lt;a href="http://www.famousfive.co.uk/"&gt;Famous Five&lt;/a&gt; website has just gone live.&lt;br /&gt;It is one of the first AS3 sites I have done and although it is very simple, is clean was turned around very quickly and works pretty seemlessly.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.famousfive.co.uk/"&gt;www.famousfive.co.uk&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-6682984221701777427?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/6682984221701777427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=6682984221701777427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6682984221701777427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6682984221701777427'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/04/famous-five-goes-live.html' title='Famous Five goes live!'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_b2NoaZMSi58/SBd0EXRI5jI/AAAAAAAAABI/CFnkDvqNnxg/s72-c/famousfive.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-9082259002727938636</id><published>2008-03-16T06:13:00.000-07:00</published><updated>2008-03-16T06:33:58.466-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as3'/><title type='text'>AS3 Speed tests and paticle fun</title><content type='html'>Inspired by an excellent demo on particle creation that I saw at FITC Amsterdam by &lt;a href='http://www.sebleedelisle.com/'&gt;Seb Lee Delisle&lt;/a&gt;, I put together this demo of exploding confetti to see how many seperate clips I could realistically expect to be able to generate for particle effects... remember these clips are all being rotated and there is an blur filter attached to the screen.  I am currenly working on a game which is going to use loads of these effects as they are so versatile.&lt;br /&gt;&lt;br /&gt;&lt;object width="400" height="400"&gt;&lt;br /&gt;&lt;param name="movie" value="http://www.infopods.com/chris/work/burn.swf" &gt;&lt;br /&gt;&lt;embed src="http://www.infopods.com/chris/work/burn.swf" width="400" height="400"&gt;&lt;br /&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-9082259002727938636?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/9082259002727938636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=9082259002727938636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/9082259002727938636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/9082259002727938636'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/as3-speed-tests-and-paticle-fun.html' title='AS3 Speed tests and paticle fun'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-6688142284215840766</id><published>2008-03-14T17:17:00.000-07:00</published><updated>2008-03-16T07:56:20.205-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><title type='text'>Cross Platform Desktop Characters in AIR</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_b2NoaZMSi58/R9sXre2f3rI/AAAAAAAAAAs/Ebf7aAGLN8g/s1600-h/runningman.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_b2NoaZMSi58/R9sXre2f3rI/AAAAAAAAAAs/Ebf7aAGLN8g/s320/runningman.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5177758232375975602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I saw some transparent windows in an AIR application which looked really good... having desktop applications of any shape and size brings up loads of possibilities... one I thought of was to make a desktop character that runs around doing stuff... so I made this guy who runs across the screen then turns round and comes back when he gets to the edge of the screen... not amazingly exciting, but it has a lot of potential, maybe reacting to windows events (deleting files and so on)..  due to it's design as a cross platform distributable however, I guess that's not going to happen... I suppose I could get it to chase the mouse around the screen and then stop and start panting which would be slightly amusing... sadly my graphical skills aren't up to it so you'll have to make do with this....&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.infopods.com/chris/transparentWindows.zip'&gt;DOWNLOAD IT HERE&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-6688142284215840766?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/6688142284215840766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=6688142284215840766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6688142284215840766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/6688142284215840766'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/transparent-windows-in-air.html' title='Cross Platform Desktop Characters in AIR'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_b2NoaZMSi58/R9sXre2f3rI/AAAAAAAAAAs/Ebf7aAGLN8g/s72-c/runningman.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-653907597114311566</id><published>2008-03-14T14:53:00.001-07:00</published><updated>2008-03-14T17:29:34.966-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><title type='text'>British Airways Terminal 5 Lounges</title><content type='html'>The video laden site that I made for British Airways/Agency.com showcasing their new first class lounges has gone live... loads of great 3d and AfterEffects (which I can't take credit for), I just put it all together... it shows what you can do if you have the budget. I think it is debateable what the target market is and who will benefit from the site, but it looks great!&lt;br /&gt;&lt;br /&gt;Check it out at:&lt;br /&gt;&lt;br /&gt;&lt;a href='http://www.terminal5.ba.com/en/'&gt;Click to see the page here&lt;/a&gt; and click on the "Lounges" button on the left menu as it gets loaded into a javascript overlay.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_b2NoaZMSi58/R9r1wO2f3pI/AAAAAAAAAAU/98nHxESdZNQ/s1600-h/ba_terminal5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_b2NoaZMSi58/R9r1wO2f3pI/AAAAAAAAAAU/98nHxESdZNQ/s320/ba_terminal5.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5177720930585009810" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-653907597114311566?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/653907597114311566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=653907597114311566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/653907597114311566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/653907597114311566'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/british-airways-terminal-5-lounges.html' title='British Airways Terminal 5 Lounges'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_b2NoaZMSi58/R9r1wO2f3pI/AAAAAAAAAAU/98nHxESdZNQ/s72-c/ba_terminal5.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-9152363353855129432</id><published>2008-03-14T14:39:00.000-07:00</published><updated>2008-03-14T14:48:15.530-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><title type='text'>Viva voodo doll creator goes live</title><content type='html'>I was lucky enough to work on a doll maker application for the incredible &lt;a href='http://vivavoodoo.com/'&gt;Vivavoodo site&lt;/a&gt;.. it allows you to create jpegs of twisted looking dolls that you can create in your likeness, or pick from one of the celebrity lookey likeys...&lt;br /&gt;&lt;br /&gt;Here's one I made earlier... if I was with you now, you'd swear it was a photo of me..&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_b2NoaZMSi58/R9ryW-2f3oI/AAAAAAAAAAM/Y6Mf0uM-3ic/s1600-h/viva_voodoo.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_b2NoaZMSi58/R9ryW-2f3oI/AAAAAAAAAAM/Y6Mf0uM-3ic/s320/viva_voodoo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5177717198258429570" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-9152363353855129432?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/9152363353855129432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=9152363353855129432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/9152363353855129432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/9152363353855129432'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/viva-voodo-doll-creator-goes-live.html' title='Viva voodo doll creator goes live'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_b2NoaZMSi58/R9ryW-2f3oI/AAAAAAAAAAM/Y6Mf0uM-3ic/s72-c/viva_voodoo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-2768377688736927421</id><published>2008-03-14T14:13:00.000-07:00</published><updated>2008-03-14T17:30:20.709-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><title type='text'>Adobe Air FLV Player</title><content type='html'>Fresh from my masterclass on Adobe Air I decided to try and make something useful using native windows... I decided on a standalone FLV player to start with as I reckoned that it wasn't going to take too long... it uses the native window class to allow the user to drag on flv's and it resizes itself to fit the the dimensions with a little tween... also you can right click to get the meta data... &lt;br /&gt;Added to that the app comes with cool icons..&lt;br /&gt;i will update it when I have time to, so that it lists where the cue points are and puts all the meta and cue data in an easy to read panel... when their's time...&lt;br /&gt;&lt;br /&gt;If you want to look at it, you can download it here:&lt;br /&gt;&lt;a href='http://www.infopods.com/chris/AIR/simpleFlvPlayer.zip'&gt;&lt;b&gt;Simple FLV Player&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;view the source by rightclicking over the initial screen when the app has installed and is running.&lt;br /&gt;&lt;br /&gt;If you're short of flv's to test with, you can download this little experiment I did in AfterEffects  &lt;a href='http://www.infopods.com/chris/AIR/timewarp.zip'&gt;&lt;b&gt;Sample FLV&lt;/b&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;You will need to install the AIR runtime as well which I think happens automatically after a few prompts...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-2768377688736927421?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/2768377688736927421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=2768377688736927421' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2768377688736927421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2768377688736927421'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/adobe-air-flv-player.html' title='Adobe Air FLV Player'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-862865593600970747</id><published>2008-03-12T15:35:00.000-07:00</published><updated>2008-03-14T14:29:16.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>FiTc Amsterdam</title><content type='html'>So I went along to FiTc Amsterdam for the three days... &lt;br /&gt;It kicked off with the Air Masterclass on the Sunday which was more like an introduction to Air than a masterclass, but interesting none the less... then it was two days of talks from the usual suspects.  Lots of stuff on Air and a few other interesting bits and pieces.  I will edit this post at a later date to give credit those who interested me.  There were some evening events with free beer (good), but not surprisingly the male to female ratio was 1:0 (not so good) ... I left shortly afterward arriving.     &lt;br /&gt;The whole event was pretty good but probably not as inspiring as Flash on The Beach, but I will go again next year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-862865593600970747?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/862865593600970747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=862865593600970747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/862865593600970747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/862865593600970747'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/fitc-amsterdam.html' title='FiTc Amsterdam'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-1691410912268133948</id><published>2008-03-12T15:06:00.000-07:00</published><updated>2008-04-03T13:19:43.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><title type='text'>Nissan Adventure Widget Phase 1 Goes Live</title><content type='html'>After what ended up being a protracted project the Nissan Adventure Widget has finally gone live!  &lt;b&gt;It was a really great project to work on and ended up being very Web 2.0 intergrating Google Maps, YouTube and Flickr into a widget&lt;/b&gt;... no mean feat as it turned out! :)&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;br /&gt;&lt;param name="movie" value="http://www.extreme-sports-adventure.co.uk/nissan_adventure.swf" base='.'&gt;&lt;br /&gt;&lt;embed src="http://www.extreme-sports-adventure.co.uk/nissan_adventure.swf" width="425" height="350" base='.'&gt;&lt;br /&gt;&lt;/embed&gt;&lt;br /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Firstly I had to intergrate &lt;b&gt;Google Maps&lt;/b&gt; into the Flash which was no mean feat!  There is a component that does it but that routed calls via it's server, which was no good for a commercial project.... fortunately I found some open source code from Critical Mass who made the best part of a google maps engine in Flash for a &lt;a href="http://experiencematters.criticalmass.com/2007/12/14/google-maps-in-a-flash/"&gt;Rolex project&lt;/a&gt;.  God knows how long it took them to do.. as far as I can tell it works out which images google will download and creates the urls needed.  Good work and big thanks to those guys! It took a while to work out what did what, but once I did that, it didn't require too much hacking to get it to do what I wanted... which was nice.  It is only AS2 mind, but then you can't have everything!&lt;br /&gt;&lt;br /&gt;Next the client needed to be able to upload photos to a &lt;a href="http://www.flickr.com"&gt;flickr&lt;/a&gt; account which the widget would then be pulled in by the widget as thumbnails and be able to view the image in a larger size and then link out to the correct image in &lt;b&gt;Flickr&lt;/b&gt;... hmmm, fortunately as is usually the case with Flash someone has already done pretty well everything that you will need to do... this time I looked to a friend &lt;a href='http://www.kelvinluck.com'&gt;Kelvin Luck&lt;/a&gt; who has made a right fancy set of classes which act as a wrapper for calls to Flickr.  It can do a lot more than I wanted and I would say if you do have to intergrate Flickr have a look at &lt;b&gt;&lt;a href='http://flashr.kelvinluck.com/'&gt;Flashr&lt;/a&gt;&lt;/b&gt;.  Word on the street is that there may be an AS3 version coming out sooooon.&lt;br /&gt;&lt;br /&gt;Finally to complete their Web 2.0 requests the client also wanted to be able to do a similar thing with &lt;b&gt;YouTube&lt;/b&gt;, being able to upload videos to a profile and then use the widget to download them, display thumbnails and show the video within the application!  Again someone has already done this (I think it was Flash Dynamix or something like that) but it used their servers, which again was no good for a commercial project... the tricky bits where that as a widget if I tried to make calls directly to YouTube I was getting security errors... on top of this to play the video in Flash I needed the url of the actual clip which isn't in the xml that gets returned from YouTube... the security errors were sorted by doing some simple backend programming which acted as a proxy for Flash... to construct the url of the video I did what I often do and set about finding someone else who has done it!  Fortunately I stumbled upon this rather clever Indian fella &lt;a href='http://www.abdulqabiz.com/blog/archives/flash_and_actionscript/constructing_youtube_1.php'&gt;Abdul Qabiz&lt;/a&gt; who has loads of really useful info on his site...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-1691410912268133948?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/1691410912268133948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=1691410912268133948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1691410912268133948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/1691410912268133948'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/nissan-adventure-widget-goes-live.html' title='Nissan Adventure Widget Phase 1 Goes Live'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-2329388398474451871</id><published>2008-03-12T15:04:00.000-07:00</published><updated>2008-03-14T14:52:54.214-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Mr Men wins Revolution Creative award</title><content type='html'>The &lt;a href='http://www.mrmen.com'&gt;Mr Men TV site&lt;/a&gt; that I made (along with a group of talented individuals at Digital Outlook!) won the Revolution Creative Award against some stiff competition... this is the first award winning project I have worked on, and it hopefully won't be the last!&lt;br /&gt;&lt;br /&gt;The site is about to be localised for the French...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-2329388398474451871?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/2329388398474451871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=2329388398474451871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2329388398474451871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/2329388398474451871'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/mr-men-wins-award.html' title='Mr Men wins Revolution Creative award'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-5944094250399605631</id><published>2008-03-12T15:03:00.001-07:00</published><updated>2008-03-14T14:30:17.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='as2'/><title type='text'>Useful equations</title><content type='html'>To make an item face the way it is moving use:&lt;br /&gt;clip.rotation = Math.atan2(yVel,xVel)*(180/Math.PI);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-5944094250399605631?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/5944094250399605631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=5944094250399605631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5944094250399605631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/5944094250399605631'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2008/03/useful-equations.html' title='Useful equations'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5332102462806692298.post-4685621994689740868</id><published>2007-10-03T03:28:00.000-07:00</published><updated>2008-03-14T14:51:18.654-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Mr Men Phase 2 Launched</title><content type='html'>The second phase of &lt;a href="http://www.mrmen.com" target="_blank"&gt;http://www.mrmen.com&lt;/a&gt; which I have been working on for a while has now launched and I think it looks great!  It's aimed at 7 year olds and judging by my playtesting with my nephew, it is spot on.  Lots of great animation and catchphrases, fun games and things for the kids to download and colour in.&lt;br /&gt;&lt;br /&gt;The whole site was made in Flash and is fully localisable so watch out for forthcoming different language versions.&lt;br /&gt;&lt;br /&gt;The new tv series launches at the start of Januray (I think) in the UK and US and was made entirely in Flash!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5332102462806692298-4685621994689740868?l=misterchristopher-flash.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misterchristopher-flash.blogspot.com/feeds/4685621994689740868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5332102462806692298&amp;postID=4685621994689740868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4685621994689740868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5332102462806692298/posts/default/4685621994689740868'/><link rel='alternate' type='text/html' href='http://misterchristopher-flash.blogspot.com/2007/10/mr-men-launched.html' title='Mr Men Phase 2 Launched'/><author><name>Mister Christopher</name><uri>http://www.blogger.com/profile/17486473912272769082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
