我正在通过 wxPython 学习图形编程。我创建了一组平铺图像,旨在以由各种功能(已经完成)确定的方式将它们拼接在一起,以创建随机生成的地图以供将来使用(有效地创建平铺引擎)。
我当前将地图绘制到框架的方法包括遍历所有 50x50 位置并将 16x16 位 png 绘制到 EVT_PAINT 处理程序内的每个位置。这需要几秒钟,并且不适合我的意图(即让框架充当相机,然后可以在比显示的地图大得多的地图上平移)。
我的问题是,是否可以在背景中创建一个“缝合”在一起的图像,然后简单地用一条线绘制该图像而不是一遍又一遍地绘制(我怀疑这会占用这么多时间)?任何其他方法(有效)也很好,我必须承认我对一般编程不是很有经验,特别是对图形编程不是很有经验。理想情况下,我希望能够仅绘制该图像的可见部分,这是可包裹的,因此能够根据需要对“元图像”进行切片和重新缝合会很棒。
目前 EVT_PAINT 代码如下所示:
def onpaint(self, event = None):
dc = wx.PaintDC(self)
dc.Clear()
pposX = 0 #ppos = Pixel Position
pposY = 0
tposX = 0 #tpos = tile position, essentially the tile co-ordinates independent of pixel position
tposY = 0
while tposY < self.tTotalY: #loops through all y coordinates
tposX = 0
while tposX < self.tTotalX: #loops through all x coordinates
pposX = tposX*self.tsCurrent
pposY = tposY*self.tsCurrent
tiletype = self.getTileType(tposX,tposY,self.tTotalX,self.tTotalY)
img = wx.Image((self.filepath + '\\' +str(tiletype)), wx.BITMAP_TYPE_ANY).ConvertToBitmap()
dc.DrawBitmap(img,pposX,pposY)
img.Destroy()
tposX += 1
tposY += 1