[ActionScript 3.0] AS3 3D星形贴图

 1 package
 2 {
 3     import flash.display.Bitmap;
 4     import flash.display.BitmapData;
 5     import flash.display.MovieClip;
 6     import flash.display.Sprite;
 7     import flash.display.TriangleCulling;
 8     import flash.events.Event;
 9     import flash.geom.Vector3D;
10
11     /**
12      * @author Frost.Yen
13      * @E-mail [email protected]
14      * @create 2015-9-11 上午10:48:09
15      *
16      */
17     [SWF(width="1024",height="768")]
18     public class StarTexture extends Sprite
19     {
20         [Embed(source="test.jpg")]
21         private var _img:Class;
22         private var _bmpd:BitmapData;
23         private var _pointContainer:Sprite;
24         private var _graphicContainer:Sprite;
25         private var _pointArr:Array = [];
26         private var _objArr:Array = [];
27         private var _num:int = 5;
28         private var _boo:Boolean;//是否是离五角星中心点较近的顶点
29         private var _radius1:Number = 100;//五角星中心点离较远顶点的距离(可看作五角星外接圆的半径)
30         private var _radius2:Number = 40;//五角星中心点离较近顶点的距离(可看作五角星内接圆的半径)
31         private var _focus:Number = 400;
32         public function StarTexture()
33         {
34             initViews();
35             initEventListeners();
36         }
37         private function initViews():void
38         {
39             _pointContainer = new Sprite();
40             _graphicContainer = new Sprite();
41             _pointContainer.x = _graphicContainer.x = this.stage.stageWidth*0.5;
42             _pointContainer.y = _graphicContainer.y = this.stage.stageHeight*0.5;
43             _bmpd = (new _img() as Bitmap).bitmapData;
44             this.addChild(_pointContainer);
45             this.addChild(_graphicContainer);
46             createStar();
47         }
48         private function initEventListeners():void
49         {
50             this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
51         }
52         private function onEnterFrame(e:Event):void{
53             for(var i:int=0;i<_pointArr.length;i++){
54                 _pointArr[i].Z = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.z;
55                 _pointArr[i].X = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.x*(_focus/(_focus+_pointArr[i].Z));
56                 _pointArr[i].Y = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.y*(_focus/(_focus+_pointArr[i].Z));
57                 (_pointArr[i] as MovieClip).transform.matrix3D.appendRotation((mouseX-_pointContainer.x)/50,Vector3D.Y_AXIS);
58                 (_pointArr[i] as MovieClip).transform.matrix3D.appendRotation((_pointContainer.y-mouseY)/50,Vector3D.X_AXIS);
59             }
60             _graphicContainer.graphics.clear();
61             _objArr = [];
62             for(i=0;i<_num*2;i++){
63                 var vertices:Vector.<Number> = new Vector.<Number>();
64                 vertices.push(_pointArr[_num*2].X,_pointArr[_num*2].Y,_pointArr[i].X,_pointArr[i].Y,_pointArr[(i+1)%(_num*2)].X,_pointArr[(i+1)%(_num*2)].Y,_pointArr[(i+2)%(_num*2)].X,_pointArr[(i+2)%(_num*2)].Y);
65                 var indices:Vector.<int> = new Vector.<int>([0,1,2,0,2,3]);
66                 var uvtData:Vector.<Number> = Vector.<Number>([0,0,1,0,1,1,0,1]);//不能new,如果new会导致运行flash.display.Graphics.drawTriangles()运行错误:ArgumentError: Error #2004: 某个参数无效。tel me why?
67                 var Z:Number = _pointArr[i].Z + _pointArr[(i+1)%(_num*2)].Z;
68                 _objArr.push({V:vertices,I:indices,U:uvtData,Z:Z});
69             }
70             _objArr.sortOn("Z",18);
71             for(i =0;i<_objArr.length;i++){
72                 _graphicContainer.graphics.beginBitmapFill(_bmpd);
73                 _graphicContainer.graphics.drawTriangles(_objArr[i].V,_objArr[i].I,_objArr[i].U,TriangleCulling.NONE);
74                 _graphicContainer.graphics.endFill();
75             }
76         }
77         private function createStar():void
78         {
79             for(var i:int = 0;i<_num*2;i++){
80                 var mc:MovieClip = new MovieClip();
81                 _pointContainer.addChild(mc);
82                 if(_boo){
83                     mc.x=_radius2*Math.cos(2*Math.PI/(_num*2)*i);
84                     mc.y=_radius2*Math.sin(2*Math.PI/(_num*2)*i);
85                 }else{
86                     mc.x=_radius1*Math.cos(2*Math.PI/(_num*2)*i);
87                     mc.y=_radius1*Math.sin(2*Math.PI/(_num*2)*i);
88                 }
89                 mc.z = 0;
90                 _pointArr.push(mc);
91                 _boo = !_boo;
92             }
93             var centerMC:MovieClip = new MovieClip();
94             _pointContainer.addChild(centerMC);
95             centerMC.x = 0;centerMC.y = 0;centerMC.z = -60;
96             _pointArr.push(centerMC);
97         }
98     }
99 }
时间: 2024-11-16 03:30:59

[ActionScript 3.0] AS3 3D星形贴图的相关文章

[ActionScript 3.0] AS3 3D双圆环贴图

1 package 2 { 3 import flash.display.Bitmap; 4 import flash.display.BitmapData; 5 import flash.display.MovieClip; 6 import flash.display.Sprite; 7 import flash.display.TriangleCulling; 8 import flash.events.Event; 9 import flash.geom.ColorTransform;

[ActionScript 3.0] AS3 绘制星形

1 package 2 { 3 import flash.display.Sprite; 4 import flash.events.Event; 5 6 /** 7 * @author Frost.Yen 8 * @E-mail [email protected] 9 * @create 2015-9-9 下午4:47:50 10 * 11 */ 12 [SWF(width="1024",height="1024",frameRate="5")

3D星形贴图

3D星形贴图: /** * * *---------------------* * | *** 3D星形贴图 *** | * *---------------------* * * 编辑修改收录:fengzi(疯子.wu341.wgq341) * * 不会写代码,我是代码搬运工. * * 联系方式:QQ(493712833). * * 随 笔: https://www.cnblogs.com/fengziwu/ * * 版权协议:请自觉遵守LGPL协议,欢迎修改.复制.转载.传播给更多需要的人.

[ActionScript 3.0] as3处理xml的功能和遍历节点

as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象时,ActionScript 会分析数据并将其分层结构加载到内存(如果 XML 数据格式有误,它会发送运行时错误). 利用 XML 和 XMLList 对象的运算符和方法可以轻松遍历 XML 数据的结构. 1.读取外部 XML 文档 可以使用 URLLoader 类从 URL 加载 XML 数据.若

[ActionScript 3.0] AS3实现3D旋转

1 package 2 { 3 import flash.display.Bitmap; 4 import flash.display.BitmapData; 5 import flash.display.DisplayObject; 6 import flash.display.Sprite; 7 import flash.events.MouseEvent; 8 import flash.events.TimerEvent; 9 import flash.geom.PerspectivePr

[ActionScript 3.0] AS3 绘制正八面体(线条)

分析: 将八面体置于3D坐标系中,其中心的坐标位于原点(0,0,0),让八面体的六个顶点恰好位于3D坐标系的x轴.y轴和z轴上,则从八面体的中心到这六个顶点的距离是相等的.我们可以假设这个距离为r,则六个顶点的坐标分别为上(0,-r,0).下(0,r,0).四周:左(-r,0,0).右(r,0,0).前(0,0,-r).后(0,0,r). 1 package 2 { 3 import flash.display.MovieClip; 4 import flash.display.Sprite;

[ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains

简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时候,默认的设置工作的很好,你甚至不知道他们的存在. 但是某些时候你可能需要控制默认设置以外的更多行为和功能,这样你就会遇到前面所说的问题.你也许会困扰于Security.allowDomain和crossdomain.xml文件的区别,又或者你想要深究关于安全性的最佳实践.如果是这样,那么这篇文章就

[ActionScript 3.0] AS3.0和AS2.0的相互通信

AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) { var param = "this message is from as2"; var caller:LocalConnection = new LocalConnection(); caller.send("AS2 send to AS3","funI

[ActionScript 3.0] AS3虚线绘制方法

import flash.geom.Point; import flash.display.MovieClip; import flash.display.Graphics; var mc:MovieClip=new MovieClip(); addChild(mc); drawDashed(mc,new Point(100,100),new Point(500,100),5,5); function drawDashed(mc:Sprite,p1:Point,p2:Point,length:N