关于Flex4工程和 Alternativa3D 7.5.1的疑问

  原文:http://bbs.9ria.com/thread-69668-1-1.html
  Alternativa3D 现在对外免费了。现在是7.5.1版本。。在版本5的时候,可以在flex 工程中使用,网上有例子。但7.5.1通过同样的方法,不能使用,只能通过flex里的action script项目使用。
  研究了一下午,发现Alternativa3D里常用的stage无法被写入长度、宽度、子控件等。
  stage在flex工程里是只读类。。
  不知道哪儿高手 有Alternativa3D 高版本,在flex4 工程里使用的例子啊?或者这个问题怎么绕道解决。
  ---------------------------------
  问题已解决。昨天研究一晚上,最后发现在flex4中,UIComponent完全可以当作Sprite用。而不必像网上说的 所以我们可以直接自定义类,继承自 UIComponent,然后把这个类当作Sprite用就好了。
  还有一点需要注意:A3D中,在初始化和每帧进入执行的函数中,一般都会设置摄像机观察窗的尺寸。在7.5.1官方的例子中是 camera.view.height=stage.stageHeight,这样写的。如果我们用flash builder4(flex4)新建actionscript项目,这样写不会有问题。但如果在flex项目中这样写,会出现舞台全屏的情况。即冲出 UIComponent的范围。加入用一个panel装UIComponent,然后panel放在application的某个位置,我们的3D场景会 充满整个屏幕。解决办法是:camera.view.height=mYUIComponent.height.
  下面是调试代码,将alternativa3D的hello3Dworld用Flex工程展现出来,将3D场景装在panel组件中。。
  代码如下:主启动mxml文件:
  flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:lht="lht.*">
  
  
  
  
  BasicView3D.as文件 package lht{
  import mx.core.UIComponent;
  import mx.controls.Alert;
  import flash.events.Event;
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  import alternativa.engine3d.core.Camera3D;
  import alternativa.engine3d.core.Object3DContainer;
  import alternativa.engine3d.primitives.Box;
  import alternativa.engine3d.core.View;
  import alternativa.engine3d.materials.FillMaterial;
  public class BasicView3D extends UIComponent{
  //总容器
  private var rootContainer:Object3DContainer = new Object3DContainer();
  //摄像机
  private var camera:Camera3D;
  //正方体
  private var box:Box;
  public function BasicView3D(){
  super();
  addEventListener(Event.ADDED_TO_STAGE, init);
  }
  public function init(e:Event): void{
  stage.scaleMode = StageScaleMode.NO_SCALE;
  stage.align = StageAlign.TOP_LEFT;
  camera = new Camera3D();
  camera.view = new View(this.width,this.height);
  camera.view.hideLogo();//隐藏图标
  camera.diagram.visible=false;//隐藏FPS显示
  addChild(camera.view);
  addChild(camera.diagram);
  camera.rotationX = -120*Math.PI/180;
  camera.y = -800;
  camera.z = 400;
  rootContainer.addChild(camera);
  box = new Box(200, 200, 200, 5, 5, 5);
  var material:FillMaterial = new FillMaterial(0xFF7700, 1, 1);//材质
  box.setMaterialToAllFaces(material);
  rootContainer.addChild(box);
  stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
  }
  private function onEnterFrame(e:Event):void {
  camera.view.width=stage.stageHeight
  camera.view.width = this.width;
  camera.view.height = this.height;
  box.rotationZ -= 0.01;
  //重新渲染
  camera.render();
  }
  }
  }
  发表于 @ 2010年12月30日 22:32:00 |
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值