2011-06-15 143 views
4

我在Flash中創建了一個iPhone應用程序,並且遇到了性能問題。我已經將整個事件簡化爲一個簡單的例子(如下)。它在屏幕上繪製一個框,並使用TouchEvent跟蹤手指手勢。這就是問題所在:它在我測試的iPhone 3G上非常緩慢。盒子在頁面上下方停頓。Flash到iPhone速度很慢

在application.xml中啓用了GPU模式,當我設置-renderingdiagnostics標誌時,文本變爲藍色(意味着它每次都呈現,這是正確的),但正方形保持白色。它不會轉變診斷模式的三種顏色中的任何一種。這裏是一個畫面:

http://whit.info/dev/flashapp/screen.jpg

,這裏是呆滯的視頻:,考慮到這

http://vimeo.com/25160240

所以只有一個緩存精靈垂直移動,我錯過關於啓用GPU或位圖緩存的一些事情?或者,這是否像在硬件上一樣好?其他應用程序似乎出色地下滑。

任何人都可以協助嗎?

非常感謝!

-Whit

package { 

import flash.display.MovieClip; 
import flash.display.Sprite; 
import flash.events.TouchEvent; 
import flash.ui.Multitouch; 
import flash.ui.MultitouchInputMode; 
import flash.text.TextField; 
import flash.text.TextFormat; 
import flash.text.TextFieldAutoSize; 

[SWF(width='320', height='480', backgroundColor='#BACC00', frameRate='60')] 

public class Main extends MovieClip{ 
    private var square:Sprite; 
    private var txt:TextField; 
    private var startDragY:Number; 
    private var startObjY:Number; 

    public function Main(){ 
     Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; 

     stage.addEventListener(TouchEvent.TOUCH_BEGIN, beginhandler); 
     stage.addEventListener(TouchEvent.TOUCH_MOVE, movehandler); 
     stage.addEventListener(TouchEvent.TOUCH_END, endhandler); 

     drawBox(0xffffff); 
     makeOutput(); 
    } 

    private function beginhandler(evt:TouchEvent): void { 
     startDragY = evt.stageY; 
     startObjY = square.y; 
    } 

    private function movehandler(evt:TouchEvent): void { 
     out(String(evt.stageY)); 
     square.y = startObjY - (startDragY - evt.stageY); 
    } 

    private function drawBox(fill:Number):void { 
     square = new Sprite(); 

     square.graphics.beginFill(fill); 
     square.graphics.drawRect(20,60,40,40); 
     square.graphics.endFill(); 

     stage.addChild(square); 
     square.cacheAsBitmap = true; 
    } 

    private function makeOutput():void { 
     txt = new TextField(); 
     stage.addChild(txt); 
     txt.selectable = false; 
     txt.autoSize = TextFieldAutoSize.CENTER; 
     txt.defaultTextFormat = new TextFormat("Arial", 22, 0x000000); 
     txt.text = "Touch Screen"; 
     txt.x = stage.stageWidth/2 - txt.width/2; 
     txt.y = stage.stageHeight/2 - txt.height/2; 
    } 

    private function out(str:String):void { 
     txt.text = str; 
    } 
} 
} 

而且,這裏有我使用編譯命令:

.amxmlc ~/Files/Code/iOS/MyApp/Main.as 

.pfi -package -renderingdiagnostics -target ipa-test -provisioning-profile MyApp.mobileprovision -storetype pkcs12 -keystore Certificates.p12 -storepass MyPass MyApp.ipa application.xml Main.swf Default.png icons 
+7

「我正在Flash中創建一個iPhone應用程序。」哦,親愛的...祝你好運! – Roger 2011-06-15 22:19:17

回答

1

最新的Adobe更新是爲設備。

我們的團隊也面臨同樣的問題,並通過更新產品解決了問題。

我們更新爲:

Flash professional CS5.5 
AIR 2.7 

和性能上的差異是明顯的。

+0

感謝您的幫助,您的回答非常有效。 :) – Whit 2011-06-18 19:47:37

+0

很好分享的細節。期待從Adobe進一步升級。定期檢查將繼續值得更惠特。 – 2011-06-18 19:56:39

1

了閃光燈出口的版本,您使用的?據稱CS5.5更新速度有所提升。

此外,iOS 4上的iPhone 3g已經耗盡內存,如果使用AIR加載內存不足,我不會感到驚訝。

1

如果您想要在iPhone 3G(可能是任何iOS設備)上獲得良好的動畫性能,請使用Apple提供的Xcode工具在Objective C中編寫應用程序。結果將運行得更快,消耗的客戶設備的電池和內存要少得多。