3D景深排序碰到的问题
生活随笔
收集整理的這篇文章主要介紹了
3D景深排序碰到的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
研究3D,碰到Z軸景深問題,前面的無法顯示,問題描述于代碼中
package com.utils
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Vector3D;
public class Carousel extends Sprite
{
private var _holder:Sprite; //容器
private var _items:Array; //保存子對象數組
private var _radius:Number = 200; //半徑
private var _numItems:int = 5; //子對象個數
public function Carousel()
{
_holder = new Sprite();
_holder.x = stage.stageWidth / 2;
_holder.y = stage.stageHeight / 2;
_holder.z = 0; //問題出在我把z軸注釋掉,自定義排序函數為空,因為自定義函數是基于z軸計算的
addChild(_holder);
_items = new Array();
//創建5個方形
for (var i:int = 0; i < _numItems; i++)
{
var angle:Number = Math.PI * 2 / _numItems * i;
var item:Sprite = makeItem();
item.x = Math.cos(angle) * _radius;
item.z = Math.sin(angle) * _radius;
item.rotationY = -360 / _numItems * i + 90;
_items.push(item);
}
sortItem();
addEventListener(Event.ENTER_FRAME, onEnter);
}
private function makeItem():Sprite
{
var con:Sprite = new Sprite();
con.graphics.beginFill(Math.random() * 0xffffff);
con.graphics.drawRect( -50, -50, 100, 100);
_holder.addChild(con);
return con;
}
private function sortItem():void
{
_items.sort(depthSort);
for (var i:int = 0; i < _items.length; i++)
{
_holder.addChildAt(_items[i] as Sprite,i)
}
}
private function depthSort(objA:DisplayObject, objB:DisplayObject):int
{
var posA:Vector3D = objA.transform.matrix3D.position;
posA = _holder.transform.matrix3D.deltaTransformVector(posA);
var posB:Vector3D = objB.transform.matrix3D.position;
posB = _holder.transform.matrix3D.deltaTransformVector(posB);
return posB.z - posA.z;
}
private function onEnter(e:Event):void
{
_holder.rotationY += (stage.stageWidth / 2 - mouseX) * .01;
//_holder.y += (mouseY - _holder.y) * .1;
sortItem();
}
}
}
?
運行正常
轉載于:https://www.cnblogs.com/dbxh/archive/2011/11/29/2267316.html
總結
以上是生活随笔為你收集整理的3D景深排序碰到的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jquery $ 符号讲解
- 下一篇: UVA 10154 Weights an