Murayama blog.

プログラミングと、その次の話

アレンジしてみた。

同じようなネタが続きます。小出しにしていけばよかったかも。



いじってたらいろいろわかってきました。

  • camera.target
    • カメラはx、y、zで位置を変えることができるんだけど、ターゲットの指定を変えないと思ったとおりに動いてくれなかった。
camera.target = cubeList[4];

とすればカメラが中央のCubeに向く。


あと、なんとなくTweenerの使い方がわかってきた。たのしー。


参考にさせて頂いたサイト。#鮭さんスゲー。
Papervision3Dをやってみた4: 鮭とプログラムとか


ソース。

package
{
	import caurina.transitions.Tweener;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.view.BasicView;
	
	public class Cube33 extends BasicView
	{
		private var cubeList:Array = []
		private var cubeSize:Number = 100;
		public function Cube33()
		{
			camera.y = 800;
			camera.x = cubeSize;
			
			for(var i:int = 0; i < 9; i++){
				var cube:Cube = createCube(cubeSize);
				cube.x = cubeSize * (i % 3)
				cube.z = cubeSize * int(i / 3)
				cubeList.push(cube);
				scene.addChild(cube);
			}
			// ターゲットを決める
			camera.target = cubeList[4];
			addEventListener(MouseEvent.CLICK, onClick);		
			startRendering();
		}

		private function createCube(size:Number = 200):Cube{
			var tileNames:Array = ["front", "back", "top", "bottom", "right", "left"];
			var tileColors:Array = [0x0000FF, 0x00FF00, 0xFF0000, 0x00FFFF, 0xFFFF00, 0xFF00FF];
			var materialsList:MaterialsList = new MaterialsList();
			for(var i:int = 0; i < tileNames.length; i++){
				var colorMaterial:ColorMaterial = new ColorMaterial(tileColors[i], 0.7);
				materialsList.addMaterial(colorMaterial, tileNames[i]);
			}
			return new Cube(materialsList, size, size, size);
		}

		override protected function onRenderTick(event:Event = null):void
		{
			super.onRenderTick(event);
		}
		
		private var moveSpace:Number = 200;
		private function onClick(evt:MouseEvent):void
		{
			for(var i:int = 0; i < cubeList.length; i++){
				var moveX:Number = 0;
				var moveZ:Number = 0;
				if(i % 3 == 2){
					moveX = +moveSpace;
				}else if(i % 3 == 0){
					moveX = -moveSpace;
				}

				if(int(i / 3) == 2){
					moveZ = +moveSpace;
				}else if(int(i / 3) == 0){
					moveZ = -moveSpace;
				}

				var cube:Cube = cubeList[i];
				Tweener.addTween(cube, {
					x:cube.x + moveX,
					z:cube.z + moveZ,					
					time:1, 
					transition:"easeOutBounce"});
					
				Tweener.addTween(cube, {
					rotationX:cube.rotationX + 90,
					time:1,
					delay:1, 
					transition:"easeOutBounce"});

				Tweener.addTween(cube, {
					rotationY:cube.rotationY + 90,
					time:1,
					delay:2, 
					transition:"easeOutBounce"});

				Tweener.addTween(cube, {
					rotationZ:cube.rotationZ + -90,
					time:1,
					delay:3, 
					transition:"easeOutBounce"});

				Tweener.addTween(cube, {
					x:cube.x,
					z:cube.z,					
					time:1,
					delay:4, 
					transition:"easeOutBounce"});
			}		
		}
	}
}