AS3功能根据z位置排列深度&的rotationX

时间:2011-04-17 13:44:11

标签: flash flex actionscript-3

任何聪明的人都可以告诉我为什么这个函数我正在努力自动排序放置在3D平面上的物体的深度只是间歇性地工作?它似乎每隔二或三次迭代一次?

    function zsort(h){
        var zpos=[] //array to store Z positions
        var mc,mcZpos
        for(var i=0; i<h.numChildren-1; i++){
            mc = h.getChildAt(i);
            mcZpos=(mc.z - (Math.sin(mc.rotationX) * mc.height/2)) //get lowest Z point based on X rotation
            zpos.push([mcZpos, mc])
        }
        zpos.sort()
        for(i in zpos){
            h.setChildIndex(zpos[i][1], h.numChildren-1)
        }
    }

getChildAt(i)可靠吗? IE每次运行时都会返回相同的顺序,还是基于深度?

编辑:查看手册表明它可能是后者所以我想我需要在将精灵添加到父级并从那里开始工作时制作我自己的数组。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

这个课程有效,可能会优化,但它有效,应该是一个好的开始:

http://blog.theflashblog.com/?p=470

http://code.google.com/p/leebrimelow/source/browse/#svn%2Ftrunk%2Fas3%2Fcom%2Ftheflashblog%2Futil3d

由于你的算法存在问题,它可能只是最好的解决方案(既可以提高操作速度,也可以通过实例学习而不是重新发明轮子)。如果你想做除了这种基本类型的3D定位之外的任何事情,请使用库,away3d

一切顺利。 :)