2010-07-03 11 views
3

Je dois pouvoir charger des fichiers de configuration externes dans mon application Flex. J'ai lu que cela est possible en utilisant des embeds, tant que mimeType est défini sur application/octet-stream.Fichier de configuration externe dans Actionscript 3

package learning { 
    import org.flixel.*; 
    public class PlayState extends FlxState { 
     [Embed(source = "../../data/tiles.png")] private var _tiles:Class; 
     [Embed(source = '../../data/map.txt', mimeType = "application/octet-stream")] private var ExternalMapData:Class; 

     public var txt:FlxText; 
     public var player:FlxSprite; 

     override public function create():void { 
      bgColor = 0xffaaaaaa; 
      super.create(); 
     } 

     override public function update():void { 
      super.update(); 
     } 
    } 
} 

Quand je compile cela en utilisant mxmlc, il compile avec succès sans erreur. Quand je lance le fichier SWF, il charge tous les menus de Flixel puis se bloque.

Si je commente la ligne [Embed(source = '../../data/map.txt', il compile et ne se bloque pas.

Pourquoi cette intégration provoque-t-elle un gel?

informations Version pour mxmlc:

Adobe Flex Compiler (mxmlc) 
Version 4.0.0 build 14159 

EDIT

Il se les erreurs ne sont pas affichées correctement, mais ce que je suis en train d'essayer le lecteur exportable:

VerifyError: Error #1014: Class mx.core::ByteArrayAsset could not be found.

Google se présente un groupe de personnes avec le même problème, mais pas d'appareil solution nt.

import mx.core.ByteArrayAsset; ByteArrayAsset

ne vous aide pas non plus.

+0

double possible: http: // stackoverflow. com/questions/2187782/actionscript-3-read-file-text-at-compile-time –

+0

@ M28 Pas de doublon - J'ai la source qui fait ce que je veux, mais cela provoque le blocage du programme pour une raison quelconque. Ce poste demandait comment le faire en premier lieu. –

+0

Dans la question, vous donnez: «../../data/mart.txt» et «../../map.txt», lequel est correct? –

Répondre

8

Aha! Il s'est avéré que la solution était très simple: les bibliothèques partagées à l'exécution n'étaient pas liées de manière statique au swf, et le chemin n'était pas défini correctement pour l'accès pendant l'exécution. La solution est simple:

Soit-config flex modifier dire

<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>

ou passer manuellement le paramètre à MXMLC

mxmlc -static-link-runtime-shared-libraries=true -debug=true Main.swf -- Main.as

3

Je vais répondre à cette question avec ma réponse à une autre question:

[Embed(source = "ExampleText.txt", mimeType = "application/octet-stream")] 
protected var AAAAAA:Class; 

var tmp:ByteArray = new AAAAAA(); 
var result:String = tmp.readMultiByte(tmp.bytesAvailable, tmp.endian); 
+0

+1. Je pense que votre second paramètre est typo, cependant (passer l'endianess du buffer car l'enconding n'a pas beaucoup de sens!). –

+0

Merci pour la suggestion sur comment extraire réellement les données - mais le programme se bloque toujours. –

+0

@Juan: Au moment de l'écriture, c'était correct, je ne suis pas sûr si les paramètres ont changé ou quelque chose. –