Hace mucho tiempo estoy intentando hacer un cubo en AS3.
Mi idea es poder hacer un cubo perfecto. Por perfecto me refiero a que no sea hecho con drawTriangles, si no que sean 6 caras independientes, rotadas de tal manera que si yo acerco el cubo en el eje z me pueda meter dentro.
Bueno... lo estoy intentando hacer en Flex, pero no puedo hacer que las caras, al pasar por detras, se pasen atras, como corresponden... o sea... la cara de adelante, queda siempre adelante...
Les dejo el link y el código que tengo hasta ahora.
ASI ME QUEDA ( notese que la cara de adelante siempre pasa por adelante
http://www.miguelvedoya.com.ar/Proyectos/Cubo3D.swf
Código ActionScript :
package Clases
{
import flash.events.Event;
import flash.display.Sprite;
public final class Cubo extends Sprite
{
//Contenedor de las caras.
private var aContenedorCaras:Array = new Array();
//Cubo.
private var cubo3D:Sprite = new Sprite();
//Caras.
private var caraSuperior:mcCara = new mcCara();
private var caraInferior:mcCara = new mcCara();
private var caraFrontal:mcCara = new mcCara();
private var caraPosterior:mcCara = new mcCara();
private var caraIzquierda:mcCara = new mcCara();
private var caraDerecha:mcCara = new mcCara();
public function Cubo()
{
//Metemos las caras en el contenedor.
aContenedorCaras.push( caraSuperior );
aContenedorCaras.push( caraInferior );
aContenedorCaras.push( caraFrontal );
aContenedorCaras.push( caraPosterior );
aContenedorCaras.push( caraIzquierda );
aContenedorCaras.push( caraDerecha );
//Agregamos las caras al cubo.
cubo3D.addChild( aContenedorCaras[0] );
cubo3D.addChild( aContenedorCaras[1] );
cubo3D.addChild( aContenedorCaras[2] );
cubo3D.addChild( aContenedorCaras[3] );
cubo3D.addChild( aContenedorCaras[4] );
cubo3D.addChild( aContenedorCaras[5] );
//Agregamos el cubo.
this.addChild( cubo3D );
//Ajuste de la orientacion de las caras.
caraSuperior.rotationX = 90;
caraInferior.rotationX = 90;
caraDerecha.rotationY = 90;
caraIzquierda.rotationY = 90;
//Posicionamos las caras.
caraSuperior.y = -100;
caraInferior.y = 100;
caraIzquierda.x = -100;
caraDerecha.x = 100;
caraFrontal.z = -100;
caraPosterior.z = 100;
//Agregamos listener.
this.addEventListener( Event.ENTER_FRAME, evRotar );
}
private function evRotar( e:Event=null ):void
{
var aInfo:Array = new Array();
for( var i:uint=0; i<cubo3D.numChildren; i++ ){
aInfo.push( aContenedorCaras[i].transform.getRelativeMatrix3D( cubo3D ).position );
aContenedorCaras[i].z = aInfo[i].z;
aContenedorCaras[i].x = aInfo[i].x;
aContenedorCaras[i].y = aInfo[i].y;
cubo3D.removeChildAt( i );
}
//aContenedorCaras.sortOn( "z", Array.NUMERIC | Array.DESCENDING );
for ( var j:uint = 0; j < aContenedorCaras.length; j++ ) {
cubo3D.addChild( aContenedorCaras[j] );
}
cubo3D.rotationY++;
}
}
}Desde ya... muchas gracias.
