私の目標は、pygameキャンバス上にグリッドを作成し、x座標とy座標でボックスを強調表示するモジュールを作ることです。pygameクラス構造
ここでは簡単な使用例を示します。
from grid import Grid
g = Grid(100, 100, 10) # width and height in cells, cell width in pixels
g.highlightBox(2, 2, (0, 255, 0)) # cell x and y, rgb color tuple
g.clearGrid()
これまでのコードは次のとおりです。問題は、ウィンドウを開いたままにして閉じるボタンを機能させるためにイベントループを作成する必要があることですが、他の関数も画面に描画できるようにする必要があります。
import pygame
import sys
class Grid:
colors = {"blue":(0, 0, 255), "red":(255, 0, 0), "green":(0, 255, 0), "black":(0, 0, 0), "white":(255, 255, 255)}
def __init__(self, width, height, cellSize, borderWidth=1):
self.cellSize = cellSize
self.borderWidth = borderWidth
self.width = width * (cellSize + borderWidth)
self.height = height * (cellSize + borderWidth)
self.screen = pygame.display.set_mode((self.width, self.height))
running = True
while running:
event = pygame.event.poll()
if event.type == pygame.QUIT:
running = False
def clearGrid(self):
pass
def highlightBox(self, x, y, color):
xx = x * (self.cellSize + self.borderWidth)
yy = y * (self.cellSize + self.borderWidth)
pygame.draw.rect(self.screen, color, (xx, yy, self.cellSize, self.cellSize), 0)
私は最初のサンプルを実行すると、コードは(終了ボタンが押されている)、ループが実行されるまで、私はhighlightBox
機能を実行することができない、ループ内で立ち往生されます。
trueの場合、init関数でループを実行するのが最適な場所ではない場合があります。決して少なくても、これは外部関数から画面に書き込む問題を解決しません。 – giodamelio
@giodamelioあなたはあなたの問題が何であるかを明確にしていません。あなたが呼び出す必要のある他の機能を持っているなら、(ループの中で)それらを呼び出すことができます。それとも、特定のイベントが発生したときに呼び出されるようにしたいと言っているのですか?あなたの問題が何であるかに関して具体的にしてください。 –