数日前にFlash Player 10(Astro)のベータ版が発表されて新機能や新クラスの話題でFlash界隈は盛り上がってるみたい。DisplayObjectのプロパティに新しくz軸が追加されて3D描画が可能になった。とはいっても今まで自分で設定しなくちゃいけなかった焦点距離の計算が省けただけなのかな?単純にdrawRect()するだけではdepth sortingやbackface cullingまではしてくれないみたい。僕も色々調べ中。とりあえずFlash Player 10 で 3Dしてみた (Unknown Quality)を参考に3Dやってみた。参考元はFlex SDK 3.0.1より前のものを使用しているのでパブリッシュに色々トリック(astro::って部分等)を使ってるみたいだけど、現在はFlash Player 10用にパブリッシュできるFlex SDK 3.0.1.xが配布されているので気にしなくてよい。
![My First Astro [FLASH 10]My First Astro](http://boreal-kiss.com/flash/ex/32/myfirstastro.gif)
[FLASH 10]My First Astro (再生にはFlash Plaeyer 10が必要)
[関連リンク]
- Flash Player 10の新機能デモ (English)
- Flash Player 10の新機能解説(日本語)
- Flex SDK 3.0.1.xのダウンロード(English)
- Flex SDK 3.0.1.xの設定(日本語)
- Flex SDK 3.0.1.xの設定ビデオチュートリアル(English)
- Flash 10 drawing APIの詳細な解説(English)
Adobe Labs - Flash Player 10 Feature Demos and Videos
akihiro kamijo: Flash Player 10 beta 公開
Targeting Flash Player 10 Beta with Flex SDK 3.0.x
FlashPlayer/10/API - Spark project
The Flash Blog » Video Tutorial on Compiling for Flash Player 10
一応ソースコード。rotationXとかあるよね。
package { /* * Requires Flex SDK 3.0.1.x to be compiled */ import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; [SWF(width="550",height="400",backgroundColor="0×0")] public class Main extends Sprite{ //size of the box private const SIZE:Number = 100; public function Main(){ var spr:Sprite = new Sprite(); spr.x = stage.stageWidth/2; spr.y = stage.stageHeight/2; addChild(spr); makeCube(spr,0x005885); spr.addEventListener(Event.ENTER_FRAME,rotate); } private function makeCube(s:Sprite,c:uint):void{ //front var f1:Shape = new Shape(); f1.graphics.lineStyle(2,c); f1.graphics.drawRect(0,0,SIZE,SIZE); f1.x = -SIZE/2; f1.y = -SIZE/2; f1.z = -SIZE/2; s.addChild(f1); //back var f2:Shape = new Shape(); f2.graphics.lineStyle(2,c); f2.graphics.drawRect(0,0,SIZE,SIZE); f2.x = -SIZE/2; f2.y = -SIZE/2; f2.z = SIZE/2; s.addChild(f2); //left var f3:Shape = new Shape(); f3.graphics.lineStyle(2,c); f3.graphics.drawRect(0,0,SIZE,SIZE); f3.rotationY = 90; f3.x = -SIZE/2; f3.y = -SIZE/2; f3.z = SIZE/2; s.addChild(f3); //right var f4:Shape = new Shape(); f4.graphics.lineStyle(2,c); f4.graphics.drawRect(0,0,SIZE,SIZE); f4.rotationY = 90; f4.x = SIZE/2; f4.y = -SIZE/2; f4.z = SIZE/2; s.addChild(f4); //top var f5:Shape = new Shape(); f5.graphics.lineStyle(2,c); f5.graphics.drawRect(0,0,SIZE,SIZE); f5.rotationX = 90; f5.x = -SIZE/2; f5.y = -SIZE/2; f5.z = -SIZE/2; s.addChild(f5); //bottom var f6:Shape = new Shape(); f6.graphics.lineStyle(2,c); f6.graphics.drawRect(0,0,SIZE,SIZE); f6.rotationX = 90; f6.x = -SIZE/2; f6.y = SIZE/2; f6.z = -SIZE/2; s.addChild(f6); } private function rotate(e:Event):void{ const DUMP:Number = 0.25; var dx:Number = (mouseX - stage.stageWidth/2); var dy:Number = (mouseY - stage.stageHeight/2); e.target.rotationY = -dx*DUMP; e.target.rotationX = dy*DUMP; } } }
Related posts:
Tags: FlashPlayer10