[Away3D] リサイズ処理の小ネタ
リサイズ処理を行う際、View3Dを継承しているクラスや、View3DがaddChildされているクラスのサイズを変更しても、
従来の表示リストのレイヤーに追加されているSprite等はそのままの位置・大きさで表示されてしまう!
Stage3Dと表示リストの両方のレイヤーを合わせて拡大縮小するようにしたい場合は、
(View3Dのサイズ変更の影響を受けない)表示オブジェクト用のコンテナを用意して、それぞれをリサイズすると良いです。
縦横比が変わっての歪みが問題になる場合は、別に調整する必要アリです。
/**
* 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);
}
}
}