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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     Matrix3Dについて-MCをステージ中心からズラした場合
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
HIKAHIKA
Åê¹ÆNo.46695
投稿日時: 2011-1-3 0:29
新米
居住地:
投稿: 9
使用環境:
Matrix3Dについて-MCをステージ中心からズラした場合
今回は2枚の画像を回転させるサンプルを使って、変数の値を変えた場合どう動きが変わるのかを見ていたところ一つどう検索しても解決できなかったものがあります。

以下のソースですが、stage第1フレームに記述したものです。ステージには何も配置せずライブラリには「Image0」、「Image1」とクラス名をつけた横100px、縦100pxの画像が2枚あります。ステージのサイズを600px、200pxとします。

変数nXをstage.stageWidth / 2、nUnitを50pxと大きめに取れば2枚の画像がちょうどY軸に対して90度あたりで表裏の深度が入れ替わりきれいに動いてくれるのですが、例えば中心からズラして(X軸に90pxズラす)2枚の画像の間隔を小さく(間隔を5px)取るとY軸に対して90度を過ぎたあたり、または90度手前くらいで深度が切り替わってしまい深度が切り替わる瞬間が見えてしまいます、
中心からズラしても2枚の画像の間隔を大きめにとれば深度が切り替わる瞬間は見えずに済むのですが、中心からズレてなおかつ2枚の画像の間隔が小さくても深度が切り替わる瞬間を見せず済む方法はないのでしょうか?

※このソースはこちら野中文雄さんが書かれた記事で掲載されているサンプルを使用しています。


var mySprite:Sprite = new Sprite();
var nX:Number = 90;
var nY:Number = stage.stageHeight / 2;
var nUnit:Number = 5;
var frontSprite:Sprite = xCreateFace(Image0, 0, 0, -nUnit);
var backSprite:Sprite = xCreateFace(Image1, 0, 0, nUnit, 180);
var nDeceleration:Number = 3;
mySprite.z = 0;
var myMatrix3D:Matrix3D = mySprite.transform.matrix3D;
mySprite.x = nX;
mySprite.y = nY;
addChild(mySprite);
mySprite.addChild(frontSprite);
mySprite.addChild(backSprite);
addEventListener(Event.ENTER_FRAME, xRotate);
function xCreateFace(myBitmapData:Class, nX:Number, nY:Number, nZ:Number, nRotationY:Number = 0):Sprite {
	var myBitmap:Bitmap = new Bitmap(new myBitmapData(0, 0));
	var faceSprite:Sprite = new Sprite();
	faceSprite.addChild(myBitmap);
	myBitmap.x = -myBitmap.width / 2;
	myBitmap.y = -myBitmap.height / 2;
	faceSprite.x = nX;
	faceSprite.y = nY;
	faceSprite.z = nZ;
	faceSprite.rotationY = nRotationY;
	return faceSprite;
}
function xRotate(eventObject:Event):void {
	var nRotationY:Number =nDeceleration;
	myMatrix3D.appendTranslation(-nX, -nY, 0);
	myMatrix3D.appendRotation(nRotationY, Vector3D.Y_AXIS);
	myMatrix3D.appendTranslation(nX, nY, 0);
	xSetOrder();
}
function xSetOrder():void {
	var faces_array:Array = new Array();
	var nChildren:uint = mySprite.numChildren;
	for (var i:uint = 0; i < nChildren; i++) {
		faces_array.push(mySprite.getChildAt(i));
	}
	faces_array.sort(compare);
	for (var j:uint = 0; j < nChildren; j++) {
		var faceSprite:Sprite = faces_array[j];
		mySprite.setChildIndex(faceSprite, j);
	}
}
function compare(a:Sprite, b:Sprite):Number {
	var nA:Number = a.transform.getRelativeMatrix3D(this).position.z;
	var nB:Number = b.transform.getRelativeMatrix3D(this).position.z;
	if (nA < nB) {
		return 1;
	} else if (nA > nB) {
		return -1;
	} else {
		return 0;
	}
}
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » Matrix3Dについて-MCをステージ中心からズラした場合 HIKAHIKA 2011-1-3 0:29
     Re: Matrix3Dについて-MCをステージ中心からズラした場合 Fumio 2011-1-3 14:55
       Re: Matrix3Dについて-MCをステージ中心からズラした場合 HIKAHIKA 2011-1-3 21:38

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