-
I posted to delicious.com
makemachine -> AS3 and sound experiments
- Tags:
- as3
- visualization
- code
July 22 2010, 3:45pm | Comments »
-
I posted to delicious.com
AS3 Sound Synthesis III – Visualization and Envelopes @bit101 - excellent tutorials in regards to generating sound with flash! Thanks
http://www.bit-101.com/blog/?p=2675
- Tags:
- ActionScript
- Flash
- as3
- sound
July 22 2010, 3:45pm | Comments »
-
I posted to delicious.com
Adobe Connect session on Android with Flash Player 10.1
July 11 2010, 3:26pm | Comments »
-
I posted to delicious.com
AS3 2D Ray Casting For Collision Detection
http://rocketmandevelopment.com/2010/07/08/as3-2d-ray-casting-for-collision-detection/
- Tags:
- as3
July 11 2010, 3:22pm | Comments »
-
I posted to delicious.com
Powerflasher PDFbook3D
http://www.pdfbook3d.powerflasher.com/multimedia-solutions/pdfbook-3d/demo/
July 2 2010, 9:42pm | Comments »
-
I posted to delicious.com
Brightcove launches Android App SDK and offers Flash 10.1 video support on devices
June 28 2010, 9:14pm | Comments »
-
I posted to delicious.com
Adobe Museum of Digital Media - InsideRIA
http://www.insideria.com/2010/06/adobe-museum-of-digital-media.html
- Tags:
- as3
- art
- generative
June 28 2010, 9:14pm | Comments »
-
I posted to delicious.com
splinklibrary - reflection in AS3, Event distribution, and queue based tweening!
http://code.google.com/p/splinklibrary/
- Tags:
- ActionScript
- as3
- events
- reflection
June 25 2010, 7:46am | Comments »
-
I posted to i-create.org
Tweet Tank in Away3D and Hype pt. 2
http://i-create.org/2010/05/16/away3d-with-hype-fish-tank-part-2/
I have now added support to search twitter. Once you search twitter it repopulates the fish bowl with fish that once clicked will navigate to that twitter search result. I have been working on optimizing the content. Specifically the fish models are very processor intensive. I have been looking at different ways to improve this. Away3Dlite is new than the other versions and it does have many benefits. The main build has other techniques like level of detail and fogging. These help to reduce the over all processor hit. I believe in the near future some of these features will hopefully be ported over to the Away3Dlite version if not then within in the next couple of weeks I will port this over. I think utilizing fogging and level of detail will greatly reduce the overall processor hit. Processor Intensive Experiment:
You will notice that when it renders it is rendering 110+ DisplayObject3D I have also been working on Garbage Collection I have found that after doing several searches the Memory is increasing greatly. So I have added some techniques like removing the objects and then nullifying them although it doesn’t appear to be helping much. I will have to look into this again soon. I would also like to super impose a Google map on the top make it click-able and then have the camera zoom in on that particular fish which should not really be difficult at all because I can use tween lite to simply zoom the camera to the objects position. So I am not done with this and I will be revisiting these issues. Memory management can be difficult. I will also be scouring the web for flash tools that help profile and reduce memory so if anyone has any suggestions feel free to chime in. I have also been reading the 3D in Flash Book from Friends of Ed it does have a whole chapter on optimizing 3D content for the web so I will be reading that chapter soon. I have also been looking at gSkinners blog it has a considerable amount in regards to memory management. The Source Code:
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLLoader; import flash.net.URLRequest; import flash.system.System; public class TweetTank extends Sprite { public var twitterFish:tweetFish; public var searchClipGo:searchClip = new searchClip(); public var sound:Sound; private var musicChannel; public function TweetTank() { addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler, false, 0, true); } private function addedToStageHandler(e:Event):void { playMusic(); twitterFish=new tweetFish; addChild(twitterFish); twitterFish._twitSearch = "Flash"; twitterFish.init(); twitterFish.visible = true; addChild(searchClipGo); searchClipGo.x = 250; searchClipGo.y = 30; searchClipGo.btnSearch.addEventListener(MouseEvent.CLICK, TweetSearch); removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); } public function TweetSearch(e:MouseEvent):void{ //trace(searchClipGo.txtSearch.text); try{ this.twitterFish.killAll(); this.twitterFish.xMove = null; this.twitterFish.twFishOne = null; this.twitterFish = null; twitterFish=new tweetFish; addChild(twitterFish); twitterFish._twitSearch = searchClipGo.txtSearch.text; twitterFish.init(); twitterFish.visible = true; addChild(searchClipGo); searchClipGo.x = 250; searchClipGo.y = 30; searchClipGo.btnSearch.addEventListener(MouseEvent.CLICK, TweetSearch); System.gc(); // the GC will perform a full mark/sweep on the second call. }catch(fail:Error){ //trace(fail); } } public function playMusic():void { sound = new Sound(); sound.load( new URLRequest( "test.mp3" ) ); musicChannel=sound.play(0, int.MAX_VALUE); try{ }catch(e:Error){ musicChannel.removeEventListener(Event.SOUND_COMPLETE, loopMusic); } musicChannel.addEventListener(Event.SOUND_COMPLETE, loopMusic); } public function loopMusic(e:Event):void { if (musicChannel!=null) { playMusic(); } } } } package { import away3dlite.containers.ObjectContainer3D; import away3dlite.materials.*; import away3dlite.materials.WireColorMaterial; import away3dlite.primitives.Cube6; import away3dlite.templates.BasicTemplate; import away3dlite.core.base.*; import away3dlite.core.utils.*; import away3dlite.events.*; import twFish.*; import twTank.*; import RSSJSONW; import com.theflashblog.utils.Math2; import com.adobe.utils.XMLUtil; import com.adobe.serialization.json.JSON; import com.adobe.xml.syndication.rss.Item20; import com.adobe.xml.syndication.rss.RSS20; import flash.events.IOErrorEvent; import flash.events.EventDispatcher; import flash.events.SecurityErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.navigateToURL; import flash.net.URLRequestMethod; import flash.system.Security; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Vector3D; import flash.media.Sound; import flash.display.*; import flash.net.URLRequest; import flash.display.Bitmap; import flash.display.BlendMode; import flash.filters.BlurFilter; import flash.filters.GlowFilter; import flash.media.SoundChannel; import flash.utils.Timer; import flash.events.TimerEvent; import flash.system.System; import gs.TweenLite; import hype.extended.behavior.FunctionTracker; import hype.extended.layout.GridLayout; import hype.framework.sound.SoundAnalyzer; public class tweetFish extends BasicTemplate { private var origin:Vector3D=new Vector3D(0,40,900); public var twFishOne:TwFish1; public var twTankC:TwTank1; public var soundAnalyzer:SoundAnalyzer; private var myX:Number=0; public var layout:GridLayout; public var Tank:ObjectContainer3D; public var xMove:FunctionTracker; public var _twitSearch:String; public var xScaleTracker:FunctionTracker; public var yScaleTracker:FunctionTracker; public var zScaleTracker:FunctionTracker; [Bindable]public var myRSS:RSSJSONW; Security.loadPolicyFile("http://twitter.com/crossdomain.xml"); Security.allowInsecureDomain("*"); Security.allowDomain("*"); public var myTimer:Timer = new Timer(1000); public var colourScheme:Array=[0x18b849,0x1858b8,0x18b81c,0x18b89c,0xb818b2,0xfd02f4,0x3102fd,0x02b3fd,0x1afd02,0xf4fd02,0xfd02f4,0x3102fd,0x02b3fd,0x1afd02,0xf4fd02]; public function tweetFish() { super(); } public function init():void { stage.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheelEvent, false, 0, true); var filterA:Array=new Array ; filterA.push(new GlowFilter(0xFFFFFF, 1, 19, 19, 1, 1, false, false)); var blur:BlurFilter = new BlurFilter(); blur.blurX=900; blur.blurY=900; filterA.push(blur); soundAnalyzer = new SoundAnalyzer(); soundAnalyzer.start(); layout=new GridLayout(-900,-175,30,30,60); Tank = new ObjectContainer3D(); view.scene.addChild(Tank); Tank.addEventListener(MouseEvent3D.MOUSE_MOVE, goFish,false, 0, true); twTankC=new TwTank1(view); view.scene.addChild(twTankC); view.mouseEnabled=true; jsonInit("http://search.twitter.com/search.json?q=" + _twitSearch); camera.z=-2000; camera.x=-1600; camera.y=400; camera.lookAt( origin ); stage.addEventListener(MouseEvent.CLICK,_checkMouseEventTrail,false,0,true); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown, false, 0, true); } public function jsonInit(siteFeed:String):void { myRSS = new RSSJSONW();; myRSS._data = ""; myRSS._txtURL = siteFeed; myRSS.onJSON(myRSS._txtURL); myTimer.start(); myTimer.addEventListener("timer", timedFunction); } public function timedFunction(eventArgs:TimerEvent):void { if (myRSS._IsReady == "true") { myTimer.stop(); addFish(myRSS); } } //Really Helpful for tracing events! public function _checkMouseEventTrail($e:MouseEvent):void { var p:* =$e.target; while (p) { //trace(">>", p.name,": ",p); p=p.parent; } } public function killAll():void { xMove.stop(); xScaleTracker.stop(); yScaleTracker.stop(); zScaleTracker.stop(); xScaleTracker = null; yScaleTracker = null; zScaleTracker = null; view.scene.removeChild(twFishOne); view.scene.removeChild(twTankC); xMove = null; twTankC = null; twFishOne = null; System.gc(); trace("Killed"); } public function addFish(myRSS:RSSJSONW):void{ //trace(myRSS._twdata.length); var numFish:Number; if(myRSS._twdata.length >= 6){ numFish = 6; }else{ numFish = myRSS._twdata.length; } for (var i:uint = 0; i<numFish; i++) { //trace(view); twFishOne=new TwFish1(view); if (i!=0) { twFishOne.x=i*randRange(-200,400); twFishOne.y=i*randRange(-200,400); twFishOne.z=i*randRange(-200,400); } var baseFrequency:uint = (90 % 64)*4; xMove=new FunctionTracker(twFishOne,"scale",dancingFish,[i,twFishOne]); xMove.start(); //trace(twFishOne.x); //var fishy:Object3D=twFishOne; //twFishOne.clipContainer.addChild(twFishOne); //twFishOne.addChild(twFishOne); view.scene.addChild(twFishOne); twFishOne.name=i.toString(); //fishy.layer.blendMode = BlendMode.ADD; twFishOne.addEventListener(MouseEvent3D.MOUSE_DOWN, goFish,false, 0, true); System.gc(); } } protected function goFish(event:MouseEvent3D):void { //trace(myRSS._twdata[int(event.currentTarget.name)]);
var myURL:URLRequest = new URLRequest(myRSS._twdata[int(event.currentTarget.name)]); navigateToURL(myURL); } public function onMouseWheelEvent(event:MouseEvent):void { //trace(event.delta); TweenLite.to(camera,1,{z: event.delta * 500 + camera.z,onUpdate: onCameraMove}); } private function keyDown(e:KeyboardEvent):void { //trace(e); switch (e.keyCode) { case 32 : moveCamera(); break; } } public function randRange(min:Number, max:Number):Number { // Generate a number between and including min - max var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min; return randomNum; } private function dancingFish(i:uint, twFishOne:TwFish1):void { var baseFrequency:uint = (i % 64)*4; //trace(baseFrequency + "-Beat"); xScaleTracker=new FunctionTracker(twFishOne,"scaleX",soundAnalyzer.getFrequencyRange,[baseFrequency,baseFrequency+4,1,2]); yScaleTracker=new FunctionTracker(twFishOne,"scaleY",soundAnalyzer.getFrequencyRange,[baseFrequency,baseFrequency+4,1,2]); zScaleTracker=new FunctionTracker(twFishOne,"scaleZ",soundAnalyzer.getFrequencyRange,[baseFrequency,baseFrequency+4,1,2]); TweenLite.to(twFishOne, 5, {x:twFishOne.x + 50, y:twFishOne.y + 50, z:twFishOne.z + 50}); xScaleTracker.start(); yScaleTracker.start(); zScaleTracker.start(); } private function moveCamera():void { //trace("In Move Camera"); TweenLite.to( camera, 4, { x: Math2.rand(-9000, 9000), y: Math2.rand(-9000, 9000), z: 1400 + Math2.rand(-9800, 9000), delay: 2, onUpdate: onCameraMove } ); } private function onCameraMove():void { camera.lookAt( origin ); } override protected function onPreRender():void { Tank.rotationY++; } } }Download Code / Launch Experiment I also like what I have been seeing in the WebGL community. I think it would be really cool if haXe created a library for exporting to webGL/JavaScript I think this would have many benefits namely I could use my Away3D skills and export to webGL. They do currently export to Canvas but at this time I am not aware of any WebGL support within haXe. HaXe does support openGL for use in its vitual machine Neko so it seems that a library will likely be available soon.
- Tags:
- 3d
- ActionScript
- Flash
- i-create
- as3
- away3d
- Experiment
- hype
- interactive
- data visualization
May 16 2010, 9:09pm | Comments »
-
I posted to delicious.com
Journey to the Next Dimension With PV3D and Funny Glasses: Part 2 | Activetuts+
May 16 2010, 8:38pm | Comments »
-
I posted to delicious.com
Away3DLite haXe + Morphing
- Tags:
- Flash
- as3
- programming
- haxe
May 15 2010, 9:30pm | Comments »
-
I posted to delicious.com
Creating graphic effects using the new #Deco scripts in #Flash Professional CS5 #as3 #cs5
http://www.adobe.com/devnet/flash/articles/deco_effects_flcs5.html?devcon=f1
May 11 2010, 11:14am | Comments »
-
I posted to i-create.org
Tweet Tank in Away3D and Hype
http://i-create.org/2010/05/10/tweet-tank-in-away3d-and-hype/
Alright so I know everyone associates Twitter with birds well all the bird models in the google 3d Warehouse suck. So I decided to make a fish tank because fish are cool. I used away3dlite, hype, and twitter to create this simple 3d / hype experiment. I will give you fare warning it is kind of processor intensive and I think if I re-export my models from prefab as a compile .awd this will alleviate some of the performance issues. The memory management isn’t so bad but I would like to improve the FPS. I will say this though in comparison to the html5 / webGL TweetTank I believe this one performs better. It also doesn’t heat up my Mac book like it is going to take off for space (I have noticed that in Firefox it does heat up when using webGL although it is a pre-alpha). I was also able to add sound to this version and use away3dlite a really solid 3d library for flash. This project was pretty easy didn’t take long to create and PreFab really speed up the process. The Experiment:
PreFab is an Air application that allows Awary3d scene designers to easily import and export models for use with away3d. It is also important to note that away3d has spent a significant amount of time to optimize 3d away3d support Binary Space Partitioning. Hopefully in future versions of PreFab we can import .bsp maps that would truly be the cats meow! I was able to use PreFab to import my .dae files with ease and export them to actionscript with minor changes. It is nice to create the models as actionscirpt class files you can easily make changes to the class file directly and it didn’t take long to get them into flash! In the next version of this fish tank I will make it so you can search twitter and the fish will be populated with your results. Right now if you click on a fish it will take you to a new window with a twitter search for “Flash”. I will also look at ways to further incorporate Hype and animate the fish more smoothly. I will also implement more camera support. In the third version I would like to demonstrate google maps integration and use the map to zoom in on the specific fish. For those of you interested learning more about Away3d I suggest this Amazon book I haven’t read it yet but I look forward to it I just received it today in the mail. Away3d is easy to use and I also highly recommend looking at Hype this is a really cool framework that really opens up lots of possibilities for your creative output! The Source Code:
package { import flash.display.Sprite; import flash.events.Event; public class TweetTank extends Sprite { public var twitterFish:tweetFish=new tweetFish; public function TweetTank() { addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler, false, 0, true); } private function addedToStageHandler(e:Event):void { addChild(twitterFish); twitterFish.init(); twitterFish.visible = true; } } } package { import away3dlite.containers.ObjectContainer3D; import away3dlite.materials.*; import away3dlite.materials.WireColorMaterial; import away3dlite.primitives.Cube6; import away3dlite.templates.BasicTemplate; import away3dlite.core.base.*; import away3dlite.core.utils.*; import away3dlite.events.*; import twFish.*; import twTank.*; import RSSJSONW; import com.theflashblog.utils.Math2; import com.adobe.utils.XMLUtil; import com.adobe.serialization.json.JSON; import com.adobe.xml.syndication.rss.Item20; import com.adobe.xml.syndication.rss.RSS20; import flash.events.IOErrorEvent; import flash.events.EventDispatcher; import flash.events.SecurityErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.navigateToURL; import flash.net.URLRequestMethod; import flash.system.Security; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Vector3D; import flash.media.Sound; import flash.display.*; import flash.net.URLRequest; import flash.display.Bitmap; import flash.display.BlendMode; import flash.filters.BlurFilter; import flash.filters.GlowFilter; import flash.media.SoundChannel; import flash.utils.Timer; import flash.events.TimerEvent; import gs.TweenLite; import hype.extended.behavior.FunctionTracker; import hype.extended.layout.GridLayout; import hype.framework.sound.SoundAnalyzer; import hype.framework.display.BitmapCanvas; import hype.extended.rhythm.FilterCanvasRhythm; import hype.extended.rhythm.FilterRhythm; public class tweetFish extends BasicTemplate { private var bitmapCanvas:BitmapCanvas; private var musicChannel; private var origin:Vector3D=new Vector3D(0,40,900); private var twFishOne:TwFish1; private var bitmapCanvasBlur:BitmapCanvas; private var twTankC:TwTank1; public var soundAnalyzer:SoundAnalyzer; public var sound:Sound; private var myX:Number=0; public var layout:GridLayout; public var Tank:ObjectContainer3D; [Bindable]public var myRSS:RSSJSONW; Security.loadPolicyFile("http://twitter.com/crossdomain.xml"); Security.allowInsecureDomain(""); Security.allowDomain(""); public var myTimer:Timer = new Timer(1000); public var colourScheme:Array=[0x18b849,0x1858b8,0x18b81c,0x18b89c,0xb818b2,0xfd02f4,0x3102fd,0x02b3fd,0x1afd02,0xf4fd02,0xfd02f4,0x3102fd,0x02b3fd,0x1afd02,0xf4fd02]; public function tweetFish() { super(); } public function init():void { stage.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheelEvent); var filterA:Array=new Array ; filterA.push(new GlowFilter(0xFFFFFF, 1, 19, 19, 1, 1, false, false)); var blur:BlurFilter = new BlurFilter(); blur.blurX=900; blur.blurY=900; filterA.push(blur); playMusic(); soundAnalyzer = new SoundAnalyzer(); soundAnalyzer.start(); layout=new GridLayout(-900,-175,30,30,60); Tank = new ObjectContainer3D(); view.scene.addChild(Tank); Tank.addEventListener(MouseEvent3D.MOUSE_MOVE, goFish,false, 0, true); twTankC=new TwTank1(view); view.scene.addChild(twTankC); view.mouseEnabled=true; jsonInit("http://search.twitter.com/search.json?q=flash"); camera.z=-2000; camera.x=-1600; camera.y=400; camera.lookAt( origin ); stage.addEventListener(MouseEvent.CLICK,_checkMouseEventTrail,false,0,true); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown, false, 0, true); } public function jsonInit(siteFeed:String):void { myRSS = new RSSJSONW();; myRSS._data = ""; myRSS._txtURL = siteFeed; myRSS.onJSON(myRSS._txtURL); myTimer.start(); myTimer.addEventListener("timer", timedFunction); } public function timedFunction(eventArgs:TimerEvent):void { if (myRSS._IsReady == "true") { myTimer.stop(); addFish(myRSS); } } //Really Helpful for tracing events! public function _checkMouseEventTrail($e:MouseEvent):void { var p:* =$e.target; while (p) { trace(">>", p.name,": ",p); p=p.parent; } } public function addFish(myRSS:RSSJSONW):void{ for (var i:uint = 0; i<myRSS._twdata.length; i++) { trace(view); twFishOne=new TwFish1(view); if (i!=0) { twFishOne.x=i*randRange(-200,400); twFishOne.y=i*randRange(-200,400); twFishOne.z=i*randRange(-200,400); } var baseFrequency:uint = (90 % 64)*4; var xMove:FunctionTracker=new FunctionTracker(twFishOne,"scale",dancingFish,[i,twFishOne]); xMove.start(); trace(twFishOne.x); var fishy:Object3D=twFishOne; //twFishOne.clipContainer.addChild(twFishOne); //twFishOne.addChild(twFishOne); view.scene.addChild(twFishOne); twFishOne.name=i.toString(); //fishy.layer.blendMode = BlendMode.ADD; fishy.addEventListener(MouseEvent3D.MOUSE_DOWN, goFish,false, 0, true); } } public function playMusic():void { sound = new Sound(); sound.load( new URLRequest( "test.mp3" ) ); musicChannel=sound.play(0, int.MAX_VALUE); try{ }catch(e:Error){ musicChannel.removeEventListener(Event.SOUND_COMPLETE, loopMusic); } musicChannel.addEventListener(Event.SOUND_COMPLETE, loopMusic); } public function loopMusic(e:Event):void { if (musicChannel!=null) { playMusic(); } } protected function goFish(event:MouseEvent3D):void { trace(myRSS._twdata[int(event.currentTarget.name)]);
var myURL:URLRequest = new URLRequest(myRSS._twdata[int(event.currentTarget.name)]); navigateToURL(myURL); } public function onMouseWheelEvent(event:MouseEvent):void { trace(event.delta); TweenLite.to(camera,1,{z: event.delta * 500 + camera.z,onUpdate: onCameraMove}); } private function keyDown(e:KeyboardEvent):void { trace(e); switch (e.keyCode) { case 32 : moveCamera(); break; } } public function randRange(min:Number, max:Number):Number { // Generate a number between and including min - max var randomNum:Number = Math.floor(Math.random()*(max-min+1))+min; return randomNum; } private function dancingFish(i:uint, twFishOne:TwFish1):void { var baseFrequency:uint = (i % 64)*4; //trace(baseFrequency + "-Beat"); var xScaleTracker:FunctionTracker=new FunctionTracker(twFishOne,"scaleX",soundAnalyzer.getFrequencyRange,[baseFrequency,baseFrequency+4,1,2]); var yScaleTracker:FunctionTracker=new FunctionTracker(twFishOne,"scaleY",soundAnalyzer.getFrequencyRange,[baseFrequency,baseFrequency+4,1,2]); var zScaleTracker:FunctionTracker=new FunctionTracker(twFishOne,"scaleZ",soundAnalyzer.getFrequencyRange,[baseFrequency,baseFrequency+4,1,2]); TweenLite.to(twFishOne, 5, {x:twFishOne.x + 50, y:twFishOne.y + 50, z:twFishOne.z + 50}); xScaleTracker.start(); yScaleTracker.start(); zScaleTracker.start(); } private function moveCamera():void { trace("In Move Camera"); TweenLite.to( camera, 4, { x: Math2.rand(-9000, 9000), y: Math2.rand(-9000, 9000), z: 1400 + Math2.rand(-9800, 9000), delay: 2, onUpdate: onCameraMove } ); } private function onCameraMove():void { camera.lookAt( origin ); } override protected function onPreRender():void { Tank.rotationY++; } } }Download Code / Launch Experiment Cool Links: Hype Hype Blog Prefab Prefab – blog Relly Cool Hype Away3d Example Away3D Context Free Art with JavaScript
- Tags:
- 3d
- ActionScript
- Flash
- i-create
- as3
- away3d
- Experiment
- hype
- interactive
- data visualization
May 10 2010, 9:05pm | Comments »
-
I posted to i-create.org
Away3D with Hype Fish Tank
http://i-create.org/2010/05/03/away3d-with-hype-fish-tank/
Well for awhile I was experimenting with C3DL which I like and will continue to play with in my spare time (Becuase it needs lots of refinement it is really rough). This is a flash rendering of the same experiment I will break this into several tutorials in the next couple weeks and post the code. In short I used PreFab to manage my models and I am really pleased with how easy it was to use! I have also decided to add sound to the experiment. I am also using the hype framework. I would like to make the fish in the Tank have a swarming effect. The swarming effect utilizes a point. I would like to look at modifying this so it could also except a vector. I will look at diving into this in the future. RIght now if you click on them they will not go to a twitter result this functionality and twitter search will be built into it at a later date probably next weekend. If you click on the spacebar the camera will zoom randomly if you spin the mouse wheel you will pivot around the center points. I will add more control in the near future. I really like the amount of control I have with the combination of Hype and Away3D this experiment was fun to put together. I am looking forward to refining it. The fish also currently dance to the music (Only if sound is not currently running in another tab like Youtube) I will work on smoothing these features out. I did get into a gotcha with mouse events in away3d and it was caused by a blur feature I added to a bitmap canvas it took me awhile to track down the issue and I found this helpful chunk of code on my quest to debug it. Check it out this is a life saver for tracking events down in ActionScript. Click Here
I enjoyed working with prefab it is an excellent tool that will greatly speed up your away3d work-flow. The guys that built away3d have a book coming out from Friends of Ed. I personally can’t wait to receive it in the mail. I also hope to see a HypeFramework book in the near future as well. It is definetly an exciting time to be a flash developer. I am really looking forward to flash being on Android. It will be fun to use the HypeFramework with the accelerometer etc.. I have been busy working. I have really been studying HTML5 and I am really excited about it. I think WebGL is really cool although I also think the browsers should open up sound streams in the browser so they can be interpreted. Currently Flash can interpret sound but you can’t make a mashUp with youtube and interpret sound from that location because that would not be inline with the Flash Security model. I have also been keeping my eye on javascript frameworks that are geared toward mobile. I recommend looking at jQTouch and Sprout Core they have lots of potential. CSS3 is definitely the holy grail of CSS. The CSS transforms that are allowed on Webkit are awesome. Hopefully all the other browsers will follow suit (I won’t hold my breath for Internet Exploder). I am looking forward to putting together more content that is just geared at mobile devices. I also have been playing around with the iPhone SDK I got Wolfenstein to run on my iPhone emulator this week:) Flash Links: Hype Framework Away3D PreFab WebGL Links: Learning WebGL C3DL Energize GlGE [removed] jQTouch Sprout Core Scripty ProcessingJS
May 2 2010, 10:29pm | Comments »
-
I posted to delicious.com
Big Spaceship | Labs Blog - Ensnaring mouseEnabled
http://www.bigspaceship.com/blog/labs/snaring-mouseenabled/
May 2 2010, 1:56am | Comments »
-
I posted to delicious.com
Sean McCracken Interview - InsideRIA #as3 #llvm
http://www.insideria.com/2010/04/sean-mccracken-interview.html
April 29 2010, 3:40am | Comments »
-
I posted to delicious.com
Event.bubbles, Event.cancelable, and Event.currentTarget
http://www.rubenswieringa.com/blog/eventbubbles-eventcancelable-and-eventcurrenttarget
April 14 2010, 3:42pm | Comments »
-
I posted to delicious.com
Creating Custom Events In Flash AS3 (ActionScript 3)
http://www.8bitrocket.com/newsdisplay.aspx?newspage=5776
- Tags:
- as3
April 13 2010, 7:52pm | Comments »
-
I posted to delicious.com
An ActionScript 3.0 Recursion Excursion | ActionScript 3 Design Patterns
http://www.as3dp.com/2008/10/23/an-actionscript-30-recursion-excursion/
April 13 2010, 5:05pm | Comments »
-
I posted to delicious.com
Create your own ColorPicker using a Bitmap | ColorPicker AS3
http://www.zedia.net/2010/create-your-own-colorpicker-using-a-bitmap/
- Tags:
- as3
April 12 2010, 10:32pm | Comments »

