MaterialsListからMovieClipを引っ張り出してMethod

2008/06/4

Papervision3D ver.1.7をいじってみたので、メモ

//自分でリンケージしたやつ
var c:CubeMaterial = new CubeMaterial();

//Cubeに貼るときはこんな感じみたい
var materials:MaterialsList = new MaterialsList(
{
	//MovieMaterialの第3引数をtrueにしないと、
	//あとからフレームつかったmethodできないみたい
	front:  new MovieMaterial(c, false, true),
	back:   new MovieMaterial(c, false, false),
	right:  new MovieMaterial(c),
	left:   new MovieMaterial(c, false, false),
	top:    new MovieMaterial(c, false, true),
	bottom: new MovieMaterial(c)
} );

//materialsからひっぱってくるときはこんな感じで
var mm:MovieMaterial = materials.getMaterialByName("front") as MovieMaterial;
//ひっぱったあとは、textureの中にMovieClipが入っているからいろいろできる
mm.texture.gotoAndStop(3);

//この場合、どれをひっぱってきても同じcを指しているから第3引数をtrueに
//してあるやつはみんな3フレーム目にいく

今回はじめてSWFを埋め込んでみた。→nitoyonさん本当スゴイっす。そしてありがとう!!!
はてなダイアリーに Flash を埋め込むガジェット

全ソースもくっつけておく。このソースのほとんどがPV3Dをおとしたときについてくるexamplesソースの中のものだから、それ作ったひとが著作権者だとおもう。MITライセンスっていうのか。

CubeMaterialっていうのはflaからかきだしたswcの中にはいっているMovieClipです。

package {
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;

	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.cameras.FreeCamera3D;
	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.InteractiveColorMaterial;
	import org.papervision3d.materials.InteractiveMovieMaterial;
	import org.papervision3d.materials.MaterialsList;
	import org.papervision3d.materials.MovieAssetMaterial;
	import org.papervision3d.materials.MovieMaterial;
	import org.papervision3d.objects.Cube;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.Plane;
	import org.papervision3d.scenes.InteractiveScene3D;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.utils.InteractiveSceneManager;
	import org.papervision3d.utils.InteractiveSprite;



	[SWF(width="400", height="300", frameRate="30", backgroundColor="#000000")]
	public class PaperVisionTest1 extends Sprite
	{
		protected var container 				:Sprite;
		protected var scene     				:InteractiveScene3D;
		protected var camera   					:Camera3D;
		protected var ism						:InteractiveSceneManager;
		protected var plane	 	 				:Plane;
		private var mycube:Cube;


		public function PaperVisionTest1():void
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;

			init3D();
			createPlane();
			addEventListener(Event.ENTER_FRAME, loop);
		}

		protected function init3D():void {
			container = new InteractiveSprite();
			addChild(container);
			container.name = "mainCont";
			container.x = stage.stageWidth*.5;
			container.y = stage.stageHeight*.5;

			scene = new InteractiveScene3D(container);
			ism = scene.interactiveSceneManager;

			camera = new Camera3D();
			camera.zoom = 3;
			camera.focus = 100;
		}

		protected function createPlane():void {
			var c:CubeMaterial = new CubeMaterial();
			var c2:CubeMaterial = new CubeMaterial();
			var c3:CubeMaterial = new CubeMaterial();
			var material:MovieMaterial = new InteractiveMovieMaterial(c3, true, true);
			material.animated = true;
			material.smooth = true;

		var materials:MaterialsList = new MaterialsList(
		{
			//all:
			front:  new MovieMaterial(c, false, true),
			back:   new MovieMaterial(c, false, true),
			right:  new MovieMaterial(c2, false ,true),
			left:   new InteractiveMovieMaterial(c, false, true),
			top:    new MovieMaterial(c, false, true),
			bottom: new MovieMaterial(c)
		} );
			var mm:MovieMaterial = materials.getMaterialByName("right") as MovieMaterial;
			mm.texture.gotoAndStop(6);
			mm.doubleSided = true;

			mycube = new Cube( materials);
			scene.addChild(mycube);
			mycube.x = -300;

			plane = new Plane( material, 500, 500);
			plane.x = 600;
			plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleMainClick);
			mycube.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, handleMainClick2);
			scene.addChild(plane);
		}
		protected function loop(event:Event):void {
			camera.x = -(container.mouseX * 3)/2;
			camera.y = (container.mouseY * 3);
			scene.renderCamera(camera);
		}
		protected function handleMainClick(e:InteractiveScene3DEvent):void {
			trace("mouse click from: ", e.currentTarget, e.displayObject3D, e.sprite, e.target);
			var do3d:DisplayObject3D = e.target as DisplayObject3D;
			var mm:MovieMaterial = e.target.material as MovieMaterial;
			mm.texture.gotoAndStop(Math.floor(Math.random() * 6) + 1);
		}
		protected function handleMainClick2(e:InteractiveScene3DEvent):void {
			trace("mouse click from: ", e.currentTarget, e.displayObject3D, e.sprite, e.target);
		}
	}
}



自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る