actionscript - Away3D 4.0 从数组加载图元的动态纹理

标签 actionscript dynamic textures primitive away3d

我有几个数组存储构建基元所需的属性。一个数组存储宽度,另一个数组存储高度,另一个数组存储深度、x、y、z 等。我还有一个数组存储要应用的纹理的远程文件名。从服务器收到响应后,我尝试将纹理应用到图元。当我移动相机查看图元时,我看不到它。我的 View 似乎卡住了( View 不会更新)。一旦相机移过图元,它就可以再次看到。有什么想法吗?

private var loadedBuildingTextures:Object = new Object();
private var map_building_count:Number = 0;
private var loadedBuildings:Number = 0;
public var map_building_widths:Array;
public var map_building_heights:Array;
public var map_building_depths:Array;
public var map_building_xs:Array;
public var map_building_ys:Array;
public var map_building_zs:Array;
public var map_building_textures:Array;

// I POPULATE THE ARRAYS BUT LEFT THAT CODE OUT FOR SIMPLICITY

public function placeBuildings():void {
 trace('FUNCTION: placeBuildings() fired');
 var buildingsPlaced:Number = 0;
 for (var a:Number = 0; a < map_building_count; a++ ) {
  loadedBuildingTextures['texture_' + a.toString()] = new BitmapFileMaterial(map_building_textures[a]); // ASSIGNS THE BitmapFileMaterials TO AN OBJECT FOR REFERENCING LATER
  loadedBuildingTextures['texture_' + a.toString()].loader.contentLoaderInfo.addEventListener(Event.COMPLETE, postBuildingLoad);
  buildingsPlaced++;
 }
 trace('placed ' + buildingsPlaced.toString() + ' of ' + map_building_count.toString() + ' buildings.'); // OUTPUT = "placed 4 of 4 buildings."
 trace('FUNCTION: placeBuildings() completed');
}

public function postBuildingLoad(event : Event):void {
 loadedBuildings++;
 if (int(loadedBuildings) == int(map_building_count)) {
  placeBuildingsStep2();
 }
}
public function placeBuildingsStep2():void {
 trace('RECEIVED ALL RESPONSES FROM SERVER FOR TEXTURES');
 for (var a:Number = 0; a < map_building_count; a++ ) {
  cube = new Cube(
   loadedBuildingTextures['texture_' + a], // <----- THIS SEEMS TO BE THE PROBLEM
   map_building_widths[a], // WIDTH
   map_building_heights[a], // HEIGHT
   map_building_depths[a], // DEPTH
   1, // WIDTH UNITS
   1, // HEIGHT UNITS
   1,  // DEPTH UNITS
   true);
  cube.x = map_building_xs[a];
  cube.y = map_building_ys[a];
  cube.z = map_building_zs[a];
  view.scene.addChild(cube);
 }
}  

最佳答案

虽然这篇文章很旧,但它确实强调了一个重要问题。 BitmapFileMaterial 更像是测试的快捷方式,而不是生产就绪的方案。

我强烈建议对外部资源使用加载队列(例如 LoaderMax 或 4.0 中的新 AssetLibrary),然后根据需要实例化 Material 。

关于actionscript - Away3D 4.0 从数组加载图元的动态纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7238298/

相关文章:

c - 将 *.data 文件读入动态扩展的结构数组***

android - 如何使用 NPOT 图像作为 libpng 和 OpenGL ES 1.1 的纹理?

flash - 如何在 AS3 中完全删除影片剪辑

flash - actionscript3参数错误: Error #2015: Invalid BitmapData

dynamic - 处理未在动态对象上定义的 C# 方法(又名 respond_to/method_missing)

c++ - 关于模板类的 C++ 动态转换

ios - 如何在 textField 上方实现/显示以下弹出窗口?

matrix - 如何将大矩阵发送到着色器?

apache-flex - Flex 的 FileReference.save() 只能在用户事件处理程序中调用——我该如何解决这个问题?

linux - 使用 getTimer() 方法在 ActionScript 2 中休眠