我刚刚在我的小 Pyglet 游戏中启动并运行了 OpenGL 的相机缩放,但现在我面临一个问题:当我放大或缩小时,游戏对象的命中框不会明显缩放,所以游戏没有响应鼠标事件正确。更改数千个对象的属性可能有点慢,所以我想知道是否可以修改鼠标的位置。我只是不知道怎么做。缩放是通过glOrtho()
乘以参数来完成的。
缩放代码(self.dx
和self.dy
是到目前为止相机的总移动,self.zoom
是从 0.1 到 2 的乘数):
pyglet.gl.glMatrixMode(pyglet.gl.GL_PROJECTION)
pyglet.gl.glLoadIdentity()
pyglet.gl.glOrtho(-screen.width / (2 * self.zoom), screen.width / (2 * self.zoom), -screen.height / (2 * self.zoom), screen.height / (2 * self.zoom), -1, 1)
pyglet.gl.glTranslatef(self.dx - screen.width / 2, self.dy - screen.height / 2, 0)
pyglet.gl.glMatrixMode(pyglet.gl.GL_MODELVIEW)
编辑
反转鼠标坐标的缩放计算怎么样?
编辑 2
我处理鼠标与游戏对象碰撞的方式至少是臭名昭著的。我实际上是使用pygame.Rect
对象来表示对象的位置,然后将其与鼠标的位置相撞。到目前为止效果很好,因为直到现在我还没有进行任何缩放。也许有一种更适合 OpenGL/3D 世界的方法?