トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     回転するギャラリーの挙動について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
yuunagi
Åê¹ÆNo.46693
投稿日時: 2011-1-2 21:26
新米
居住地:
投稿: 11
使用環境:
使用環境:
XP Pro(sp3)
:FlashCS3
回転するギャラリーの挙動について
(※ papervision3dを使用しています。)

任意の数を円周上に均等配置し、押したオブジェクト(平面)を中央に移動させる回転式のギャラリーを作成しています。

任意のオブジェクトを押した際に、それぞれのオブジェクトが
元あった位置(A点)から到達したい位置(B点)に移動する仕組みなのですが、その移動の仕方が直線的になってしまいます。
(円回転のギャラリーなので、円周上を通るように動かしたい)

Tweenerクラスを使用して _bezierで中継地点を作ろうと思うのですが、その中継地点の割り出し方が分りません。
適切な計算方法などはありますでしょうか?



package {
	import flash.display.*;
	import flash.events.*;
	import flash.filters.BlurFilter;
	import flash.display.Sprite;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import fl.transitions.*;
	import org.papervision3d.objects.primitives.*
	import org.papervision3d.view.BasicView;
	import org.papervision3d.core.effects.view.ReflectionView;
	import org.papervision3d.materials.BitmapFileMaterial;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.events.InteractiveScene3DEvent;
    import org.papervision3d.view.Viewport3D;
	import caurina.transitions.Tweener;
	import caurina.transitions.properties.CurveModifiers;
	CurveModifiers.init();

	[SWF (width="600",height="400",frameRate="30") ]

    public class test extends BasicView {
		private var _viewport:Viewport3D = new Viewport3D;
		private var sph;
		private var pla;
		private var _plaArr:Array = [];	// 平面を格納する配列
		private const MAX_pla:int = 8;	// 平面の個数

		/*----------------------------------------------------------------
		☆コンストラクタ
		----------------------------------------------------------------*/
		public function test () {

			super(600, 400, false, true);
			_viewport.interactive = true;

			for (var i:int = 0; i <MAX_pla; i++) {

				//マテリアル作成
				var _color:uint = Math.random() * 0x1000000;
				var material:ColorMaterial = new ColorMaterial(_color, 0.5);
				material.doubleSided = true;	//裏面表示
				material.interactive = true;	// クリックイベント
				
				// 平面オブジェクトを作成
				pla = new Plane(material, 50, 50, 2, 2);
				pla.extra = i;
				pla.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, _Click);
				pla.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, _Over);
				pla.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, _Out);

				scene.addChild(pla);	// 平面を表示(addChild)
				_plaArr[ i ] = pla;		// 配列に参照の保存
			}

			// カメラの座標
			camera.x = 0;
			camera.y = 0;
			camera.z = -camera.focus * camera.zoom;

			_expObj(0);
			addEventListener(Event.ENTER_FRAME, _EnterFrame);
		}
		/*----------------------------------------------------------------
		☆ 展開 (_expObj)
		----------------------------------------------------------------*/
		private function _expObj(id:uint):void {
			for (var i:uint = 0; i < MAX_pla; i++) {

				// 角度からラジアンに返還する
				var ele:Number = i - id;					
				var a_rot:Number = ( ele / MAX_pla) * 360;	// 角度を設定
				var a_rad:Number = a_rot * Math.PI / 180;	// ラジアンを設定
				var radius:int = 100;				// 半径
				var cenX:int = 0;				// 円の中心X座標
				var cenY:int = 0;				// 円の中心Y座標

				// 円周上に_plaArrを配置。
				var a_PointX = Math.sin(a_rad) * radius + cenX;
				var a_PointY = Math.cos(a_rad) * radius + cenY;

				// 1.6秒で位置をアニメーション
				Tweener.addTween(_plaArr[ i ], {
						x: a_PointX,
						y: a_PointY,
						time: 1.6
				});
			}
		}

		/*----------------------------------------------------------------
		☆イベント
		----------------------------------------------------------------*/
		// ENTER_FRAMEイベント
		function _EnterFrame(e){
			startRendering();	// 通常レンダリング
		}

		// Clickイベント
		function _Click(e){
			var nextId:int = e.currentTarget.extra;	// Plaのextraプロパティを取得
			_expObj(nextId);	// ☆ 展開 (_expObj)へ
		}
		// Overイベント
		function _Over(e){
			buttonMode = true;
		}
		// OUTイベント
		function _Out(e){
			buttonMode = false;
		}
	}
}


----------------

ひろゆき
Åê¹ÆNo.46696
投稿日時: 2011-1-3 1:18
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 回転するギャラリーの挙動について
問題の本質は、
「円周上に配置したオブジェクトを、直線運動ではなく、円運動をさせたい」
なのですから、
Papervision3Dとは直接は無関係でしょう?

であれば、Papervision3Dとは切り離すべきです。
でなければ、複雑なまま話を進めることになり、回答はつきづらいように思いますし、
制作中のスクリプトを掲載されても、
問題に不要なスクリプトが残ったままで、問題を複雑にするだけです。
3次元で物事を考える以前に、2次元で十分問題の本質を捉えることはできるはずです。

また、Tweenerを使わなければならない理由もありませんし、
_bezierを用いることで、円運動をさせることができるのでしょうか?

いまいちど、何をなさりたいのか整理された方がよいように思います。

なお、円運動をさせることについては、AS2.0ですが、
目的地に近づく (4)」が参考になるかもしれません。

MenuFlow [Perspective]」も参考まで。


----------------
質問する際は、回答者に具体的な情報を与えてください。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops