在這篇文章中,我要分享的是用flash和adobe air針對iphone平台開發遊戲的經驗。
簡單地說,air是個支援flash應用在不同裝置(包括ios、android、黑莓甚至電視)上執行的平台,在開始以air為平台開發之前,我對此絲毫不了解。但這不是問題,因為95%的air應用與普通的flash應用並無明顯區別。
所以,我和團隊決定用此為iphone製作遊戲。我們的目標不是賺錢,而是通過實驗來證實是否能夠在air上針對ios製作出流暢的動態遊戲。
遊戲想法
我們想要盡快做成遊戲,所以我們希望遊戲玩法滿足以下條件:
1、簡單,這樣我們才能快速地製作出遊戲。
2、無需過多的動畫和移動物體,因為我們不確定它能否在ios上流暢執行。
3、採用普通的遊戲玩法。
4、無需製作上百個不同的解謎關卡,因為我們不想在這個遊戲上花過多的時間。
而且,我們也不想自行發明遊戲玩法,也沒有足夠的時間這麼做,所以我們決定轉殖其他的遊戲。
經過數天的搜尋後,我們找到了轉殖的目標——《axe in face》。
遊戲開發
於是,我們開始了遊戲開發工作。
在air上開發遊戲很簡單。與普通的flash遊戲開發類似,只有些許不同之處(遊戲邦注:多數是些裝置獨有的功能,比如多點觸控和加速計等)。
接下來,讓我們先擱置flash開發,專注於ios系統特有的問題。
執行表現
當你針對手機開發應用時,執行表現是最重要的層面。我們希望自己遊戲能夠表現得像款ios原生應用。遊戲能夠像其他iphone遊戲那樣流暢地呈現效果。所以,我們嘗試了不同的技術,盡量實現這個目標。
但是,需要指出的是,並非所有願望都能實現。
所以,我們在製作精靈時嘗試了多種不同的影象引擎。
1、flash引擎,點陣圖幀。
首先,當然是不能使用向量圖!向量圖執行非常緩慢,你需要的是只用位圖。
我們嘗試的首個做法是,簡單的flas***剪輯,以位圖呈現畫面幀。
令人驚異的是,它的表現並不糟糕,但還是有一些提公升空間。
2、位圖傳輸
接下來,我們嘗試的是點陣圖傳輸。這是開發電腦flash遊戲的常用方法。其想法是,製作1個位圖資料,將所有的精靈挨個複製到其中。隨後,將其呈現在螢幕上。
這種方法在電腦flash遊戲上很有效,但是在ios上卻失敗了。如果採用這種方法,記憶體運轉速度似乎很慢。
3、高階flash引擎。
當使用標準flash引擎時,每個新的幀都需要運用記憶體。在每幀中,flash引擎都需要處理老影象並為新幀建立新影象。
但是,所有的影象都可以重複使用,所以在使用後無需將其處理。
首先,我們將所有影象資料載入到位圖資料向量中,每幀都有自己的點陣圖資料。然後,我們以每幀為基礎製作位圖物件,將所有物件都放置在精靈movieclip中。這樣,精靈在呈現單幀的同時也含有所有幀。接下來,我們需要做的是為它們轉換可視資產,每次只呈現單個幀。
這種方法確實有效,但是還存在改進的空間。
下個改善的階段是,我們製作單個位圖物件,然後為其加上位圖資料,比如main_bmp.bitmapdata = bd_frame[i]。
這種做法也很有效,在iphone 4上可以實現以40幀每秒的速度呈現20到30個動畫精靈。
這足以滿足我們的需求。
以下是某些執行表現的設計建議:
1、盡量少用動態建立物件。
2、盡量少用滑鼠互動物件。使用mouseenabled和mousechildren來關閉互動選項。
3、避免移動大型物件。
4、針對所有無動畫和無旋轉的物體使用cacheasbitmap。
5、針對其他無動畫但需要旋轉或改變的物體使用cacheasbitmapmatrix。
6、不要製作大量enter_frame***。只需製作1個即可。
7、在enter_frame***中計算時間。如果你正以每幀x畫素的速度移動乙個物件,從上次***呼叫的時間開始計算。
平台特有的問題
retina vs 低解析度
應用在螢幕解析度不同的情況下會有何表現呢?很簡單,影象會縮放,當然你需要修改場景縮放**。
對於同時兼顧iphone 3/3gs和4/4s的開發者來說,這是件好事。你只需要製作retina應用,在iphone 3上執行時應用會自動縮放。
當然,你也可以根據螢幕來呈現不同的影象,但是這看起來似乎很麻煩,所以我們以預設的方式來處理這個問題。
iphone vs ipad
這個問題與retina問題相同,也關係到應用的縮放。但是在這種情況中,縮放因素並不是那麼出眾,所以你需要為ipad遊戲製作某些自定義**和自定義影象。
這正是我們將應用設計為只支援iphone的原因。或許,以後我們會針對ipad製作遊戲的hd版本。
cpu vs gpu
對於影象而言,你可以使用cpu或gpu來編譯air應用。如果使用我們的影象引擎,這兩者之間的差別並不大(遊戲邦注:差別在10%左右)。
但是我們選擇了cpu,因為在gpu下編譯會面臨某些限制條件。比如,無法呈現效果。這意味著,所有的文字輪廓和陰影都無法呈現。解決方案是,製作空白的點陣圖資料物件,在那裡繪製電影剪輯,然後將其放入應用中。因為當你使用「繪製」方法時,它使用的是軟體引擎並支援所有的效果呈現。
但是這似乎也相當棘手,且毫無好處可言,所以我們選擇使用cpu模式。
其他問題
adobe air是國際通用平台。這意味著,如果你需要接入gamecenter等某些ios裝置特有的功能,你需要安裝額外的「本地擴充套件」。這個構建過程令人煩擾,但是一旦弄清來龍去脈,所有的事情就都變得非常簡單。
而且,新版air忽略了手機上的靜音開關。所以,我們需要使用額外的本地擴充套件來實現。
總結
能不能使用flash air來編寫應用呢?我覺得答案是肯定的。
當然,在表現上會面臨許多問題和瓶頸。但是,adobe正在解決這些問題,承諾在不久將來會獲得良好的改善。對於動態遊戲而言,現在要製作出能夠在帶有retina功能的iphone 4上完全流暢執行的遊戲並不容易。但如果以ipad 2和iphone 4s為平台,應用執行表現更好。
所以,我們希望adobe能夠將air打造成真正適合開發遊戲的平台。
分享用python做的凱撒密碼
我做的凱撒密碼的思路是,先將輸入的字母轉換成相對應unicode編碼,之後再將unicode編碼,轉換成字母輸出。yw input 請輸入字母 for i in yw if i in x y z print chr ord i 23 end elif i in print end elif i in...
技術分享 使用者密碼安全儲存建議
安全小測驗 儲存機密資訊最安全的辦法是什麼?a 利用 256 位金鑰的強對稱加密演算法 例如 aes 進行加密。b 利用 4096 位金鑰的非對稱強加密演算法 例如 rsa 進行加密。c 利用平台內 置的加密系統進行加密,例如 windows 的資料保護 api dpapi 做出選擇了嗎?正確的答案...
分享 用快手引流指令碼如何引流精準粉
由此可見它的使用者量是有多大,對於想要了客源的朋友來說,這裡是乙個不可多得的引流聖地,所以,快客引流開發了快手 直接給大家演示快手引流指令碼操作步驟。首先呢,我們要安裝 夜神模擬器 在模擬器上執行指令碼!然後安裝模擬器,直接拖拽進去就會自動安裝了。這兩個,其中乙個為快手的客戶端,乙個為指令碼 另外,...