这是书《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, 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 (这个图片是自己弄的)

效果:

代码:略。