好时光。
如您所知,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现在渲染速度非常慢 :-(
请改进此代码或建议更好的代码。
答案 0 :(得分:0)
关于代码的一些小注:
s.graphics.endFill()
致电后drawRect()
)cacheAsBitmap
适用于没有应用旋转的显示对象
我建议查看这些资源:
以上所有内容都使用了Flash Player 10的功能,但使用像Away3D这样的3D API可能会更加简单,它已经提供了以非常高的速度绘制圆柱体(带纹理)的简单方法(特别是使用硬件加速的新版本)