Archive for June, 2009

WordPress blog crash…

3 weeks ago I got a message from the people that host my site. During a backup procedure of the server they lost power. Everything went wrong that could go wrong which resulted in both backups being corrupt. What that meant for me was that my whole blog was gone…

That’ll teach me to make backups from my database. Luckily Google cache helped me out retrieving a lot of posts. I’ve put most of the blog back together but unfortunately you can’t re-date a new blog post with WordPress so all the links that were on other site to my blog are now broken. I’m rebuilding some of the pages on their original links. Like the link that Mario Klingemann made to my Game of Life :-)

Tags: , , ,

Saturday, June 27th, 2009 Uncategorized No Comments

Silly webcam motion tracking thingy

I was cycling home today and had a bit of a random idea on how it would be funny to track motion using the webcam and use that to move a set of eyes around. As if the person on screen could actually see you.

Anywaysss, quick half hour later and you can see the result below. Download the source if you like. Have fun playing!

Move from left to right. Or just sit still and move your left hand or right hand. You’ll figure it out.

Get Adobe Flash player

Tags: , , ,

Saturday, June 27th, 2009 Flash, as3, webcam No Comments

Kaleidoscope fun in Flash. Now with superfast image export!

I found this supercool Adobe AS3 library that uses ByteArray to export images superfast. The only thing the PHP does is put a header on it and serve it up. Wicked.

And what better way to test that than building a webcam Kaleidoscope. Hours of fun! Here is the source if you’re interested.

Get Adobe Flash player

Tags: , , , , , ,

Saturday, June 13th, 2009 Flash, as3, webcam 1 Comment

Baby steps with the Arduino Board

I’ve started playing around with the Arduino board after I saw people do cool stuff with it. What makes it really interesting for me is that you can hook it up to Flash.

There are loads of great documentation and experiments out there. Couple highlights:
- Arduino homepage
- Great first tutorial, I just did the first 3 lessons of this one. Very clear.
- Arduino and Flash
- Seb’s experiments with Flash particles & Arduino

Got my first little ‘Hello World’ project working:

Next step, Flash controlling the real word and vice versa :D

Tags: , ,

Saturday, June 13th, 2009 Arduino No Comments

My first papervision webcam experiment

The Papervision Workshop on Flash on the Beach this year really opened my eyes on the Papervision front. I never really made the step to start experimenting with Papervision because it’s not the most accessible thing to start with. At least that’s what I thought…

Ralph Hauwert really showed how easy Papervision can be and that you can have a scene up and running in no time. So hey, in comes a rainy weekend in London and you can see the result below.

I just wanted to do something weird with a webcam and Papervision. I’ve applied a threshold to the images I capture using the webcam. The further along the line the lower the value for the threshold gets. So you get a kind of tunnel that first only shows the very bright bits and then slowly shows everything.

And I’ve added a little rotation etc just because I can ;-)

I’ve put the source code in a zip. You will need the Papervision SWC or AS3 classes to run it. If you don’t have them, please have a look at the Papervision blog on the right side (Getting started 2.0).

Get Adobe Flash player

Tags: , , , , ,

Saturday, June 13th, 2009 Flash, as3, webcam 2 Comments

Colour tracking with the webcam in Flash

Something I wanted to do for a while. Track a colour using your webcam in Flash. I draw the webcam into Bitmapadata so I can play around with it. If you take the getColorBoundsRect straight from the raw bitmapdata it will be very hard to get something useful as you just have to many single pixels and colours to analise. So I implement a little trick that makes it better to analise. First I blur the video so it smooths the colours. Then I turn it into a 8 channel image.

After that I just layer a fresh video feed that isnt distorted on top and start drawing based on the colour and position.

Enjoy! You can grab the source here if you want.

Get Adobe Flash player

Tags: , , , , ,

Saturday, June 13th, 2009 Flash, as3, webcam 5 Comments

Flash Facetracking kicks ass

(This is a repost from March 2009, my blog crashed in the meantime :-) )

Last week I noticed a couple Flash guys jumping on the face tracking code. The legendary Mario Klingemann (aka Quasimondo) did a great example and shared his source code.

I really appreciate the fact that people are sharing this source code for others to play with. Good work!

I totaly love the idea of being able to track your face with the webcam. I had a little demo working yesterday (st Patricks day) where I drop a green hat on your head. Hours of fun :-) .
Today on the way into work I remembered the movie The Ring where peoples faces got blurred in pictures when they were about to die. So 20 minutes of playing around with Mario’s source code later and you can see the result below.

I can’t wait to spend a bit more time on this code and hopefully will be doing some client work using this technology soon. Fingers crossed.

Get Adobe Flash player

Tags: , , , , ,

Sunday, June 7th, 2009 Flash, as3, webcam 5 Comments

Using Flex with Flash

Here at Digital Outlook we have a very integrated approach to building games and sites. Designers should be able to find things easily and be able to do the things they do best like design, layout and animation. But on the other hand developers should be able to build great code on top of these games and sites. One thing we always tend to use is the timeline. It’s very difficult for a designer to go into a Flash file and change a little thing if everything is put on the stage by code.

But being a developer I want to use good tools to write my code. I’ve coded using Flash for a long time. Although it works fine to write classes in Flash, it’s not the most helpful tool. So I tried using Flex for a while and I have to say I love it. I had to iron out a couple issues to make Flex work with our integrated workflow as I’m still using Flash a lot and so are the designers. All projects should be compiled from Flash.

In case you’re struggling with the same issue, here is how I’ve set it up.

Folder setup:

I’ve got the flash source folder and the html publish folder setup like this:
01_development\02_flash
01_development\03_html

Create a folder for the classes in ‘02_flash’ and name it ‘classes’. We’ll get to this later.

Flash setup:

Create a new Flash file and save it in ‘02_flash’.

Go into your publish settings and select the Flash tab. Hit the ‘Settings’ button next to ActionScript version.

  • Make sure ‘Automatically declare stage instances’ is not ticked.
  • Add a class path like this: ‘../02_flash/classes’. (for some reason ‘classes’ on its own doesn’t work)

Also make sure you export to the ‘03_html’ folder but that’s the usual stuff.

Flex setup:

To create a new project do this:

  • File > new > ActionScript project.
  • Give it a name: ‘WallEGame’ for example.
  • Click on the Browse button and browse to the ‘01_development’ folder of your project.
  • Click ‘Next >’
  • At the bottom set your main source folder to ‘02_flashclasses’
  • Leave the Main application as it is (this should be WallEGame.as).
  • Set the output folder to ‘03_html’.
  • Click ‘Finish’.

Flex now creates a couple folders and your document class that it opens immediately. One last thing you need to do is go back to the Flash file you created and set the document class to ‘WallEGame’. This should sit in the classes folder but you won’t need to do ‘classes/WallEGame’ because we added that class path.

The reason we created the classes folder is because Flex otherwise copies everything from the ‘02_flash’ folder to ‘03_html’ for some reason. If it only finds scripts like in the ‘classes’ folder it’ll be fine.

Working with it:

Ok now everything is setup, let’s enjoy the powers of both worlds.

Flex creates the folder structure for you.

Create a new ‘ActionScript Class’. File > new (or right click in the source tree). Put the package in the top line: ‘com.digitaloutlook.walle.game’ for example.
Give your class a name. ‘GameManager’ for example.
If your class extends a class (MovieClip for example), hit the ‘browse’ next to the Superclass field and select MovieClip.

Click ‘finish’.

As you can see in the classes folder, Flex just created this folder structure for you. How handy is that! It also created the class file for you and created the constructor function. Cool.

Declare stage instances

Since you unticked the box in Flash to autodeclare stage instances you now have to do this in each of your classes if you have named a movieclip in Flash. The variable needs to be a public one. So if you have a MovieClip named ‘start_mc’ on the timeline you need to declare it ‘public var start_mc:MovieClip;’ in the class that goes with it. If that start_mc also has a class linked to it you should typecast it to that class but more on that later.

Autocomplete & autoimport

Flex auto completes things for you if you want. So when you start typing a variable you declared in this class just hit ctrl+space and Flex auto completes it for you.

Flex also automatically imports the classes it needs. But you have to use auto complete before it does that. So if you start typing ‘MouseEvent.MO’ let Flex auto complete it and it imports ‘flash.events.MouseEvent’ for you.

How to work with linked Bitmaps and Sounds

Normally in Flash you just set your linkage class on a sound or bitmap and you use it like ‘new backgroundimage()’. The class doesn’t exist but Flash creates it at runtime.

But Flex then gives you an error since it can’t see the class. So what I did is create that class in either a ‘bitmapassets’ folder or a ‘soundassets’ folder. So it sits in this package: ‘com.digitaloutlook.walle.game.bitmapassets’ for example.

Create a class in Flex and name it ‘BackgroundImage’ and set it’s superclass to ‘BitmapData’.

In Flash set the linkage class to ‘com.digitaloutlook.walle.game.bitmapassets.BackgroundImage’. Now in Flex you can get to this image by using ‘new BackgroundImage()’. The same goes for sounds, but they need to subclass ‘Sound’.

Make sure you type cast everything

When you create your own classes with its public functions Flex can actually recognise this and show them as you have it auto complete the things you type. But you must type cast your variables. So when you declare your variables in the top and one of them is linked to the ‘GameIntro’ class for example, you should do it like this:

Private var gameIntro:GameIntro;

This way it shows all the public functions when you type ‘gameIntro.’.

Publish your project using Flash.

Tags: ,

Sunday, June 7th, 2009 Flash No Comments

25 lines of code contest

Keith Peters organised a Flash coding contest where you could do anything you want as long as it was AS3 and didn’t exceed 25 lines. Very cool.

The contest closed last night so I can now post my entry. It’s not rocket science but I think it looks cool :-) . Have fun playing and enjoy the code if you like.


[SWF(width=800, height=800, backgroundColor=0x000000, frameRate=24)]
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

//25 lines begins here
var bmdDisplay:BitmapData = new BitmapData(800, 800, true, 0×00000000);
var drawSprite:Sprite = new Sprite();
var insideDrawSprite:Sprite = new Sprite();
var aPoints:Array = [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]];
var aPositions:Array = [[0,0,1,1],[800,0,-1,1],[800,800,-1,-1],[0,800,1,-1]];
this.addChild(new Bitmap(bmdDisplay));
drawSprite.addChild(insideDrawSprite);
this.addEventListener(Event.ENTER_FRAME, updateStage);
function updateStage(e:Event):void {
bmdDisplay.applyFilter(bmdDisplay, bmdDisplay.rect, new Point(0, 0), new ColorMatrixFilter([1, 0, 0, 0, 0, 0, 0.85, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0.92, 0]));
insideDrawSprite.graphics.clear();
insideDrawSprite.graphics.beginFill(0xFFFFFF);
for (var i:uint = 0; i<aPoints.length; i++) {
insideDrawSprite.graphics.lineTo(aPoints[i][0], aPoints[i][1]);
}
insideDrawSprite.graphics.endFill();
for(i=0;i<aPositions.length;i++){
insideDrawSprite.x = aPositions[i][0];
insideDrawSprite.y = aPositions[i][1];
insideDrawSprite.scaleX = aPositions[i][2];
insideDrawSprite.scaleY = aPositions[i][3];
bmdDisplay.draw(drawSprite);
}
aPoints = [aPoints[1], aPoints[2], aPoints[3], aPoints[4], aPoints[5], aPoints[6], aPoints[7],      aPoints[8], aPoints[9], [this.mouseX, this.mouseY]];
};

Get Adobe Flash player


Tags: , , , ,

Sunday, June 7th, 2009 Flash, as3 No Comments

CornPops Challenge live on MiniClip

This is a rebuild post from last year. The game went live at the end of August 2008. Still going strong though :-)

Big day yesterday, the game I’ve been working on for pretty much the whole of August has gone live on Miniclip. It’s an advergame we built at Digital-Outlook for the Corn Pops cereal.

CornPops on the main pageEndscreen with me in it

This was my most advanced game to date, involving a lot of physics. Building it had extreme ups and extreme downs, it really was the summer of physics for me. A nice little bonus was that I have a cameo in the end screen wearing a mullet wig…

I opted to build the engine myself instead of using one of the readily available Flash physics engines like Box2D. The main reason was that I just really like to know how it works and find great joy in figuring out these difficult math & physics problems.

If you ever want to build an engine like this yourself you might want to check out these useful links:

I think one of the main things that caused a lot of gray hairs was the fact that the engine can work well for 15 seconds and then all of a sudden something happens that makes the ball go through something it shouldn’t go through. You really learn to debug properly.

In a nutshell this is how it works:

  • define your objects. Walls are a bunch of vectors that go between 2 points. They don’t move. A ball is basically a point with a radius. It also gets a mass for ball to ball collisions. And a rag doll is a bunch of points that need to stay together using Inverse kinematics.
  • Once it is all defined you go through your list of objects checking if a collision is about to happen in this frame, the collision detection. You basically want to find out the time within this frame that the collision happens. Let’s say the first collision happens at ‘t=0.4′ (t=0 is the start of the frame, t=1 is the end of the frame). Then you move everything up to t=0.4 in the frame.
  • Now comes big step number two, the collision handling. You need to deal with different style collisions in a different way. The options I had in this game were ball-ball, ball-line or point-line. You pick the right one and then you deal with the collision adjusting the speed from the objects in collision.
  • Once that is done I have a look if another collision will happen after t=0.4. If so repeat the 2 points above until you’ve reached t=1 and you move onto the next frame.

Now go and enjoy the game over at Miniclip :-)

Tags: , , , ,

Sunday, June 7th, 2009 Digital Outlook, Flash, Games, as3 No Comments