
Код AS3:
package
{
import flash.events.*;
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.xml.*;
import com.greensock.*;
import com.greensock.easing.*;
import com.greensock.plugins.*;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.core.effects.view.ReflectionView;
public class cardGames extends ReflectionView
{
private var cardsArray:Array = new Array();
private var _back:back = new back();
private var _material:BitmapFileMaterial;
private var b_material:MovieMaterial;
private var myLoader:URLLoader;
private var myXML:XML;
protected var treeMatList:MaterialsList;
private var _cube:Cube;
private var cubesArray:Array = new Array();
private var current_cubeIndex:int = -1;
//Variebles for 3D//////////////////////////////////////////////////////////////////////////////////////////////
/*public var viewport:Viewport3D = new Viewport3D();
public var scene:Scene3D = new Scene3D();
public var camera:Camera3D = new Camera3D();
public var renderer:BasicRenderEngine = new BasicRenderEngine();*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public function cardGames(viewportWidth:Number = 800, viewportHeight:Number = 600, scaleToStage:Boolean=true, interactive:Boolean=true, cameraType:String="CAMERA3D")
{
super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
this.addEventListener(Event.ADDED_TO_STAGE, addToStageFunction);
}
private function addToStageFunction(e:Event):void
{
this.removeEventListener(Event.ADDED_TO_STAGE, addToStageFunction);
readXML();
}
private function readXML()
{
myXML = new XML();
var XML_URL:String = "deckCards.xml?"+ Math.random();
var myXMLURL:URLRequest = new URLRequest(XML_URL);
myLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
}
private function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
var listXML = myXML.children();
for(var i:int = 0; i < 54; i++ )
{
cardsArray.push(listXML[i]);
}
buildDesk();
}
private function buildDesk()
{
var startX:Number = -500;
var startY:Number = 650;
for(var i:int = 0; i < 7; i++)
{
for(var j:int = 0; j < 7; j++)
{
treeMatList = new MaterialsList();
_material = new BitmapFileMaterial(cardsArray[i * 7 + j]);
b_material = new MovieMaterial(new back());
_material.smooth = true;
b_material.smooth = true;
treeMatList.addMaterial( _material, "front" );
treeMatList.addMaterial( b_material, "back" );
_cube = new Cube(treeMatList, 141.525, 0, 208, 6, 6, 6);
_cube.name = (i * 7 + j).toString();
_cube.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler, false, 0, true);
_cube.x = startX; _cube.y = startY; startX += 185;
scene.addChild(_cube); cubesArray.push(_cube);
}
startX = -500; startY -= 215;
}
addChild(viewport);
renderer.renderScene(scene, camera, viewport);
addEventListener(Event.ENTER_FRAME, enterFrame);
}
private function planeClickedHandler(e:InteractiveScene3DEvent):void
{
current_cubeIndex = e.currentTarget.name;
trace("current_cubeIndex " + current_cubeIndex );
}
public function enterFrame(e:Event) : void
{
renderer.renderScene(scene, camera, viewport);
if(current_cubeIndex != -1)
{
TweenLite.to(cubesArray[current_cubeIndex], 0.5, { rotationY:180, ease:Quint.easeInOut } );
current_cubeIndex = -1;
trace("current_cubeIndex = " + current_cubeIndex);
}
cubesArray[39].rotationY += 6;
}
}
}