[ActionScript 3.0] AS3 3D星形贴图
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.display.TriangleCulling;
import flash.events.Event;
import flash.geom.Vector3D; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-9-11 上午10:48:09
*
*/
[SWF(width="1024",height="768")]
public class StarTexture extends Sprite
{
[Embed(source="test.jpg")]
private var _img:Class;
private var _bmpd:BitmapData;
private var _pointContainer:Sprite;
private var _graphicContainer:Sprite;
private var _pointArr:Array = [];
private var _objArr:Array = [];
private var _num:int = 5;
private var _boo:Boolean;//是否是离五角星中心点较近的顶点
private var _radius1:Number = 100;//五角星中心点离较远顶点的距离(可看作五角星外接圆的半径)
private var _radius2:Number = 40;//五角星中心点离较近顶点的距离(可看作五角星内接圆的半径)
private var _focus:Number = 400;
public function StarTexture()
{
initViews();
initEventListeners();
}
private function initViews():void
{
_pointContainer = new Sprite();
_graphicContainer = new Sprite();
_pointContainer.x = _graphicContainer.x = this.stage.stageWidth*0.5;
_pointContainer.y = _graphicContainer.y = this.stage.stageHeight*0.5;
_bmpd = (new _img() as Bitmap).bitmapData;
this.addChild(_pointContainer);
this.addChild(_graphicContainer);
createStar();
}
private function initEventListeners():void
{
this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(e:Event):void{
for(var i:int=0;i<_pointArr.length;i++){
_pointArr[i].Z = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.z;
_pointArr[i].X = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.x*(_focus/(_focus+_pointArr[i].Z));
_pointArr[i].Y = (_pointArr[i] as MovieClip).transform.getRelativeMatrix3D(_pointContainer).position.y*(_focus/(_focus+_pointArr[i].Z));
(_pointArr[i] as MovieClip).transform.matrix3D.appendRotation((mouseX-_pointContainer.x)/50,Vector3D.Y_AXIS);
(_pointArr[i] as MovieClip).transform.matrix3D.appendRotation((_pointContainer.y-mouseY)/50,Vector3D.X_AXIS);
}
_graphicContainer.graphics.clear();
_objArr = [];
for(i=0;i<_num*2;i++){
var vertices:Vector.<Number> = new Vector.<Number>();
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);
var indices:Vector.<int> = new Vector.<int>([0,1,2,0,2,3]);
var uvtData:Vector.<Number> = Vector.<Number>([0,0,1,0,1,1,0,1]);//不能new,如果new会导致运行flash.display.Graphics.drawTriangles()运行错误:ArgumentError: Error #2004: 某个参数无效。tell me why?
var Z:Number = _pointArr[i].Z + _pointArr[(i+1)%(_num*2)].Z;
_objArr.push({V:vertices,I:indices,U:uvtData,Z:Z});
}
_objArr.sortOn("Z",18);
for(i =0;i<_objArr.length;i++){
_graphicContainer.graphics.beginBitmapFill(_bmpd);
_graphicContainer.graphics.drawTriangles(_objArr[i].V,_objArr[i].I,_objArr[i].U,TriangleCulling.NONE);
_graphicContainer.graphics.endFill();
}
}
private function createStar():void
{
for(var i:int = 0;i<_num*2;i++){
var mc:MovieClip = new MovieClip();
_pointContainer.addChild(mc);
if(_boo){
mc.x=_radius2*Math.cos(2*Math.PI/(_num*2)*i);
mc.y=_radius2*Math.sin(2*Math.PI/(_num*2)*i);
}else{
mc.x=_radius1*Math.cos(2*Math.PI/(_num*2)*i);
mc.y=_radius1*Math.sin(2*Math.PI/(_num*2)*i);
}
mc.z = 0;
_pointArr.push(mc);
_boo = !_boo;
}
var centerMC:MovieClip = new MovieClip();
_pointContainer.addChild(centerMC);
centerMC.x = 0;centerMC.y = 0;centerMC.z = -60;
_pointArr.push(centerMC);
}
}
}
[ActionScript 3.0] AS3 3D星形贴图的更多相关文章
- [ActionScript 3.0] AS3 3D双圆环贴图
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...
- [ActionScript 3.0] AS3 绘制星形
package { import flash.display.Sprite; import flash.events.Event; /** * @author Frost.Yen * @E-mail ...
- 3D星形贴图
3D星形贴图: /** * * *---------------------* * | *** 3D星形贴图 *** | * *---------------------* * * 编辑修改收录:fe ...
- [ActionScript 3.0] as3处理xml的功能和遍历节点
as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...
- [ActionScript 3.0] AS3.0 动态加载显示内容
可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...
- [ActionScript 3.0] AS3实现3D旋转
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Display ...
- [ActionScript 3.0] AS3.0和AS2.0的相互通信
AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...
- [ActionScript 3.0] AS3.0 本机鼠标指针
Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标 ...
- [ActionScript 3.0] AS3 深入理解Flash的安全沙箱Security Domains
简介 如果你还没有与复杂的的安全域(security domain)和应用程序域(application domain)问题打过交道,那么你真是个幸运的家伙.当你在加载外部内容(然后他们开始播放)的时 ...
随机推荐
- JavaOOP 试题
1) 以下属于OOP的特征有(). a)继承 b)封装 c)多态 d)隐藏 2) JavaOOP中的多态包括() a) 方法重写 b) 方法重载 c) 方法隐藏 d) 以上 ...
- centos6.5 安装iptables
阿里云默认是没有安装iptables 安装 yum install -t iptables yum install iptables-services 检查iptables服务的状态 service ...
- httpClenit的post出现乱码问题
在使用httpClient.executeMethod(postMethod)的时候,发现一直存在乱码问题,”book is good“被转成”book+is+good“ 返回.查看源码后,发现pos ...
- MySQL中SSL配置
http://wenku.baidu.com/link?url=Tl71LnP-mqf-HExIRLWviUINgkfHMbd4hL2WGhuUHQlDwcw3QVfuTgcB6CiIMgvszY9W ...
- smarty缓存技术
后台: <?php //要求:当存在缓存文件,直接输出,不存在缓存文件,自己创建缓存,输出 //步骤: //定义该页面存放缓存文件的路径 $filename="../../cache/ ...
- 基于spring-boot的web应用,ckeditor上传文件图片文件
说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...
- PHP使用1个crontab管理多个crontab任务
http://www.binarytides.com/php-manage-multiple-cronjobs-with-a-single-crontab-entry/ In many php app ...
- 【jmeter】属性和变量
一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...
- 【jmeter】WebSerivice测试
WebSerivice测试计划的取样器有两种方式:HTTP请求.SOAP/XML-RPC Request. 1. 测试计划 启动JMeter,点击测试计划节点上,重命名测试计划:WebserviceT ...
- HackerRank "Chocolate in Box" !
XOR -> 0 is the key (make it even pair): http://www.cnblogs.com/lautsie/p/3908006.html Something ...