AS3如何复制DisplayObject
使用Alternativa3d时想创建个displayobjectMaterial材质(继承自spriteMaterial),找到的一个现成类没有clone函数,查了下displayobject如何复制,这里有个简单的,没有去深究,只是对于我能用。
代码如下
//获取构造函数 var dobjClass:Class = Object(dobj1).constructor; //创建一个新的displayobject var dobj2:DisplayObject = new dobjClass();
下面是DisplayobjectMaterial代码,只是不能交互了,这个是alternativa3d引擎本身决定的
package alternativa.engine3d.materials { import alternativa.engine3d.alternativa3d; import alternativa.engine3d.core.*; import alternativa.engine3d.display.*; import alternativa.engine3d.materials.*; import alternativa.types.*; import flash.display.DisplayObject; use namespace alternativa3d public class DisplayObjectMaterial extends SpriteMaterial { private var _dobj:DisplayObject; public function get dobj ():DisplayObject { return _dobj; } public function set dobj (v:DisplayObject):void { // remove from skin 1st if (_dobj != null) if (_dobj.parent as Skin != null) _dobj.parent.removeChild (_dobj); _dobj = v; } public function DisplayObjectMaterial (displayObject:DisplayObject = null, alpha:Number = 1, blendMode:String = "normal") { super (alpha, blendMode); _dobj = displayObject; } private var _pt:Point3D, _s:Point3D = new Point3D; // TODO handle clipping? override alternativa3d function canDraw (camera:Camera3D):Boolean { if (_dobj == null) return false; // global coords of the sprite _pt = camera.globalToLocal (sprite.globalCoords); // in front of camera only, please _dobj.visible = (0 < _pt.z); return _dobj.visible; } override alternativa3d function draw (camera:Camera3D, skin:Skin):void { // do what parent did not skin.alpha = _alpha; skin.blendMode = _blendMode; // if _dobj is not in skin yet, add it if (skin != _dobj.parent) { skin.addChild (_dobj); } // account for scale _s.x = sprite.scaleX; _s.y = sprite.scaleY; _s.z = sprite.scaleZ; _s.multiply (0.5773502691896257645 /*1 / Math.sqrt (3)*/); // place it accordingly var zoom:Number = camera.orthographic ? 1 : camera.focalLength / _pt.z; _dobj.x = _pt.x * zoom; //_dobj.scaleX = zoom * _s.length; _dobj.y = _pt.y * zoom; //_dobj.scaleY = zoom * _s.length; } override public function clone():Material { var dm:DisplayObjectMaterial = new DisplayObjectMaterial(); var objClass:Class = Object(_dobj).constructor; var obj:DisplayObject = new objClass(); dm.dobj = obj; return dm; } } }
说点啥吧
页面
腾讯微博
文章标签
营销 倒计时 avatar 三维数字 homestyler 北大关机门 翻墙 Matrix 收录 正则表达式 apple 图片检索 Adobe WP 31号 成人玩具 代理 roxik shoe obj flower puzzle 源码 google java3d 平面设计 人脸识别 Google Map Flash3D 全景 优化 Away3D Alternativa3D Flash网站 Tips最新评论
- Hsinglin 在 发几个今天在校园里拍的全景图 上的评论
- Rming 在 实验室360全景图 上的评论
- 哪种减肥药效果好 在 发几个今天在校园里拍的全景图 上的评论
- jianhualee 在 新作品flash网站-至尊数码-3D图墙 上的评论
- panda 在 away3d中的obj 上的评论




