+ -
当前位置:首页 → 问答吧 → 如何取到元素的总高

如何取到元素的总高

时间:2011-01-20

来源:互联网

如何取到scene里元素的总高,朋友说用viewport.height 可以取到,但拿到的只有当前显示的高,因为想做一个双向列表,刚接触PV3D
复制内容到剪贴板
代码:
package  
{
    import flash.display.*;
        import flash.events.*;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.events.*;
    import org.papervision3d.view.BasicView;
    import caurina.transitions.Tweener;
    /**
     * ...
     * @author dsc
     */
    public class BasicViewExample extends BasicView
    {
        private var itemOfNumber        :int = 24; //物件數量。
        private var currentPlaneIndex    :Number = 0;//目前圖片的索引值。
        private var planeAngle            :Number = 65;   //角度。
        private var planeSeparation        :Number = 120;  //左右二邊Plane與Plane的間距。
        private var planeOffset            :Number = 160;  //目前所選擇的Plane其左右的間距。
        private var selectPlaneY        :Number = 0;  //目前所選擇Plane的y值。
        private var selectPlaneZ        :Number = -500;    //目前所選擇Plane的z值。
        private var isRender            :Boolean = false;
        private var planeArray          :Array = new Array()
        
        public function BasicViewExample()
        {
            init3DEngine();
            init3DObject();
            initObject();
        }
        private function init3DEngine():void {
            //super(0, 0, true, true, "Target");
            camera.z = -800;
            viewport.buttonMode = true;
            viewport.interactive = true;
            startRendering();
            
        }
        private function init3DObject():void {
            for ( var i = 0; i < itemOfNumber; i++ ) {
                var movieMat:MovieMaterial = new MovieMaterial( new _mc(), true, true, true );
                movieMat.doubleSided = true;
                movieMat.interactive = true;
                var plane = new Plane(movieMat, 200, 200);
                plane.name = "item" + i
                plane.material.movie._txt.text = i;
                //mc._txt.text = i;
                plane.extra = { id:i }
                plane.z = i * -200
                scene.addChild(plane);
                plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, on3DClick)
                planeArray.push(plane)
            }
            shiftToItem(0);
        }
        private function initObject():void {
            stage.addEventListener( MouseEvent.MOUSE_WHEEL, onEventMouseWheel);
        }
        private function on3DClick(e:InteractiveScene3DEvent):void {
            var _id:int = e.displayObject3D.extra.id;
            shiftToItem(_id);
        }
        private function shiftToItem(p_id:int) {
            
            isRender = true;
            currentPlaneIndex = p_id;
            stage.quality = StageQuality.MEDIUM;
            var _tweenObj:Object;
            for (var i:int = 0; i < itemOfNumber; i++) {
                var plane:Plane = scene.getChildByName("item" + i) as Plane;
                var dis    :int = i - p_id;
                if (i == p_id) {
                    //如果目前回圈值等於目標編號值
                    //表示目前所算算的plane為正中間顯示。
                    _tweenObj =
                    {
                        x            :0,
                        y            :selectPlaneY,
                        z            :selectPlaneZ,
                        rotationX    :0,
                        onComplete    :function ():void {
                            stage.quality = StageQuality.HIGH;
                            isRender = false;
                        }
                    };
                } else if (i < p_id) {
                    //如果回圈值小於目標編號值
                    //表示該plane在左邊。
                    _tweenObj =
                    {
                        x            :0,
                        y            :dis * planeSeparation - planeOffset,
                        z            :0,
                        rotationX    : planeAngle
                        /*onComplete  :endFun,
                        onCompletePatr:[plane]*/
                    };
                    
                } else  {
                    //plane在右邊。
                    _tweenObj =
                    {
                        x            :0,
                        y            :dis * planeSeparation  + planeOffset,
                        z            :0,
                        rotationX    : -planeAngle
                        /*onComplete  :endFun,
                        onCompletePatr:[plane]*/
                    };
                }
                _tweenObj.time = 1;
                Tweener.addTween(plane, _tweenObj);
                //使用Tweener移動物件。
            }
        }
        /*private function endFun(obj:DisplayObject3D):void {
            if(obj.y)
        }*/
        
        private function onEventMouseWheel(e:MouseEvent):void {
            //MouseEvent類別下, delta屬性可以得到滑鼠滾輪的值
            //e.dalta如果大於0,表示滾輪向上,小於0表示向下。        
            if (e.delta < 0)  {
                moveLeft();
            }else {
                moveRight();
            }
        }
        private function moveLeft():void    {
            if (currentPlaneIndex > 0) {
                //如果目前plane的索引值大於0的話
                shiftToItem(currentPlaneIndex - 1);
            }
        }
        private function moveRight():void{
            if (currentPlaneIndex < itemOfNumber -1) {
                //如果目前plane的索引值小於總數量扣一
                shiftToItem(currentPlaneIndex + 1);
            }
        }
        override protected function onRenderTick(e:Event = null):void {
            if (isRender) {
                super.onRenderTick();
            }
        }
    }
}
test01.swf (74.02 KB)
test01.swf (74.02 KB)
下载次数: 2
2011-1-20 15:50

作者: dsc0001   发布时间: 2011-01-20

FLA 里面只有一个 _mc 所以就不传了,

作者: dsc0001   发布时间: 2011-01-20