遵循这个问题:老式 2D 类似塞尔达传说游戏的最佳方法 https://stackoverflow.com/questions/2125354/best-approach-for-oldschool-2d-zelda-like-game
感谢之前的回复,并受到了很大的启发http://insanitydesign.com/wp/projects/nehe-android-ports/ http://insanitydesign.com/wp/projects/nehe-android-ports/,我开始为我的简单 2D 类似塞尔达传说的游戏项目构建一个简单的图块生成器。
我现在可以生成具有相同纹理图块的地图,使用 2 个 for(..) 叠瓦式迭代来绘制水平和垂直图块,并获得一些基本的 DPAD 键输入侦听器以在 x 和 y 轴上滚动。
但现在我遇到了我的第一个性能问题,只有一个纹理和一个模型。
当尝试构建 10x10 地图时,滚动非常流畅。
当尝试使用 50x50 时,情况会变得更糟,而使用 100x100 时,情况会变得不可接受。
有没有办法只告诉 OpenGL 渲染我的地图集的“可见”部分并忽略隐藏的图块?我对此完全陌生。
我在用着
GLU.gluLookAt(gl, cameraPosX, cameraPosY, 10.0f,cameraPosX, cameraPosY, 0.0f, 0.0f, 1.0f, 0.0f);
设置相机和视角以获得 2D 风格的感觉。
有什么帮助吗? :)
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 10; i++) {
gl.glPushMatrix(); // Sauvegarde la matrice sur le stack
//Bind the texture according to the set texture filter
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[filter]);
//Set the face rotation
gl.glFrontFace(GL10.GL_CW);
//Enable texture state
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
//Enable vertex state
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//Point to our vertex buffer
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
//point to our texture buff
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
//Draw the vertices as triangle strip
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTranslatef(1.0f, 0.0f, 0.0f); // on avance d'une tile
}
// on va commencer a dessiner la 2e ligne
gl.glPopMatrix(); // Rappelle la matrice sur le stack
gl.glTranslatef(0.0f, -1.0f, 0.0f);
}