topical media & game development
#graphic-player-10-cube-be-nascom-flash10-tests-Performance3dTest1.ax
#graphic-player-10-cube-be-nascom-flash10-tests-Performance3dTest1.ax
[swf]
[flash]
flex
package be.nascom.flash10_tests{
import be.nascom.flash.component.SimpleGridGraphic;
import be.nascom.flex.component.FlexSimpleTraceBox;
import flash.display.Bitmap;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import mx.containers.HBox;
import mx.controls.Button;
import mx.controls.ComboBox;
import be.nascom.flash10_tests.controls.RowsColsLayersControl;
public class @ax-graphic-player-10-cube-be-nascom-flash10-tests-Performance3dTest1 extends AbstractFP10Test{
protected var _grid:SimpleGridGraphic;
protected var _grid_size:uint=300;
protected var _test_sprite:Sprite;
protected var _nested_asset:Bitmap;
protected var _test_center_x:uint=400;
protected var _test_center_y:uint=300;
protected var _buttons_bar:HBox;
protected var _rotate_x_button:Button;
protected var _rotate_y_button:Button;
protected var _rotate_z_button:Button;
protected var _material_cb:ComboBox;
protected var _reset_button:Button;
protected var _rows_cols_layers:RowsColsLayersControl;
public function @ax-graphic-player-10-cube-be-nascom-flash10-tests-Performance3dTest1(){
super();
}
override protected function createChildren():void{
super.createChildren();
_buttons_bar=new HBox();
_buttons_bar.x=10;
_buttons_bar.y=10;
_rotate_x_button=new Button();
_rotate_x_button.label="press to rotate X";
_rotate_x_button.addEventListener(MouseEvent.MOUSE_DOWN,startRotateX);
_rotate_x_button.addEventListener(MouseEvent.MOUSE_UP,stopRotateX);
_buttons_bar.addChild(_rotate_x_button);
_rotate_y_button=new Button();
_rotate_y_button.label="press to rotate Y";
_rotate_y_button.addEventListener(MouseEvent.MOUSE_DOWN,startRotateY);
_rotate_y_button.addEventListener(MouseEvent.MOUSE_UP,stopRotateY);
_buttons_bar.addChild(_rotate_y_button);
_rotate_z_button=new Button();
_rotate_z_button.label="press to rotate Z";
_rotate_z_button.addEventListener(MouseEvent.MOUSE_DOWN,startRotateZ);
_rotate_z_button.addEventListener(MouseEvent.MOUSE_UP,stopRotateZ);
_buttons_bar.addChild(_rotate_z_button);
_material_cb=new ComboBox();
_reset_button=new Button();
_reset_button.label="reset";
_reset_button.addEventListener(MouseEvent.CLICK,resetRotations);
_buttons_bar.addChild(_reset_button);
addChild(_buttons_bar);
_rows_cols_layers=new RowsColsLayersControl();
_rows_cols_layers.addEventListener(RowsColsLayersControl.UPDATE_VALUES,update3DItems);
_rows_cols_layers.x=10;
_rows_cols_layers.y=40;
addChild(_rows_cols_layers);
}
override public function run():void{
FlexSimpleTraceBox.trace("Performance3dTest.run()");
createGrid();
root.transform.perspectiveProjection.projectionCenter = this.localToGlobal(new Point(_test_center_x,_test_center_y));
//update3DItems();
}
protected function createGrid():void{
_grid=new SimpleGridGraphic(_grid_size,_grid_size,20,0xFFFFFF);
_grid.x=_test_center_x;
_grid.y=_test_center_y;
test_holder.addChild(_grid);
}
protected var _test_sprites:Array;
protected function removeTestSprites():void{
var s:Sprite;
/*
for each(s in _test_sprites){
_test_sprite.removeChild(s);
_test_sprite=null
}
*/
if(_test_sprite!=null){
if(test_holder.contains(_test_sprite))test_holder.removeChild(_test_sprite);
}
//this.testNullSpriteAndRemove(test_holder,_test_sprite);
_test_sprites=new Array();
}
protected var _item_padding:uint=4;//test test...
protected function update3DItems(e:Event=null):void{
removeTestSprites();//instantiates _test_sprites
_test_sprite=new Sprite();
//_nested_asset=new TestAssets.NascomLogoBig() as Bitmap;
//_nested_asset.smoothing=true;
var grid_3d_size:uint=_grid_size/2;
var item_width:uint=Math.round(grid_3d_size*2/_rows_cols_layers.num_cols_ns.value);
var item_height:uint=Math.round(grid_3d_size*2/_rows_cols_layers.num_rows_ns.value);
var z_spacer:uint=Math.round(400/_rows_cols_layers.num_layers_ns.value);
var i:uint,j:uint,k:uint;
var layer:Sprite;
var logo:DisplayObject;
for(i=0;i<_rows_cols_layers.num_layers_ns.value;i++){
layer=new Sprite();
layer.x=-grid_3d_size;
layer.y=-grid_3d_size;
layer.z=200-z_spacer*i;
for(j=0;j<_rows_cols_layers.num_rows_ns.value;j++){
for(k=0;k<_rows_cols_layers.num_cols_ns.value;k++){
//logo=getLogo();
logo=getTestShape(item_width-_item_padding,item_height-_item_padding);
logo.x=j*item_width;
logo.y=k*item_height;
layer.addChild(logo);
}
}
_test_sprite.addChild(layer);
}
_test_sprite.x=_test_center_x;
_test_sprite.y=_test_center_y;
test_holder.addChild(_test_sprite);
//_test_sprite.graphics.beginFill();
}
protected function getLogo(w:Number,h:Number):Bitmap{
var logo:Bitmap=new TestAssets.NascomLogoBig() as Bitmap;
logo.width=w;
logo.height=h;
return logo;
}
protected function getTestShape(w:Number,h:Number):Shape{
var s:Shape=new Shape();
s.graphics.beginFill(Math.floor(Math.random()*0xFFFFFF));
s.graphics.drawRect(0,0,w,h);
s.graphics.endFill();
return s;
}
protected function resetRotations(e:Event=null):void{
if(_test_sprite==null)return;
_test_sprite.rotationX=0;
_test_sprite.rotationY=0;
_test_sprite.rotationZ=0;
_nested_asset.x=0;
_nested_asset.y=0;
_test_sprite.filters=[];
}
protected function startRotateX(e:Event=null):void{
if(_test_sprite==null)return;
addEventListener(Event.ENTER_FRAME,rotateX);
}
protected function rotateX(e:Event=null):void{
if(_test_sprite==null)return;
_test_sprite.rotationX++;
}
protected function stopRotateX(e:Event=null):void{
removeEventListener(Event.ENTER_FRAME,rotateX);
}
protected function startRotateY(e:Event=null):void{
if(_test_sprite==null)return;
addEventListener(Event.ENTER_FRAME,rotateY);
}
protected function rotateY(e:Event=null):void{
if(_test_sprite==null)return;
_test_sprite.rotationY++;
}
protected function stopRotateY(e:Event=null):void{
removeEventListener(Event.ENTER_FRAME,rotateY);
}
protected function startRotateZ(e:Event=null):void{
if(_test_sprite==null)return;
addEventListener(Event.ENTER_FRAME,rotateZ);
}
protected function rotateZ(e:Event=null):void{
if(_test_sprite==null)return;
_test_sprite.rotationZ++;
}
protected function stopRotateZ(e:Event=null):void{
removeEventListener(Event.ENTER_FRAME,rotateZ);
}
override public function destroy():void{
FlexSimpleTraceBox.trace("Nested3dTest.destroy()");
test_holder.removeChild(_grid);
_buttons_bar.removeChild(_rotate_x_button);
_rotate_x_button.removeEventListener(MouseEvent.MOUSE_DOWN,startRotateX);
_rotate_x_button.removeEventListener(MouseEvent.MOUSE_UP,stopRotateX);
_buttons_bar.removeChild(_rotate_y_button);
_rotate_y_button.removeEventListener(MouseEvent.MOUSE_DOWN,startRotateY);
_rotate_y_button.removeEventListener(MouseEvent.MOUSE_UP,stopRotateY);
_buttons_bar.removeChild(_rotate_z_button);
_rotate_z_button.removeEventListener(MouseEvent.MOUSE_DOWN,startRotateZ);
_rotate_z_button.removeEventListener(MouseEvent.MOUSE_UP,stopRotateZ);
_reset_button.removeEventListener(MouseEvent.CLICK,resetRotations);
_buttons_bar.removeChild(_reset_button);
removeTestSprites();
removeChild(_buttons_bar);
_rows_cols_layers.removeEventListener(RowsColsLayersControl.UPDATE_VALUES,update3DItems);
removeChild(_rows_cols_layers);
}
//possibility for developer to document findings, important items to note etc. Use HTML.
override public function getNotes():String{
var note:String="How do flash10 'basic 3d features' perform?";
note+="<ul>";
note+="<li>A sprite containing a grid of shape objects</li>";
note+="<li>WARNING: will crash your browser when trying out with 5000+ items...</li>";
note+="<li>no sorting implemented...</li>";
note+="</ul>";
return note;
}
}
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.