2

プリミティブを構築するために必要な属性を格納する配列がいくつかあります。1 つの配列は幅を格納し、別の配列は高さを格納し、別の配列は深さ、x、y、z などを格納します。適用するテクスチャのリモート ファイル名を格納するもう 1 つの配列があります。サーバーから応答を受け取った後、テクスチャをプリミティブに適用しようとします。プリミティブを見るためにカメラを動かしても、それを見ることができません。ビューがフリーズしているようです (ビューが更新されません)。カメラがプリミティブを通過すると、再び見ることができます。何か案は?

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);
 }
}  
4

1 に答える 1

3

この投稿は古いものですが、重要な問題を浮き彫りにしています。BitmapFileMaterial は、本番対応のスキームというよりも、テストへの近道です。

外部アセット ( LoaderMaxや 4.0 の新しいAssetLibraryなど) の読み込みキューを使用し、必要に応じてマテリアルをインスタンス化することを強くお勧めします。

于 2012-12-19T01:49:00.830 に答える