2012-08-12 135 views
6

首先,我會說這裏的上下文是Actionscript 3.0(IDE:Flashbuilder)以及Starling FrameworkAS3瓷磚地圖渲染(具有1000個瓷磚)

所以,我想創建一個可以用於平臺遊戲或類似的平鋪地圖。

我想在800x600像素的舞臺上使用8x8像素圖塊,我遇到的問題是我不知道如何將這些7500+圖塊對象添加到舞臺上,而不會顯着降低幀率。

我發現性能的下降來自將每個拼貼添加到舞臺上,而不是從初始化每個Tile對象。

我知道我沒有提供太多具體的信息,但是我要求的是,如果有一種標準方法可以將數以千計的靜態物體吸引到舞臺上而不會損失性能。我覺得有一種方法,我還沒有找到它。

更新:

所有的你的幫助後,我發現似乎是一個很好的解決方案。起初,我想實現Amy的解決方案,使用copyPixels()和draw()爲整個地圖製作一個大的位圖數據,然後將其渲染到屏幕上。然而,我想知道是否有與此相當的Starling,因爲如果我不需要將Starling與Native Flash混合,那麼一切都將變得更加簡單。

再次感謝Amy,我多看了一下Starling的RenderTexture類,發現使用「drawBundled()」和「draw()」方法,我可以很容易地將所有的圖塊繪製到RenderTexture中,並且然後將RenderTexture放入圖像(Starling的圖像類),然後將該圖像添加到屏幕。

這個解決方案比我之前嘗試過的愚蠢的慢解決方案快100萬倍,具有平坦化精靈等。它的初始化時間更快,並且renderTexture的圖像在屏幕上時似乎沒有幀​​速下降。

我想用這個測試的一件事是,如果在遊戲過程中很容易更新瓦片的圖形。比如說,如果水從源頭(或某物)傳播而「草」瓦必須變成「水」瓦,RenderTexture和它的圖像是否能夠改變它們的外觀,而不會出現某種滯後尖峯或性能呃逆。我會很快對此進行測試。

謝謝大家的幫助!

回答

9

不要添加許多對象的舞臺。相反,創建一個與舞臺大小相似的BitmpaData,並使用copyPixels()或draw()來繪製它。 Here's an article這應該讓你開始。然後,你可以把你在這篇文章中學到的概念學到,並學習你需要做的沒有涉及的任何事情(flashandmath。com有很多關於像素操作的很好的教程)

+0

謝謝,像這樣的出發點將我推向正確的方向正是我需要的! – Brucef 2012-08-12 02:11:39

+0

不客氣:) – 2012-08-12 02:13:47

+0

現在我只需要弄清楚如何使用本機Flash顯示對象與Starling框架協同工作...... – Brucef 2012-08-12 02:27:08

3

當您在遊戲中移動時,您需要管理需要添加和移除的圖塊。只添加到屏幕中心800像素的階段中。一旦瓷磚超過800像素從中心刪除它。這應該讓一切順利進行。祝你好運。

或查看繪圖/應對您的瓷磚到一個位圖。你將基本上將你的瓷磚壓印到新的位圖上。下面是從Adobe的例子:

import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.geom.Rectangle; 
import flash.geom.Point; 

var bmd1:BitmapData = new BitmapData(40, 40, false, 0x000000FF); 
var bmd2:BitmapData = new BitmapData(80, 40, false, 0x0000CC44); 

var rect:Rectangle = new Rectangle(0, 0, 20, 20); 
var pt:Point = new Point(10, 10); 
bmd2.copyPixels(bmd1, rect, pt); 

var bm1:Bitmap = new Bitmap(bmd1); 
this.addChild(bm1); 
var bm2:Bitmap = new Bitmap(bmd2); 
this.addChild(bm2); 
bm2.x = 50; 

More Info on the bitmapData class. I think copyPixels is what you are after.

+0

這將工作在不同的情況,但這裏的問題不是我需要添加/刪除瓷磚,因爲相機移動,但瓷磚是如此之小,我不知道如何創建填滿屏幕(7500)所需的數量而不會極大地降低性能。 – Brucef 2012-08-12 01:07:42

+0

有多少個不同的獨特瓷磚?你能不能採樣瓦片的bitmapData並將它們全部複製到一個位圖中。這樣,你只是建立一個圖像,但從多個瓷磚來源。 – Boyd 2012-08-12 01:23:19

+0

有很少的獨特的瓷磚(少於16),這聽起來像它可以工作,但我真的不完全理解實現類似的方式 – Brucef 2012-08-12 01:25:22