有一種撤退不叫撤退,叫戰略轉移。
如果你想盡快的開發一款應用,並且將它發布到盡量多的用戶手中,Flash是目前的最佳選擇。
很多人對Flash的認識僅限於網絡動畫、視頻播放,卻不知道,不知不覺之間,Flash已經成為了一個軟件開發平台。下面,演示一下用這個軟件開發平台開發一個demo應用,並將它以多種形式發布。
這個演示只是給讀者一個直觀認識——Flash的優勢是什么。
====
開發一個等待的動畫(一個圈,轉啊轉),這個動畫要能夠在PC機瀏覽器上看,也可以下載下來到本地看,也可以在Android平台上看,也可以在iOS平台上看。(Linux等由於用戶群太小,忽略了,雖然,也能做到)。
下面是我寫的動畫控件(AppleStylePreloader,用的我自己的控件解決方案):
View Code
1
<?
xml version="1.0" encoding="utf-8"
?>
2 < common:BaseContainer xmlns:fx ="http://ns.adobe.com/mxml/2009"
3 xmlns:mx ="library://ns.adobe.com/flex/mx"
4 xmlns:common ="geb.common.*"
5 width ="0" height ="0"
6 xmlns:controls ="geb.controls.*"
7 xmlns:shapes ="geb.shapes.*" inited ="onInited()"
8 >
9 < fx:Script >
10 <![CDATA[
11 private var timer:Timer;
12 private var slices:int = 12;
13 public var radius:int = 11;
14 public var timerDelay:int = 100;
15 public var sliceColor:uint = 0x333333;
16
17 private function onInited():void
18 {
19 var i:int = slices;
20 var degrees:int = 360 / slices;
21 while (i--)
22 {
23 var slice:Shape = getSlice();
24 slice.alpha = Math.max(0.2, 1 - (0.1 * i));
25 var radianAngle:Number = (degrees * i) * Math.PI / 180;
26 slice.rotation = -degrees * i;
27 slice.x = Math.sin(radianAngle) * radius;
28 slice.y = Math.cos(radianAngle) * radius;
29 box.addChild(slice);
30 }
31 timer = new Timer(timerDelay);
32 start();
33 }
34
35 public function start():void
36 {
37 stop();
38 timer.addEventListener(TimerEvent.TIMER, onTimer, false, 0, true);
39 timer.start();
40 }
41
42 private function getSlice():Shape
43 {
44 var slice:Shape = new Shape();
45 slice.graphics.beginFill(sliceColor);
46 slice.graphics.drawRoundRect(-1, 0, 4, 14, 4, 4);
47 slice.graphics.endFill();
48 return slice;
49 }
50
51 private function onTimer(event:TimerEvent):void
52 {
53 if(box != null)
54 box.rotation = (box.rotation + (360 / slices)) % 360;
55 }
56
57 public function stop():void
58 {
59 if(timer != null)
60 {
61 timer.removeEventListener(TimerEvent.TIMER, onTimer);
62 timer.stop();
63 }
64 }
65
66 public override function close():void
67 {
68 stop();
69 super.close();
70 }
71 ]]>
72 </ fx:Script >
73 < common:BaseContainer id ="box" x ="{width * 0.5}" y ="{height*0.5}" />
74 </ common:BaseContainer >
2 < common:BaseContainer xmlns:fx ="http://ns.adobe.com/mxml/2009"
3 xmlns:mx ="library://ns.adobe.com/flex/mx"
4 xmlns:common ="geb.common.*"
5 width ="0" height ="0"
6 xmlns:controls ="geb.controls.*"
7 xmlns:shapes ="geb.shapes.*" inited ="onInited()"
8 >
9 < fx:Script >
10 <![CDATA[
11 private var timer:Timer;
12 private var slices:int = 12;
13 public var radius:int = 11;
14 public var timerDelay:int = 100;
15 public var sliceColor:uint = 0x333333;
16
17 private function onInited():void
18 {
19 var i:int = slices;
20 var degrees:int = 360 / slices;
21 while (i--)
22 {
23 var slice:Shape = getSlice();
24 slice.alpha = Math.max(0.2, 1 - (0.1 * i));
25 var radianAngle:Number = (degrees * i) * Math.PI / 180;
26 slice.rotation = -degrees * i;
27 slice.x = Math.sin(radianAngle) * radius;
28 slice.y = Math.cos(radianAngle) * radius;
29 box.addChild(slice);
30 }
31 timer = new Timer(timerDelay);
32 start();
33 }
34
35 public function start():void
36 {
37 stop();
38 timer.addEventListener(TimerEvent.TIMER, onTimer, false, 0, true);
39 timer.start();
40 }
41
42 private function getSlice():Shape
43 {
44 var slice:Shape = new Shape();
45 slice.graphics.beginFill(sliceColor);
46 slice.graphics.drawRoundRect(-1, 0, 4, 14, 4, 4);
47 slice.graphics.endFill();
48 return slice;
49 }
50
51 private function onTimer(event:TimerEvent):void
52 {
53 if(box != null)
54 box.rotation = (box.rotation + (360 / slices)) % 360;
55 }
56
57 public function stop():void
58 {
59 if(timer != null)
60 {
61 timer.removeEventListener(TimerEvent.TIMER, onTimer);
62 timer.stop();
63 }
64 }
65
66 public override function close():void
67 {
68 stop();
69 super.close();
70 }
71 ]]>
72 </ fx:Script >
73 < common:BaseContainer id ="box" x ="{width * 0.5}" y ="{height*0.5}" />
74 </ common:BaseContainer >
1:PC Web發布
建立一個Flex Web項目,代碼:
<?
xml version="1.0" encoding="utf-8"
?>
< common:Application xmlns:fx ="http://ns.adobe.com/mxml/2009"
xmlns:mx ="library://ns.adobe.com/flex/mx"
xmlns:common ="geb.common.*" width ="300" height ="300"
xmlns:preloaders ="geb.preloaders.*"
>
< preloaders:ApplyStylePreloader x ="{width*0.5}" y ="{height*0.5}" />
</ common:Application >
< common:Application xmlns:fx ="http://ns.adobe.com/mxml/2009"
xmlns:mx ="library://ns.adobe.com/flex/mx"
xmlns:common ="geb.common.*" width ="300" height ="300"
xmlns:preloaders ="geb.preloaders.*"
>
< preloaders:ApplyStylePreloader x ="{width*0.5}" y ="{height*0.5}" />
</ common:Application >
編譯得到的Flash不到20K大小。演示如下:
2:桌面發布
建立一個Flex AIR項目,代碼:
<?
xml version="1.0" encoding="utf-8"
?>
< s:WindowedApplication xmlns:fx ="http://ns.adobe.com/mxml/2009"
xmlns:s ="library://ns.adobe.com/flex/spark"
xmlns:mx ="library://ns.adobe.com/flex/mx"
xmlns:containers ="geb.containers.*"
xmlns:preloaders ="geb.preloaders.*"
width ="300" height ="300" >
< containers:FlexUI width ="{width}" height ="{height}" >
< preloaders:AppleStylePreloader x ="{width*0.5}" y ="{height*0.5}" />
</ containers:FlexUI >
</ s:WindowedApplication >
< s:WindowedApplication xmlns:fx ="http://ns.adobe.com/mxml/2009"
xmlns:s ="library://ns.adobe.com/flex/spark"
xmlns:mx ="library://ns.adobe.com/flex/mx"
xmlns:containers ="geb.containers.*"
xmlns:preloaders ="geb.preloaders.*"
width ="300" height ="300" >
< containers:FlexUI width ="{width}" height ="{height}" >
< preloaders:AppleStylePreloader x ="{width*0.5}" y ="{height*0.5}" />
</ containers:FlexUI >
</ s:WindowedApplication >
編譯,發布一下,直接把AIR集成進去,就得到一個綠色軟件:
全部文件大小30多M,壓縮成zip后為17.8M。運行:
3:Android平台和iOS平台
建一個Flex 移動項目,代碼:
<?
xml version="1.0" encoding="utf-8"
?>
< s:Application xmlns:fx ="http://ns.adobe.com/mxml/2009"
xmlns:s ="library://ns.adobe.com/flex/spark"
xmlns:containers ="geb.containers.*"
xmlns:preloaders ="geb.preloaders.*"
applicationDPI ="160"
>
< containers:FlexUI width ="{width}" height ="{height}" >
< preloaders:AppleStylePreloader x ="{width*0.5}" y ="{height*0.5}" />
</ containers:FlexUI >
</ s:Application >
< s:Application xmlns:fx ="http://ns.adobe.com/mxml/2009"
xmlns:s ="library://ns.adobe.com/flex/spark"
xmlns:containers ="geb.containers.*"
xmlns:preloaders ="geb.preloaders.*"
applicationDPI ="160"
>
< containers:FlexUI width ="{width}" height ="{height}" >
< preloaders:AppleStylePreloader x ="{width*0.5}" y ="{height*0.5}" />
</ containers:FlexUI >
</ s:Application >
Debug,可以看到模擬器,iOS的,Android的,BlackBerry的,五花八門的, 隨便選一個iPhone 3GS,運行:
導出安裝包,iOS的我沒帳號,就只導出Android的了,導出后的文件大小為9M(把AIR打包進去了)。
演示完畢。
====
少年們,知道什么是Flash了吧。就不再總結了,優點,上面Demo已經一目了然了。缺點嗎,也不說了,會有人補充的。
