topical media & game development

talk show tell print

#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.