2D游戏编程技巧与超级跳跃者游戏开发
一、FloatBuffer中的Bug修复
在使用新的SpriteBatcher方法时,Hero设备性能不佳的原因并不明显。当调用Vertices.setVertices()时,SpriteBatcher会将一个浮点数组放入直接字节缓冲区中。该方法最终会调用FloatBuffer.put(float[]),而这正是性能下降的罪魁祸首。在桌面Java中,FloatBuffer方法通过真正的批量内存移动来实现,但在旧版Android使用的Harmony版本中,会为数组中的每个元素调用FloatBuffer.put(float)。这是一个JNI方法,会带来大量开销。
解决方案之一是使用IntBuffer.put(int[]),它不会有这个问题。我们可以将Vertices类中的FloatBuffer替换为IntBuffer,并修改Vertices.setVertices()方法。具体操作如下:
1. 在Vertices类的构造函数中初始化一个临时整数数组tmpBuffer:
this.tmpBuffer = new int[maxVertices * vertexSize / 4];
- 从ByteBuffer获取IntBuffer视图,而不是FloatBuffer:
vertices = buffer.asIntBuffer();
- 修改后的Vertices
超级会员免费看
订阅专栏 解锁全文
43

被折叠的 条评论
为什么被折叠?



