小试Flash CS5开发iPhone应用程序

Adobe 在他们的 Flash CS5 中加入了将Flash发布为 iPhone/iPod Touch 应用程序的功能。这对广大移动平台的开发者来说本是一件大好事,不过一意孤行的苹果早早地就更新了开发者协议,严禁第三方跨平台编译器,仅允许自家Mac OS上使用Objective-C原生编写的程序在App Store上架。这也基本上给Flash等其他开发和编译工具判了死刑。虽说这规定在CS5系列正式发布前几天出台,Adobe猝不及防。不过在广大的越狱机器上,我们可以轻松地安装非官方授权的应用程序。所以这新功能还是有点用武之地的,今天就让我们来看看Flash在iPhone/iPod Touch上的表现。
在Flash CS5新建文档时,直接选择iPhone OS即可建立320x480尺寸的发布为iPhone应用程序的文件了。除了舞台小一点,和平时使用Flash没什么区别。而专属的iPhone应用程序发布设置,也和AIR平台的发布设置非常类似,有三个选项卡。
设置选项中可以指定应用程序的名称、屏幕方向等,还可以指定图标。值得一提的是,想要真正发布ipa文件,你需要拥有Apple给开发者的数字证书和Provision Profiles。这个东东要在Apple的开发者网站上注册并且付费$99后才会获得(Adobe这不是热脸贴了Apple的冷屁股嘛~)。好在我们有专供测试用的文件,大家可以点击这里下载,证书密码是1234。这里还有一个iPhone部署类型的选项,前两个是用来进行终端测试的,执行的效率可能会比后面两种低一些。
Demo
为了测试,我做了一个两帧的Demo程序。大家可以在这里下载到fla源文件。Flash生成ipa文件时花费的事件很长,有兴趣的可以点击这里下载ipa文件实机测试。
Frame 1
第一帧上有个简单的动画和三个交互的按钮,按了按钮后会在上方显示该按钮实例的名称并播放一个音效,当然还有一个前往下一个画面的按钮。这一页大约算一个Hello World吧,因为都是用的非常基本的功能,例如动画的显示,简单的按钮交互等等。ActionScript 3 代码自然不长,如下:
import flash.events.Event;
import flash.media.Sound;
stop();
btn1.addEventListener(MouseEvent.CLICK,btnClick);
btn2.addEventListener(MouseEvent.CLICK,btnClick);
btn3.addEventListener(MouseEvent.CLICK,btnClick);
nextBtn.addEventListener(MouseEvent.CLICK,testPage);
function btnClick(e:Event):void {
var s:Sound = new MouseClickSound;
s.play();
text.text = e.target.name + " Clicked!";
}
function testPage(e:Event):void {
nextFrame();
}
Frame 2
第二帧其实是一个简单的Benchmark,我主要是想看看iPhone平台上的Flash能跑多快。据我观察,这其实可以看做是iPhone平台的AIR移动设备应用程序,也就是和J2ME类似的,是运行在虚拟机中的。Flash很可能是做了一个iPhone平台的Flash Player然后让swf在里面播放。这样效率如何真的就拿捏不准了。Benchmark有三项作业,第一是在舞台随机位置上绘制10000个静态的MovieClip,第二是将它们从舞台上去除,第三是计算1000000个0-10000之间整数的和。我在电脑上的测试环境中的结果详见左边的截图。该帧的AS如下:
import flash.events.Event;
import flash.text.TextField;
import flash.utils.getTimer;
startBtn.addEventListener(MouseEvent.CLICK,startTest);
function startTest(e:Event):void {
var i:int;
var time1 = getTimer();
results.appendText("Test Started!\n");
var c:Array = new Array(10000);
for (i=0; i<10000; i++) {
c[i] = new ico();
c[i].x = Math.random() * 320;
c[i].y = Math.random() * 480;
addChild(c[i]);
}
var time2 = getTimer();
results.appendText("Add 10000 MovieClip: "+ (time2-time1)+"ms\n");
for (i=0; i<10000; i++) {
removeChild(c[i]);
}
c = null;
var time3 = getTimer();
results.appendText("Remove 10000 MovieClip: "+ (time3-time2)+"ms\n");
var sum:Number = 0;
for (i=0; i<1000000; i++) {
sum += Math.ceil(Math.random() * 10000);
}
results.appendText("1000000 random integers' sum: \n");
var time4 = getTimer();
results.appendText(sum+", time: "+(time4-time3)+"ms\n\n");
}
部署应用
生成ipa文件后,你可以用各种方法将其安装到iPhone/iPod Touch中,比如可以用iTunes同步(要打过同步破解补丁的机器才行),也可以用无线或者蓝牙把文件传到机器上用Install0us安装。这时它就和普通的iPhone应用程序没什么区别了,可以看到它的图标,点击打开。下面两张图就是在我的iPod Touch上实际运行的截图,这里可以看到那个Benchmark的时间——果然和PC平台的处理器差的不是一点两点啊!
通过截图可以看到,Flash的渲染质量还是不错的。不错这个效率实在是不敢恭维,在第一帧上,按下那三个按钮后会播放一个音效,这时上面的动画就会卡一下。至于第二帧的Benchmark,不提了……
更多资源
至此,Flash CS5开发iPhone应用程序的小小尝试就差不多了。大家知道,iPhone/iPod Touch最吸引人的交互方式是重力感应和多点触控。当然,在ActionScript 3中也有对它们的支持。在flash.sensors包中,有用于重力感应的Accelerometer类和用于GPS位置识别的Geolocation类。而利用flash.ui.Multiouch也可以轻松地让Flash程序支持多点触控。
乐铺活动验证






难道传说中意味深长的图是twitter+foursquare?
@sinopitt 还要加上Opera Mini
不会吧,这个有啥“意味深长”了?
@shangwangwanwan 好吧,其实也不是非常非常非常非常意味深长,无心插柳而已
其实IT3/3GS的处理器还不错 曾经用SUNSPIDER测试过浏览器JAVA速度,比我电脑用IE6快…
暑假准备学着用Objective C做NATIVE的APP呢
相信速度一定比破FLASH快的多
@AK-48 毕竟也是WebKit的内核,跑JS不会慢的,touch上的浏览器甚至跑一些HTML5的演示都很流畅的~~说实话我没有搞成Mac OS所以也不好做对比测试,很遗憾啊!
PS:祝你高考顺利哈!
Opera Mini是修改过的吧……….反正不应该是For China的吧……..
@smy 即使是修改过的,第一次初始化的时候也得挂VPN
难怪呢,我这老是白屏………但是touch上怎么挂VPN呢?我没有帐号……..
我尝试做了一个测试,通过itunes传输时怎么提示无法识别的程序。根本不能安装啊。是flash开发的ipa只能在越狱版上用?我的是联通版的3G。
@david 我没有经过iTunes安装,但是越狱机器是一定需要的,要在iTunes里同步安装ipa的话要再装一个ipa补丁
您有这个补丁么?
@david 你可以到Cydia里面添加http://cydia.hackulo.us源安装IPA破解补丁,然后越狱机器就可以用iTunes安装程序了
谢谢博主!我对iphone开发也很感兴趣,我的qq:905666981 如果可以的话加个好友吧!