In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

[Away3D] リサイズ処理の小ネタ

リサイズ処理を行う際、View3Dを継承しているクラスや、View3DがaddChildされているクラスのサイズを変更しても、
従来の表示リストのレイヤーに追加されているSprite等はそのままの位置・大きさで表示されてしまう!

Stage3Dと表示リストの両方のレイヤーを合わせて拡大縮小するようにしたい場合は、
(View3Dのサイズ変更の影響を受けない)表示オブジェクト用のコンテナを用意して、それぞれをリサイズすると良いです。

縦横比が変わっての歪みが問題になる場合は、別に調整する必要アリです。
Get Adobe Flash player
by o8que 17 Sep 2012
/**
 * Copyright o8que ( http://wonderfl.net/user/o8que )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/lhXs
 */

package {
    import away3d.containers.View3D;
    import away3d.debug.AwayStats;
    import away3d.entities.Mesh;
    import away3d.materials.ColorMaterial;
    import away3d.primitives.CubeGeometry;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    
    [SWF(width="465", height="465", frameRate = "30", backgroundColor = "0xFFFFFF")]
    public class Main extends Sprite {
        private var _view3D:View3D;
        private var _container:Sprite;
        
        //private var _captureImage:BitmapData;
        
        public function Main() {
            Wonderfl.disable_capture();
            //addChild(new Bitmap(_captureImage = new BitmapData(465, 465, false, 0x000000)));
            
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            addChild(_view3D = new View3D());
            _view3D.scene.addChild(new Mesh(new CubeGeometry(), new ColorMaterial(0xFFFFFF)));
            
            addChild(_container = new Sprite());
            _container.graphics.beginFill(0xFF0000);
            _container.graphics.drawCircle(232.5, 232.5, 10);
            _container.graphics.endFill();
            
            var stats:AwayStats = new AwayStats(_view3D);
            stats.x = 465 - stats.width;
            _container.addChild(stats);
            
            stage.addEventListener(Event.RESIZE, resize);
            resize();
            addEventListener(Event.ENTER_FRAME, update);
        }
        
        private function resize(event:Event = null):void {
            _view3D.width = stage.stageWidth;
            _view3D.height = stage.stageHeight;
            
            _container.scaleX = stage.stageWidth / 465;
            _container.scaleY = stage.stageHeight / 465;
        }
        
        private function update(event:Event):void {
            _view3D.render();
            //_view3D.renderer.queueSnapshot(_captureImage);
        }
    }
}