我已經創建了一個簡單的例子:背景表面層和10個小「點」(10個表面層10x10像素,每個填充顏色通過fillRect())。 Paint方法簡單地圍繞週期性地移動點:我應該在每一幀重新繪製SurfaceLayer嗎?
private SurfaceLayer background;
private List<Layer> dots = new ArrayList<Layer>();
@Override
public void init()
{
background = graphics().createSurfaceLayer(graphics().width(), graphics().height());
background.surface().setFillColor(Color.rgb(100, 100, 100));
background.surface().fillRect(0, 0, graphics().width(), graphics().height());
graphics().rootLayer().add(background);
for (int i = 0; i < 10; i++)
{
SurfaceLayer dot = graphics().createSurfaceLayer(10, 10);
dot.surface().clear();
dot.surface().setFillColor(Color.rgb(250, 250, 250));
dot.surface().fillRect(0, 0, 10, 10);
dot.setDepth(1);
dot.setTranslation(random()*graphics().width(), random()*graphics().height());
dots.add(dot);
graphics().rootLayer().add(dot);
}
}
@Override
public void paint(float alpha)
{
for (Layer dot : dots)
{
if (random() > 0.999)
{
dot.setTranslation(random()*graphics().width(), random()*graphics().height());
}
}
}
不知何故java版繪製所有點而HTML和Android版本借鑑,只有1
手冊沒有明確說,如果我要重新繪製所有這些點在每次paint()調用中。據我瞭解,SurfaceLayer適用於不修改每一幀圖層的情況(這樣可以重複使用相同的緩衝區?),但這不起作用。
那麼你們可以幫助我正確使用SurfaceLayer嗎?如果我只是在SurfaceLayer上填充了一個矩形 - 它會永久保留在這個層上,還是應該在每次調用paint時填充它?如果是 - 這與ImmeadiateLayer不同嗎?
我在PlayN表面測試中添加了一個類似於您的測試,它們在Java,HTML和Android上對我的工作很好。所以也許別的東西是錯的? – samskivert 2012-04-04 21:30:50
現在,這裏是一個測試遊戲:http://speedy.sh/Q56mx/test-game.tar.gz 我啓動它: MVN全新安裝 MVN測試-Ptest-HTML 然後打開本地主機: 8080在FF或Chrome中 - 它顯示一個白點的黑屏。 也許你可以看看代碼並快速找到錯誤?或者分享你的測試,以便我可以自己解決問題。 – user1312030 2012-04-06 16:12:35