2012-08-02 23 views
0

我想讓我的遊戲在使用PlayN的android上順利運行,一切都按預期工作,但我有一個嚴重的低幀率。 我想我可能會這樣做是錯誤的,所以如果有人能給我一些幫助,那將會很棒:D。在android上使用immediateLayer的低幀率(和奇怪的playn日誌消息)

因此,我目前正在創建一個ImmediateLayer並清理它並在每一幀繪製每個對象,使用graphics.getImage(...)加載一次圖像。我在HTC Desire上(以調試模式連接)獲得10 fps左右的圖像,同時繪製大約100張圖像。當我添加objetcs時它變慢。 是什麼讓我覺得我在做一件真正錯誤的事是PlayN將這些消息用垃圾郵件發送(我使用DDMS來檢查日誌)。

剩餘

ý紋理X紋理創建

似乎每秒約20次。

所以基本上我做這樣的事情:

public void draw(Surface s){ 
for (Drawable d : toDraw) { 
     surface.drawImage(d.getImage(), d.x, d.y, d.w, d.h); }} 

凡平局被稱爲在immediateLayer的渲染器。

謝謝你的時間!

盧卡斯

編輯: 我發現了一個可能的答案閱讀playn郵件列表上線。 https://groups.google.com/forum/?fromgroups#!topic/playn/XJTlBgmfzaQ

尤其是消息

大多數的瓷磚共享相同的圖像,但它的不同部分(atteined由子圖像,這在我的知識不會複製,而是僅創建 引用圖像的子部分?)。不同的子部件會導致紋理更改嗎?

子圖像將共享相同的紋理,但您必須確保 渲染共享相同紋理的所有圖像。如果你 有一堆來自圖像A的子圖像和一堆來自圖像B和 ,你渲染A,B,A,B,A,B,A,B,你會得到與 相同的性能,圖片。您需要渲染A,A,A,A, B,B,B,B

看起來我是在最壞的情況下。

我有許多不同的紋理(比如50),它們都是不同圖像的一部分,並且都是隨機渲染的。我可能會得到一些接近N紋理的開關,其中N是我渲染的對象數量。

我會更新這個,當我得到的東西上班:)。

編輯2:

我現在呈現100客體指向相同的圖像(所以沒有質感掉呢?)。我仍然可以在Android上約10 FPS和調試日誌的每一幀仍然說:

1紋理保持 2紋理創建

我覺得我失去了一些東西重要?幫助:)。

回答

0

一些更深層次的測試後,我發現:

1)宏達慾望不能指望得到60個繪製數百甚至可以共享相同的圖像的對象。

2)附連到一組層imageLayer似乎提供對機器人

3)調用surface.clear()在渲染器的回調的開始更好的性能(使用即時層)大大改善的性能繪製並刪除「紋理創建」調試日誌。

4)最後通過紋理對物體進行排序並減少紋理交換的數量(繪製A A A A B B B代替A B A B A B)給了我更好的結果。

該應用程序現在運行速度爲30幀/秒,在銀河系S2上以60幀/秒的速度在屏幕上繪製500個物體。