AS3 3D渲染缓慢

时间:2015-05-14 08:14:28

标签: actionscript-3 flash 3d

好时光。

如您所知,as3中的3d形状是平面,我们可以通过在三维中移动和旋转平面来制作多面体。

BUT ......

非多面体形状(球体,圆柱体)怎么样?

一种方法是使用扁平形状制作表面。

制作圆筒的一个例子;您可以复制此代码以查看会发生什么:

import flash.display.Sprite;




const angle:Number=Math.PI/180;

var numOfSides:uint=200;
  //number of sides around

var pixWidth:uint=4;
  //width and height of sides

var cldHeight:uint=20;
  //height of cylinder

var s:Sprite=new Sprite();

s.graphics.beginFill(0xffffff*Math.random());
s.graphics.drawRect(0,0,pixWidth,pixWidth);

addChild(s);

this.cacheAsBitmap=true;


  for(var n:uint=1;n<cldHeight;n++){
     for(var i:uint=1;i<numOfSides;i++){
         var prevS:Sprite=s;
         s=new Sprite();

         s.graphics.beginFill(0xffffff*Math.random());
         s.graphics.drawRect(0,0,pixWidth,pixWidth);

         s.x=   prevS.x +       Math.cos(-prevS.rotationY*angle)*s.width;
         s.y=n*pixWidth;
         s.z=prevS.z+Math.sin(-prevS.rotationY*angle)*s.width;

         s.rotationY=-i*(360/numOfSides);
         s.cacheAsBitmap=true;

         addChild(s);
      }
    s=new Sprite();
}

和我的问题:

Flash现在渲染速度非常慢 :-(
请改进此代码或建议更好的代码。

1 个答案:

答案 0 :(得分:0)

关于代码的一些小注:

  1. 请勿忘记在完成后结束填写(例如s.graphics.endFill()致电后drawRect()
  2. 如果我记得
  3. ,{li> cacheAsBitmap适用于没有应用旋转的显示对象
  4. 4000(200 * 20)应用了三维变换的精灵可能会略微推动显示列表。
  5. 还要记得sort the sprites
  6. 我建议查看这些资源:

    以上所有内容都使用了Flash Player 10的功能,但使用像Away3D这样的3D API可能会更加简单,它已经提供了以非常高的速度绘制圆柱体(带纹理)的简单方法(特别是使用硬件加速的新版本)