0

PyQt5 を使用して 2D ゲームを作成したいと考えています。これまでのところ、マップ (16x16) マトリックスを作成しました。

QMainWindow の内部にある QFrame 要素内を中央のウィジェットとして描画しています。

私が理解しているように、QFrame内には、いくつかのQPainterを持つpaintEventメソッドがあります。

そのメソッドの最初の行にログを置くと、それが呼び出され、すべて問題ありませんが、マップを溺死させた後、敵とキャラクターを描きたいと思います。現在、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()

これにより、セグメンテーション違反が発生します。しかし、マップを再描画するため、またはマップ上の特定の位置に描画するためにどのアプローチを使用する必要があるかわかりません。私が達成したいことに似た例はありますか?

4

0 に答える 0