Hi,

Was just trying to work out how to work out which side of a cube is being
clicked.

If I was to use a bitmap material for each side, how would I check for which
side is clicked?

Here is my code:


private function createCube():void
{
var mat1:WireColorMaterial = new WireColorMaterial(0xFFCC00);
var mat2:ColorMaterial = new ColorMaterial(0xFF00FF);
var mat3:BitmapMaterial = new BitmapMaterial( Cast.bitmap(new hal()) );
var mat4:BitmapMaterial = new BitmapMaterial( Cast.bitmap(new hal()) );
var mat5:BitmapMaterial = new BitmapMaterial( Cast.bitmap(new hal()) );
var mat6:BitmapMaterial = new BitmapMaterial( Cast.bitmap(new hal()) );
cube = new Cube();
cube.cubeMaterials.front = mat1;
cube.cubeMaterials.back = mat2;
cube.cubeMaterials.left = mat3;
cube.cubeMaterials.right = mat4;
cube.cubeMaterials.top = mat5;
cube.cubeMaterials.bottom = mat6;
view.scene.addChild(cube);
cube.addOnMouseDown(click);
}




private function click(e:MouseEvent3D):void
{
// cube = e.target
// material = e.material
 trace("e.material = " + e.material);
trace("f.material = " + f.material);
 //trace("cube.faceVOs = " + cube.faceVOs);
var f:Face = cube.faces[0]; // which face[index] is the side we want to
test? will this change on segments value?
 // This results in error
if (f.material == mat3){
trace("mat3");
} else {
trace("not mat3");
}
}






The solution I have modifies the Away3D classes themselves, which I guess is
not a good idea.

FILE: away3d.materials.Material.as

ADDED:

        /** @private */
     arcane var _materialName:String;
     public function get matNames():String { return _materialName; }
     public function set matNames(s:String):void { _materialName = s; }




FILE: away3d.events.MouseEvent3D.as

ADDED:

     public var materialName:String;






The above modifications allow me to do the following:

private function createCube():void
{
// Create material and plane
var mat1:WireColorMaterial = new WireColorMaterial(0xFFCC00);
mat1.matName = "mat1";
 var mat2:ColorMaterial = new ColorMaterial(0xFF00FF);
mat2.matName = "mat2";
 var mat3:BitmapMaterial = new BitmapMaterial( Cast.bitmap(new hal()) );
mat3.matName = "hal 2000";
 cube = new Cube();
cube.cubeMaterials.front = mat1;
cube.cubeMaterials.back = mat2;
cube.cubeMaterials.left = mat3;
view.scene.addChild(cube);
 cube.addOnMouseDown(click);
 // Init listeners
initListeners();
}
  private function click(e:MouseEvent3D):void
{
// cube = e.target
// material = e.material
 trace("e.target = " + e.target);
trace("e.material = " + e.material);
trace("e.material.matName = " + e.material.matName); // Gives me
mat1,mat2,hal 2000, null for the rest
}





Maybe a modification to material.as and MouseEvent3D.as for the svn? or is
there a way to do this that I am missing?

Thanks

Darcey

Reply via email to