我已经创建了一个简单的例子:背景表面层和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