Three things: Getting a computer to serve a game, have it in Flash and use 3D techniques. Recently, whilst planning a project (secretly!) I was encouraged to create a little memory game. Google helped and if found this. Since it’s Away3D I tried to get it running with PV3D. Initially with CUBEs I ran into performance problems. Now I use a DisplayObject3DContainer with two Plane objects (front and back) to get that thing up and running.
Well, I would make a tutorial but Yagiz Gurgul‘s one is great to get the game logic. If anyone is interested in the PV3D constructor I am happy to post it here or provide a download… Here the snippet of the two-sided card:
private function makeTwoSidedDisplayObject(skin:String, id:int):DisplayObject3D {
var do3d:DisplayObject3D = new DisplayObject3D();
do3d.useOwnContainer = true;
do3d.filters = [new DropShadowFilter()];
var cardFront:Plane = makePlane(skin);
var cardBack:Plane = makePlane('assets/back.png');
// only the backside gets a listener for mouseEvents
cardBack.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler);
// add the planes to the displayObject
do3d.addChild(cardBack);
do3d.addChild(cardFront);
cardFront.rotationY = 180;
cardBack.z = -1;
do3d.id = id;
// bend (uses the BEND MODIFIER CLASS)
var bendBack:Bend = new Bend(cardBack);
var bendFront:Bend = new Bend(cardFront);
cardBack.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, function() { bendBack.bend(Bend.X, Bend.Z, -0.5, 0.5); bendFront.bend(Bend.X, Bend.Z, 0.3, -0.3); Tweener.addTween(cardBack, { z: -15, transition:"easeOut" } ); } );
cardBack.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, function() { bendBack.bend(Bend.X, Bend.Z, 0, 0); bendFront.bend(Bend.X, Bend.Z, 0, 0); Tweener.addTween(cardBack, { z: -1 } ); } );
cardBack.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, function() { bendBack.bend(Bend.X, Bend.Z, 0, 0); bendFront.bend(Bend.X, Bend.Z, 0, 0); } );
return do3d;
}
//
private function makePlane(skin:String):Plane {
var bitmapMaterial:BitmapFileMaterial = new BitmapFileMaterial(skin);
bitmapMaterial.interactive = true;
bitmapMaterial.smooth = true;
bitmapMaterial.tiled = true;
var p:Plane = new Plane(bitmapMaterial, cardWidth, cardHeight, 6, 6);
return p;
}
Actually it’s quite simple: creating two planes, having one set a bit back (cardBack.z = -1) and rotate it 180 degrees. By the way: the cardFront is actually turned down – so don’t get confused… The game has sound handlers as well and reads the content from a xml file.
Anyway – check it out and have fun! -> Brüno!
