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 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 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+=""; return note; } } }