【发布时间】:2015-10-26 06:27:26
【问题描述】:
我正在尝试创建一个弹幕游戏,但遇到了一些麻烦。大约 500 发子弹后,我无法获得超过 17 fps 的速度。所有这些更新逻辑代码大约需要 1-4 毫秒,而渲染代码大约需要 40 毫秒
现在我的代码是
private void drawEntities(Canvas canvas) {
for (HashMap<UUID, Spatial> h: spatialList) {
for (Spatial spatial: h.values()) {
spatial.render(canvas);
if(spatial.life > 0)
spatial.life--;
else if (spatial.life == 0)
engine.deleteEntity(spatial.owner);
}
}
}
spatialList 是一个数组列表,其中每个索引都是一个 zLevel
显示实际子弹的空间是
public void render(Canvas canvas) {
float angle = (float) (vel.getAngle() * (180 / Math.PI));
matrix.reset();
matrix.setTranslate(pos.x - bullet.getWidth() / 2, pos.y - bullet.getHeight() / 2);
matrix.postRotate(angle + 90, pos.x, pos.y);
canvas.drawBitmap(bullet, matrix, paint);
canvas.drawCircle(pos.x, pos.y, col.getRadius(), paint);
}
我可以提供更多代码,但这些似乎是主要问题。我已经尝试了所有我能想到的东西,但在网上找不到太多其他东西。我能想到的唯一解决此问题的方法是从表面视图切换到 GLSurfaceview,但我真的认为有更好的方法,我只是使用了错误的代码。
编辑:我注意到我的计时器已关闭并删除了drawcircle,再次运行后我得到了40ms~大约500,这对于合理的性能来说仍然有点太低了。
TLDR; 500 个实体 = 17 fps。
【问题讨论】:
标签: android performance surfaceview