Flash AS3.0 动画学作—旋转圆柱贴图【原创】
这是书《Flash ActionScript 3.0高级动画教程》 Keith Peters著,第八章 “Flash10的绘画API”的一个示例—旋转圆柱。本示例中换上自己喜欢的图片(不是自己的图片,若涉及到版权请图片作者告知,本人将另换图片),虽然代码不太好琢磨,但非专业人员换图片、改几个数值还是容易做到的。 示例制作1 代码如下:
package{ ???????import flash.display.Bitmap; ???????import flash.display.Sprite; ???????import flash.display.StageAlign; ???????import flash.display.TriangleCulling; ???????import flash.events.Event; ???????[SWF(backgroundColor=?"0x000000"?,width=?"200",height=?"180"?)] ?????? ???????public class ImageTube_1 extends Sprite{ ??????????????[Embed(source=?"image.jpg"?)] ??????????????private var ImageClass:Class; ????????????? ??????????????private var vertices:Vector.<Number> = new Vector.<Number>(); ??????????????private var indices:Vector.<int> = new Vector.<int>(); ??????????????private var uvtData:Vector.<Number> = new Vector.<Number>(); ??????????????private var bitmap:Bitmap; ??????????????private var sprite:Sprite; ??????????????private var res:Number = 35; ??????????????private var cols:int = 25;?//圆周分辨率 ??????????????private var rows:int = 6; ??????????????private var centerZ:int = 200; ??????????????private var focalLength:Number = 250; ??????????????private var radius:Number = 150; ??????????????private var offset:Number = 7.2; ????????????? ??????????????public function ImageTube_1(){ ?????????????????????sprite = new Sprite(); ?????????????????????sprite.x = stage.stageWidth/2; ?????????????????????sprite.y = stage.stageHeight/2+15; ?????????????????????addChild(sprite); ? ?????????????????????bitmap= new ImageClass() as Bitmap;?//柱体贴图 ?????????????????????makeTriangles(); ?????????????????????draw(); ???????????????????? ?????????????????????addEventListener(Event.ENTER_FRAME,onEnterFrame); ??????????????} ????????????? ??????????????private function onEnterFrame(event:Event):void{ ?????????????????????draw(); ??????????????} ??????????????private function draw():void { ?????????????????????offset += .01;??//旋转速度 ?????????????????????vertices.length = 0; ?????????????????????uvtData.length = 0; ?????????????????????for(var i:int = 0;i < rows;i++){ ????????????????????????????for(var j:int = 0;j < cols;j++){ ???????????????????????????????????var angle:Number = Math.PI * 2 / (cols - 1) * j + offset; ???????????????????????????????????var xpos:Number = Math.cos(angle) * radius; ???????????????????????????????????var ypos:Number = (i - rows / 2) * res; ???????????????????????????????????var zpos:Number = Math.sin(angle) * radius; ???????????????????????????????????var scale:Number = focalLength / (focalLength + zpos + centerZ); ???????????????????????????????????vertices.push(xpos * scale,ypos * scale); ???????????????????????????????????uvtData.push(j / (cols - 1),i / (rows - 1)); ???????????????????????????????????uvtData.push(scale); ????????????????????????????} ?????????????????????} ?????????????????????sprite.graphics.clear(); ?????????????????????sprite.graphics.beginBitmapFill(bitmap.bitmapData); ?????????????????????sprite.graphics.drawTriangles(vertices,indices,uvtData,TriangleCulling.NEGATIVE); ?????????????????????sprite.graphics.endFill(); ?????????????????????sprite.graphics.lineStyle(0,.5); ??????????????} ??????????????private function makeTriangles():void{ ?????????????????????for(var i:int = 0;i < rows;i++){ ????????????????????????????for(var j:int = 0;j < cols;j++){ ???????????????????????????????????if(i < rows - 1 && j < cols - 1){ ??????????????????????????????????????????indices.push(i * cols + j,i * cols + j + 1,(i + 1) * cols + j); ??????????????????????????????????????????indices.push(i * cols + j + 1,(i + 1) * cols + j + 1,(i + 1) * cols + j); ???????????????????????????????????} ????????????????????????????} ?????????????????????} ??????????????} ???????} } ?图片?image.jpg ?效果: 示例制作2 ?图片 image.jpg ?(这个图片是自己弄的)
?代码:略。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |