inicio mail me! sindicaci;ón

Hello World

Apologies for not updating this blog that often… just too busy / lack of interesting things to talk about.
These days I tend to restrain my musings to 120 characters.
I also try and keep my portfolio up to date, if you want a look there.
Oh, and if you’re ever knocking around Glasgow, give me a shout. I drink a lot of Lattes at Tinder Box.

Bat Cat! - Performance of Flash Player (in Safari) on Snow Leopard is crap.

Just installed Snow Leopard yesterday and the performance of Flash Player in the browser it atrocious!
I’ve made a quick graphic to show the differences between various machines running Safari (various versions). Hopefully we’ll have a fix soon!

UPDATE: This is only within the Safari Browser, It works great in Firefox!

badcat

LINK

SWFAddress url sorting utility

UPDATE:

I don’t know how I missed this, but since v 2.1 SwfAddress has the getPathNames() method which does exactly what my bit of code does… ah well. Anyway I’ll leave it up as it has the basics of string splitting and other stuff…

Thanks to Cam for pointing this out… and while you’re at it check out his blog, he’s a much better coder than myself (but sucks at the guitar ;) )

Just thought I’d post this up as it might be helpful to someone…

Normally if you’re building a site using SwfAddress (and you should, not having any form of deeplinking in your flash site these days is utterly unforgivable) you could just on the swfAddress change do something like

switch(String(e.value).replace("/", "")){

case "news" :

openNews();

break;

case "shows" :

openShows();

break;

}

But what happens if you want to use subpages (/news/news-item), or subsubpages (/news/news-item/photo)… or however many… well, something like this will help you a lot.

var string:String = "/news/news-item";

function sortDeepLink(_deeplink:String):void{

var urlArray:Array = [];

if(_deeplink.charAt(_deeplink.length - 1) == “/”){

urlArray = _deeplink.substring(1, _deeplink.length - 1).split(”/”);

} else {

urlArray = _deeplink.substring(1, _deeplink.length).split(”/”);

}

switch(urlArray.length){

case 0 :

//Home address

trace(”Home”);

break;

case 1 :

//One tier address - ie. /news/

trace(”URL (one tier): ” + urlArray[0]);

break;

case 2 :

//Two tier array - ie. /news/news-item

trace(”URL (two tier): ” + urlArray[0],urlArray[1]);

break;

default :

//Invalid URL

trace(”URL invalid”);

break;

}

}

sortDeepLink(string);

//

You can extend the switch function to handle as many tiers as you need by just adding more cases - you can also add a 404 function in the default case if you want.

I’d love to know if anyone uses this, so post a comment if you do!

AS3 - Clock Clock clone

A few days ago the fantasticly talented Ed Watt (@designed) posted up a link on Twitter to the Clock Clock project by those crazy Swedes Humans since 1982… Anyway, I decided to have a go at recreating it in AS3 just for the hell of it…

Here’s the example, and here’s the source (it’s pretty bad, just thrown together but it works)…

EXAMPLE

- and Illuminated Example

SOURCE

DropDown menu class - as3

Hey everyone!
I keep meaning to update this blog with various titbits and stuff, but I never seem to have the time - anyway, thought I’d post up this wee drop down (combo) menu class I decided to build yesterday - It’s not been from any specific project, I just decided that the flash community needs a better dropdown that the horrific one included as standard. Anyway, it’s pretty basic just now, but it’ll do the basics and it’s totally skinable which was my main aim.

EXAMPLE

Usage is pretty simple…

import com.liamr.ui.dropDown.DropDown;
import com.liamr.ui.dropDown.Events.DropDownEvent;

var array:Array = [{label: "Hello World", data:"English - (formal)"},
{label: "Bonjour", data:"French - (formal, for daytime use; 'n' as a nasal vowel)"},
{label: "hej", data:"Danish - (informal; pronounced hey)"},
{label: "dia duit", data:"Gaelic - (informal; pronounced gee-ah ditch; literally 'God be with you')"},
{label: "Hallo", data:"German"},
{label: "ciào", data:"Italian - (pronounced chow; informal)"}];

var dd:DropDown = new DropDown(array, “Please choose…”, true, 100);

dd.addEventListener(DropDown.ITEM_SELECTED, newSelect);

dd.x = 10;

dd.y = 10;

addChild(dd);

function newSelect(e:DropDownEvent):void{

trace(e.selectedId, e.selectedLabel);

label_txt.text = e.selectedLabel;

content_txt.text = e.selectedData;

}

Just drag the DropDown class folder from the example fla, add the code above and you’re there…

enjoy!

SOURCE

Flash CMS - AS2 / XML / PHP

xmlAdmin_p

Been meaning to get this out for ages! But alas, I’ve been totally snowed under with work, and the fact that I’m all about the as3 now ;-) I’ve realised I’m never going to go through it and refine it and comment it for the community… so you’re getting it as it is. Anyway, it’s a xml editor (so no mysql) with a file manager so you can upload files, rename and preview them etc - It’s been used on quite a few clients sites of mine, although nothing too heavy mind you, leave that for the database powered stuff (although I have converted this to power mysql db’s pretty easily)… Anyway, hope it helps anyone :-D

Liam

Here’s a preview

http://www.liamr.com/labs/source/xmlAdmin/

the login’s “admin”

SCREENCAST

SOURCE

This new version of wordpress is *nnniiiccceee*

Just trying out the quickpress addage.

3D page flip!

Trent_Bailey_image_1

Check Out the screencast - Made with the awesome Jing!

How I built it…

Just finished the first draft of a site for photographer Trent Bailey… I essentially got free reign on this for the page transitions - just the basic layout was to be kept the same… so I sat down and tried to figure out something I wanted to try out for a while… a 3d page transition.
For this I had a few things to figure out before I started the project - One of them being what method to use for the transition; A) use f10’s new 3D api, B) use papervision and it’s interactive material method, or C), use flash’s Bitmap data to snap each page then add it to a 3d engine to make the flip then remove from the stage. In the end I choose the last method, because using f10’s 3d api would mean using f10 which I wasdn’t too keen on as it’ll be a while before everyone is using it. And I didn’t use papervision because even adding your displayObject to a plane as an interactiveMoveMaterial doesn’t have complete functionality (for example, you can’t use input text in them). So I went with the snapshot method… Now I needed a 3D engine.
After building a working example in Papervision on which I’d had experience in the past, I decided to look at five3D which was a much lighter engine - after all using papervision just to snap a page, flip it and remove it would be akin to driving a car down your driveway to pick up the papers.
Anyway… I have so much good to say about five3D - it made things an absolute breeze to build the pageFlipper - it’s developer Mathieu Badimon has made a great job of it…
Right, on to how I made it! Now baring in mind I built this as a proof of concept to myself - so it’s not all tidied and put into a class - I built this on… the timeline! sshh, I know….

CODE

//FLIP PAGES

function flipPages(originalMC:MovieClip, destinationMC:MovieClip, axis:String = "X"):void{

if(_pageInTransition == false){
//Note: Make sure you import the five3D classes needed.

_pageInTransition = true;

//init
destinationMC.visible = false;

//Snapshot mc's
//Create bitmapData for both the mc's
var imageOriginalBMD:BitmapData = new BitmapData(720,470, false, 0xFFFFFFFF);
var imageDestinationBMD:BitmapData = new BitmapData(720,470, false, 0xFFFFFFFF);

//Draw mc into BitMaps
imageOriginalBMD.draw(originalMC);
imageDestinationBMD.draw(destinationMC);

//The Flip

// We create a new Scene3D named "scene", center it and add it to the display list.
var scene:Scene3D = new Scene3D();
scene.x = 720 / 2;
scene.y = 470 / 2;
main.pages.addChild(scene);

//Create a Sprite3D holder - to hold our bitmaps
var bitmapHolder:Sprite3D = new Sprite3D();
bitmapHolder.childrenSorted = true;
scene.addChild(bitmapHolder);

//Add out Bitmaps to it
var originalBitmap3D:Bitmap3D = new Bitmap3D(imageOriginalBMD);
originalBitmap3D.x = - 720 / 2;
originalBitmap3D.y = - 470 / 2;
originalBitmap3D.z = 0;

bitmapHolder.addChild(originalBitmap3D);

var destinationBitmap3D:Bitmap3D = new Bitmap3D(imageDestinationBMD);

//bitmapHolder.addChild(destinationBitmap3D);

//Remove Original MC's
originalMC.visible = false;

if(axis == "Y"){

TweenLite.to(bitmapHolder, 0.3, {rotationY:90, alpha:0, onComplete:addDestination});
destinationBitmap3D.rotationY = 180;
destinationBitmap3D.x = 720 / 2;
destinationBitmap3D.y = - 470 / 2;
destinationBitmap3D.z = 0;

} else {

TweenLite.to(bitmapHolder, 0.3, {rotationX:90, alpha:0, onComplete:addDestination});
destinationBitmap3D.rotationX = 180;
destinationBitmap3D.x = - 720 / 2;
destinationBitmap3D.y = 470 / 2;
destinationBitmap3D.z = 0;
}

function addDestination(){
bitmapHolder.removeChild(originalBitmap3D)
bitmapHolder.addChild(destinationBitmap3D);
if(axis == "Y"){
TweenLite.to(bitmapHolder, 0.3, {rotationY:180, alpha:1, onComplete:finishFlip});
} else {
TweenLite.to(bitmapHolder, 0.3, {rotationX:180, alpha:1, onComplete:finishFlip});
}
}

function finishFlip(){
bitmapHolder.removeChild(destinationBitmap3D);

destinationMC.visible = true;

_pageInTransition = false;
}

} else {

trace("Already in transition!");

}

/*//Add to Stage
addChild(imageOriginalBM);
addChild(imageDestinationBM);*/

}

Now you might notice a bit of trickery here… what I had originally programmed was that the two snapshots of the pages would be put back to back, then all you’d need to do would be rotate the Sprite3D in which they both were held… well, I’m not too sure if this is a bug with five3d, or something went wrong with my code (probably the latter)… but everytime you rotated, the backMc, or Destination mc would disappear. So I ended up having the front mc rotate 90, then remove it, and adding the back mc and rotate that from -90 to 0… if anyone has any luck figuring it out, gimme a comment!

Anyway, hope this helps anyone, but I had fun doing it!

W♥rk

Ah, man! have I been busy…

Irene_Neuwirth_ss_1

Just launched http://www.ireneneuwirth.com with Designed Memory a few weeks back, and It’s been getting a lot of good feedback… I actually built an early version of the site just with AS3 all in one fla, but after coming across Steven Sack’s Gaia Framework, I rebuilt the lot and It’s turned out great! It’s got a basic admin system that adds and deletes new Collection items and press items to a mySQL database and even has this awesome little crop utility so the user can generate a thumbnail of whatever part of the image they need.

A lot of work, but a lot of fun.

Also been working on a lot of other little projects, some launched some not… but I’ve got another huge project on the go and the moment building a flash store front / admin for a New York Fashion Designer… no names yet.

♥ Liam

I’m back!

Wordpress:

I promise never to abandon you again when too much work comes along… 

(And I won’t taint you with all my tweets…)

 

Next entries »