1

iOS から始めて、ようやく自分の Flash ゲームをアプリに移植しようとしています。画像保存機能に行き詰まっています。swf では jpegencoder を使用してデスクトップ サーバーに保存しました。いくつかの調査では、そのコードはモバイルでも動作するはずであると思われたので、試してみましたが、Adobe AIR から iPhone でテストすると何もしないようです (ボタンはクリックを登録しますが、できる画像はありません)。見つかった、何かが起こっているという通知がない、画像へのアクセス許可を求めていないなど)。これは古いコードです:

saveToDisc.addEventListener(MouseEvent.CLICK, saveToDiscSave);
function saveToDiscSave(e:MouseEvent):void {
    this.visible = false;  //hides menu

    var bitmapData:BitmapData = new BitmapData(1242,1864);
    bitmapData.draw(MovieClip(root));
    var jpgEncoder:JPGEncoder = new JPGEncoder(80);
    var byteArray:ByteArray = jpgEncoder.encode(bitmapData);
    var fileReference:FileReference=new FileReference();
    fileReference.save(byteArray, "Dinogeddon-DollDivine.jpg");

    //this.visible = true;  //returns menu. commented out to see if click registered
}

そこで、さらに調査を重ねた結果、シンプルで iOS 向けに特別に作成されたように見える CameraRoll コードを見つけました。だから私はそれを試しましたが、私は同じ問題を抱えています.何かが起こっているという証拠はありません. 画像は保存されず、エラーも許可要求もありません。

saveToDisc.addEventListener(MouseEvent.CLICK, saveToDiscSave);
function saveToDiscSave(e:MouseEvent):void {
    this.visible = false;

    var cameraRoll:CameraRoll = new CameraRoll();
    var bitmapData:BitmapData = new BitmapData(1242,1864);
    bitmapData.draw(MovieClip(root));
    cameraRoll.addBitmapData(bitmapData);

    //this.visible = true;
}

同様に、どこが間違っているのかもわかりません..テストモードのアプリは画像を保存することさえできますか? 何らかの通知がポップアップすることを期待する必要がありますか? 携帯電話に保存されるものにサイズ制限はありますか? ハーフ

4

2 に答える 2

1

モバイル アプリはデスクトップ アプリとほとんど同じように動作しますが、いずれにせよ、コードは実際にはそれに適合していません。たとえば、File クラスのように、デスクトップやモバイル用に特別に作成されたクラスを使用しようとさえしていません。とにかく、Web 用に swf を実行することを忘れる必要がある手順を示す前に (これはコードが示していることです)、モバイル/デスクトップ アプリが必要であり、それに心を合わせて AIR クラスを使用します。

まず、bytearray にファイリングしてデータを取得します。

var byteArray:ByteArray = new ByteArray();
bitmapData.encode(new Rectangle(0,0,bitmapData.width,bitmapData.height), new PNGEncoderOptions(), byteArray);

次に、保存先を選択し (モバイルでは通常 File.applicationStorageDirectory)、AIR クラスの File を使用します。

var dest:File = File.applicationStorageDirectory.resolvePath("mypng.png");

3 番目に、データと保存先を取得したら、AIR クラスの FileStream を使用して保存します。

var stream:FileStream = new FileStream();
stream.open(dest, FileMode.WRITE);
stream.writeBytes(byteArray);
stream.close();

そしてそれはそれについてです。File クラスを使用して、ストレージ ディレクトリにディレクトリとファイルを作成します。注意してください。モバイルでは、ファイルをどこにでも保存することはできません。そのため、常に利用可能でサンドボックス化されているので、applicationStorageDirectory を使用することをお勧めします。

于 2016-04-09T03:41:41.910 に答える