I just returned from a trip round SE Asia to see my last project launch. Called ‘A History of the World in 100 Objects‘, it’s a joint venture between BBC Radio 4 and the British Museum to chart human history in a new way. I developed the concept for the Flash 3D object explorer with the guys at GT and built it using Flash 10’s native 3D capabilities. Users are able to explorer objects from throughout human history in a sort of 3D timeline and even make history by adding their own. Here’s the TV advert for the series:
Since it is expected to grow to up to 10,000 objects over the next 5 years, I used all the tricks in the book to optimise loading, rendering and memory management – which will bore most people to tears, so that’s for another time. Check out the Flash site itself here.
Just spotted a video on James Alliban’s blog of how to make your own cheap multitouch table. It’s a lot easier if you’re not initially bothered with projecting your image back into the table – otherwise you’ll need a projector (which I don’t have) and a camera capable of infrared (which some webcams may already do without requiring modification). I for one, will be having a go…
Today marks the 20th anniversary of the Tiananmen Square massacre. I found this somewhat amusing video of undercover Chinese police subtly trying to prevent a British journalist filming a report there.
After getting my Wii remote hooked up with the WiiFlash Server, I knocked up this quick Flash demo which draws the blobs of infrared light the Wii remote detects (it can track up to 4 blobs at once), just like the Wii console's sensitivity setting dialog does. I just gave each blob a different colour and clear the graphics on pressing the 'A' button.
Here's the code to get it working - requires WiiFlash Server:
var myWiimote:Wiimote = new Wiimote();
myWiimote.connect();myWiimote.addEventListener(WiimoteEvent.UPDATE, onUpdated);
myWiimote.addEventListener(ButtonEvent.A_PRESS, onAPressed);
function onUpdated (pEvt:WiimoteEvent):void{ var ir:IR = pEvt.target.ir; var irWidth:Number = 400; var irHeight:Number = 400; var irSize:Number = 4; if(ir.p1) drawCircle(ir.x1*irWidth, ir.y1*irHeight, ir.size1*irSize, 0xff0000); if(ir.p2) drawCircle(ir.x2*irWidth, ir.y2*irHeight, ir.size2*irSize, 0x00ff00); if(ir.p3) drawCircle(ir.x3*irWidth, ir.y3*irHeight, ir.size3*irSize, 0x0000ff); if(ir.p4) drawCircle(ir.x4*irWidth, ir.y4*irHeight, ir.size4*irSize, 0xffff00); }
function onAPressed (pEvt:ButtonEvent):void{
graphics.clear();
pEvt.target.rumbleTimeout = 50; }
function drawCircle (x:Number, y:Number, size:Number, colour:Number=0xffffff):void{
graphics.beginFill(colour, .2);
graphics.drawCircle(x,y,size); }