使用Adobe AIR

时间:2016-04-08 17:28:44

标签: ios actionscript-3 air bitmapdata animate-cc

我终于尝试将我的Flash游戏移植到应用程序,从iOS开始。我坚持使用图像保存功能。在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
}

因此,经过更多的研究,我发现CameraRoll代码看起来很简单,就像专门为iOS制作的那样。所以我试过了,但我遇到了同样的问题:没有证据表明发生了什么。没有保存图像,没有错误,没有权限请求。

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

就像,我甚至不知道我哪里出错了。应用程序是否处于测试模式甚至能够保存图像?我是否应该期待弹出某种通知?手机上保存的东西是否有尺寸限制? HALP

2 个答案:

答案 0 :(得分:1)

移动应用程序的行为与桌面应用程序很相似,但无论如何,您的代码并未真正适应。您甚至没有尝试使用专门为桌面和移动设备制作的类,例如File类。无论如何,在我向您展示您需要忘记为网络执行swf所需的步骤(这是您的代码显示的内容)之前,您需要移动/桌面应用程序然后根据它调整并使用AIR类。

首先,通过提交bytearray来获取数据:

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

其次,选择目的地(在移动设备上通常是File.applicationStorageDirectory),然后使用AIR类文件。

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

第三,你得到了数据,你得到了目的地,现在使用AIR类FileStream保存:

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

就是这样。使用File类在存储目录中创建目录和文件。小心,在移动设备上,您将不被允许在任何地方保存您的文件,这就是为什么使用applicationStorageDirectory更好,因为它始终可用并沙盒供您使用。

答案 1 :(得分:1)

所以...相机胶卷代码确实有效,就像我一样。 这确实是一个非常好的和整洁的方式。 我想我遇到了正确测试的问题,并且无法确定它是否正常工作。

正常工作时,它会在设备上请求一次权限,之后会在没有通知的情况下保存,所以我添加了一些动画来隐藏“保存”按钮几秒钟,这样用户就不会自己查找垃圾邮件,并给出按下按钮的视觉提示。