2017-05-18 14 views
1

イメージをロードする場所とイメージをロードする場所のパズルコードがあります。アンドロイドデバイスのAIRでイメージをロードするにはどうすればいいですか(デスクトップで作業中)

私のデスクトップコンピュータ(アドビシステムズ社アニメイト上のAIR 25.0)に完璧な仕事が、私のAndroidデバイス上でしようとしたときに、画像をロードするために(はい、私は私のプロジェクトに添付しなかった)ようだしない

I did attach it to my project

は、ここに私のコードです:

//load picture and set up sprites 
function startJigsawPuzzle() { 
    // load the bitmap 
    loadBitmap("jigsawimage.jpg"); 

    // set up two sprites 
    otherPieces = new Sprite(); 
    selectedPieces = new Sprite(); 
    addChild(otherPieces); 
    addChild(selectedPieces); // selected on top 
} 

// get the bitmap from an external source 
function loadBitmap(bitmapFile:String) { 
    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingDone); 
    var request:URLRequest = new URLRequest(bitmapFile); 
    loader.load(request); 
} 

// bitmap done loading, cut into pieces 
function loadingDone(event:Event):void { 
    // create new image to hold loaded bitmap 
    var image:Bitmap = Bitmap(event.target.loader.content); 
    pieceWidth = Math.floor((image.width/numPiecesHoriz)/10)*10; 
    pieceHeight = Math.floor((image.height/numPiecesVert)/10)*10; 

    // place loaded bitmap in image 
    var bitmapData:BitmapData = image.bitmapData; 

    // cut into puzzle pieces 
    makePuzzlePieces(bitmapData); 

あなたが問題になる可能性がどう思いますか?

あなたはAS3で非同期ローダーを使用するたびに、あなたはエラーだけでなく、 Event.COMPLETEイベントをリッスンする必要があり、あなたの助け

+0

このような問題が発生した場合はどうすればよいでしょうか。 1.ログ出力を作成します(普通のTextField **は問題ありません)。 2. ** Loader.contentLoaderInfo **のすべてのイベント(すべてのエラーイベントを含む)を登録し、これらのイベントをp.1のデバッグ出力に記録して何が起こるかを確認します。 3.それに応じて行動します。 – Organis

+0

ローダーパスを 'jigsawimage.jpg'から' app:/ jigsawimage.jpg'に変更します( 'app:/'はアプリケーションディレクトリへのランタイムのクロスプラットフォームショートカットです)。それがうまくいくなら、私に知らせてください。私はあなたの質問に対して適切な回答を書くつもりです。 Organisのコメントには、COMPLETEのほかにローダーのIO_ERRORとSECUTIRY_ERRORを常に聞いて、正確に何が起こっているかを知る必要があります。あなたは 'app:/'をモバイル上に置く必要があるので、IOエラーです。 – BadFeelingAboutThis

+0

@ Melissa、私の答えで提案を試してみましたか?それがあなたのために働くかどうか私に知らせてください。 – BadFeelingAboutThis

答えて

0

まずオフをありがとうございました。これらのエラーリスナーを持つことで、この問題を警告する可能性があります。このようなものになります

:ファイルが見つからなかったとき

loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 

IOエラーイベントの火災は、セキュリティエラーは、ファイルがロードすることは許されなかった意味します。あなたが聞くことができる他のイベントがありますが、これらはあなたが遭遇する主なイベントです。

おそらく、モバイルでIO_Errorが届いています。これは、モバイル上のルートアプリケーションディレクトリへのパスがapp:/で始まる必要があるためです。これは、プラットフォームに関係なく(異なるOSが異なる場所/サンドボックス内であなたのアプリケーションを動かすように)アプリケーションディレクトリにアクセスするために、空中で作られたショートカットです。彼らは続けるように私はまた、あなたのローダーオブジェクトにそれらのリスナーを削除するお勧めします、余談として

function loadBitmap(bitmapFile:String) { 
    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingDone); 
    loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 

    var request:URLRequest = new URLRequest("app:/" + bitmapFile); 
    loader.load(request); 
} 

function ioErrorHandler(event:IO_ErrorEvent):void { 
    trace(event); //log or somehow show this error 
} 

function securityErrorHandler(event:SecurityErrorEvent):void { 
    trace(event): //log or somehow show this error 
} 

:だから、ここ

は、私はあなたがあなたのコードを変更をお勧めしたいものですそれらのイベントをリッスンしている限り、オブジェクト内のすべてのオブジェクトはメモリ内で参照されます。

function disposeBitmapLoader(event:Event):void { 
    event.currentTarget.removeEventListener(Event.COMPLETE, loadingDone); 
    event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
    event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
} 

そして、イベントオブジェクトを渡し、すべてのイベントハンドラでその関数を呼び出す:あなたは1枚の画像のみを持っていて、常にそれがとにかくswfファイルにまっすぐにそれを埋め込む考慮使用している場合

function loadingDone(event:Event):void { 
    disposeBitmapLoader(event); 
    //....rest of code 
0

[埋め込み]タグを使用して:

[Embed(source="jigsawimage.jpg")] 
public static var ImageClass:Class; 

var myBitmap:Bitmap = new ImageClass() as Bitmap; 
var myBitmapData:BitmapData = myBitmap.bitmapData; 
関連する問題