我想使用 PyQt5 创建一些 2D 游戏。到目前为止,我已经创建了地图 (16x16) 矩阵。
我在 QMainWindow 内部的 QFrame 元素内绘制,作为中心小部件。
现在据我了解,在 QFrame 内部,我有 paintEvent 方法,它有一些 QPainter。
现在,当我在该方法的第一行放置一些日志时,它会被调用,一切正常,但是现在在我淹没地图之后,我想绘制敌人和角色。现在我不能直接调用paintEvent,但是在QFrame中调用self.update也无济于事。我根本没有看到我放在那里的那个日志。
那么有人可以解释这是如何工作的,如果我想移动我的角色并将它绘制在不同的位置?
所以在 map.py 我有这样的东西:
def updateMap(self):
self.testUpdate = True
self.update()
def paintEvent(self, event):
print("Event is: ", event)
painter = QPainter(self)
for p in self.allPositions:
if p.available == False:
painter.drawPixmap(p.column*self.block_w, p.row*self.block_h, self.block_w, self.block_h, QPixmap('map/map_block.png'))
else:
painter.fillRect(p.column*self.block_w, p.row*self.block_h, self.block_w, self.block_h, Qt.black)
self.drawLifes()
if self.testUpdate == True:
painter.fillRect(0, 0, self.block_w, self.block_h, Qt.black)
现在在我的主窗口中,我已经初始化了地图对象,当我创建玩家时,我想重绘地图:
def init_ui(self):
self.setWindowTitle('Try to win, if u can :P')
self.setFixedSize(SCREEN_WIDTH, SCREEN_HEIGHT)
self.center_window()
self.setCentralWidget(self.map)
# Set position for player's
self.move_player(self.player1, P1_INIT_POS)
self.move_player(self.player2, P2_INIT_POS)
self.map.updateMap()
这将产生分段错误。但我不确定我应该使用什么方法来重绘地图,或者只是在地图上的特定位置上绘制。有没有类似于我想要达到的例子?