当前位置: 首页 > 工具软件 > Alternativa3D > 使用案例 >

[alternativa3D-1]Flex4开发环境搭建

琴修为
2023-12-01
[alternativa3D-1]Flex4开发环境搭建
2010年12月18日
  Alternativa3D 已经对外免费了。现在是7.6版本。这是俄罗斯人开发的一款性能优越的flash3D引擎。并且在max2010峰会上,展示了一款比较有竞争力的在线多人赛车游戏,画面绚丽,运行流畅。当然,那个游戏是用adobe未发布的下一代flashplayer为基础,能够使用GPU渲染。Alternativa3D 8 将完全实现这个功能,每秒能渲染几百万个多边形。可见,Alternativa3D的前景十分乐观,相比flash其他的3D引擎,更具竞争力。那么现在说一下如何选择Alternativa3D的开发环境。
  一般来讲,能开发flash的工具,都可以开发Alternativa3D程序。Flash CS5,flex3,Flashbuilder4(flex4),flashdeveloper,很多。根据个人习惯不同。由于本人一直在使用flex,对flex的组件情有独钟,所以这里主要介绍一下如何在flashbuilder4中,用Flex工程开发。
  flashbuilder4可以直接开发AS项目,这么没什么好讲的,就是直接以as类为启动文件,从Alternativa3D官方下回的例子,都是这样的,与flash cs5有很好的兼容性。但AS项目不能使用flex组件。如果想在Alternativa3D程序中,使用一个Panel什么的,几乎不可能。那么,只能考虑在Flex项目中使用组件。这就需要绕一下了。
  Flex4相比3,变化了很多。在spark主题下,所有组件都基于UIComponent编写。但我们不能通过把sprit加入到UIComponent的方法来进行Alternativa3D开发。这跟另一款flash3D引擎pv3D有很大区别。他们的基本显示原理不太一样。下面的做法是错的,也显示不出任何Alternativa3D场景:
  var comp: UIComponent = new UIComponent();
  comp.addChild(Sprite);
  MyCanvas.addChild(comp);
  在flex4中,应该以UIComponent为基础,直接进行开发。我们可以直接自定义类,继承自 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组件中:
  主启动文件:
  
  flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:lht="lht.*">
  
  
  
  
  我们自定义的BasicView3D 类:
  package lht{
  import mx.core.UIComponent;
  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();
  }
  }
  }
 类似资料: