I’m creating a square grid of models “on the fly” for a minesweep type game. For graphics performance (to cut down on Geoms), I’m taking the whole grid and breaking it up into chunks of 10x10 squares. Each grid square is represented by a model, so each chunk is comprised of 100 models. Each chunk is created as a single node and flattened. When the user reveals a square, one or more chunks may need to be updated. I do this by deleting the old chunk and re-creating it. That part is working right, but there is a noticeable delay. On an fairly pokey Core 2 Duo 1.8GHz laptop, it can sometimes take up to 180ms to build a chunk, and when you need to do more than one the delay can be annoying.
I’m wondering if the method I’m using to build the chunks is as efficient as it could be. If it is, then I may have to consider smaller chunks.
Here’s the chunk creating part of the code:
def createMeshFragment(self, fragmentX, fragmentY): fragWidth = GridFragmentManager.FRAGMENT_WIDTH fragHeight = GridFragmentManager.FRAGMENT_HEIGHT xoffset = fragmentX * fragWidth yoffset = fragmentY * fragHeight modelWidth = GridFragmentManager.MODEL_WIDTH modelHeight = GridFragmentManager.MODEL_HEIGHT newNode = NodePath("grid%d_%d" % (fragmentX, fragmentY)) for z in range(fragHeight): for x in range(fragWidth): state, contents = self.gridModel.getSpaceData((x+xoffset,z+yoffset)) if state == "hidden": model = loader.loadModel("frustrum.egg") else: model = loader.loadModel("inv_frustrum.egg") if contents >= 1 and contents <= 3: model.setTexture(self.textures[contents-1]) model.setPos(x*modelWidth, 0, z*modelHeight) model.reparentTo(newNode) newNode.clearModelNodes() newNode.flattenStrong() newNode.setPos(modelWidth*fragWidth*fragmentX, 0, modelHeight*fragHeight*fragmentY) return newNode