为什么 pygame.draw.rect 会无限重绘矩形?
Why is pygame.draw.rect infinitely re-drawing rectangles?
我有这个 pygame 代码,我希望它为宝石闪电战风格的游戏绘制一块矩形板。这就是我所拥有的,当您 运行 它时,它会无限更新屏幕上的垃圾邮件新矩形。
import pygame as pg
import sys, random
pg.init()
clock = pg.time.Clock()
cell_size = 40
cell_num = 20
disp = pg.display.set_mode((cell_size * cell_num, cell_size * cell_num))
bg = pg.Surface((cell_size * cell_num, cell_size * cell_num))
bg.fill('white')
gold = pg.Color(221, 238, 81)
sea_foam = pg.Color(81, 238, 143)
pink = pg.Color(238, 145, 251)
gr33n = pg.Color(0, 255, 35)
blu = pg.Color(0, 236, 255)
colors_list = [gold, sea_foam, pink, gr33n, blu]
class Board:
def __init__(self):
self.x = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
self.y = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
def drawBoard(self):
for i in range(0,21):
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[0], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[1], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[2], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[3], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[4], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[5], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[6], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[7], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[8], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[9], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[10], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[11], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[12], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[13], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[14], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[15], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[16], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[17], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[18], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[19], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[20], cell_size, cell_size))
game = Board()
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
disp.blit(bg,(0,0))
game.drawBoard()
pg.display.update()
clock.tick(60)
试试这个:
n = 1
game = Board()
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
clock.tick(60)
while n == 1:
disp.blit(bg,(0,0))
game.drawBoard()
pg.display.update()
n -= 1
你每一帧都在生成新的颜色。您需要在开始时为每颗宝石生成一次颜色,然后使用它们绘制矩形。
class Board:
def __init__(self):
self.x = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
self.y = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
self.size = (21, 20)
#generate random color for every posible jewel on screen once
self.colors= [random.choice(colors_list) for i in range(self.size[0] * self.size[1])]
def drawBoard(self):
#go through every jwell position on board and draw them.
for x in range(self.size[0]):
for y in range(self.size[1]):
pg.draw.rect(disp, self.colors[y * self.size[0] + x], (self.x[x], self.y[y], cell_size, cell_size))
我有这个 pygame 代码,我希望它为宝石闪电战风格的游戏绘制一块矩形板。这就是我所拥有的,当您 运行 它时,它会无限更新屏幕上的垃圾邮件新矩形。
import pygame as pg
import sys, random
pg.init()
clock = pg.time.Clock()
cell_size = 40
cell_num = 20
disp = pg.display.set_mode((cell_size * cell_num, cell_size * cell_num))
bg = pg.Surface((cell_size * cell_num, cell_size * cell_num))
bg.fill('white')
gold = pg.Color(221, 238, 81)
sea_foam = pg.Color(81, 238, 143)
pink = pg.Color(238, 145, 251)
gr33n = pg.Color(0, 255, 35)
blu = pg.Color(0, 236, 255)
colors_list = [gold, sea_foam, pink, gr33n, blu]
class Board:
def __init__(self):
self.x = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
self.y = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
def drawBoard(self):
for i in range(0,21):
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[0], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[1], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[2], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[3], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[4], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[5], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[6], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[7], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[8], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[9], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[10], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[11], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[12], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[13], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[14], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[15], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[16], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[17], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[18], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[19], cell_size, cell_size))
pg.draw.rect(disp, random.choice(colors_list), (self.x[i], self.y[20], cell_size, cell_size))
game = Board()
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
disp.blit(bg,(0,0))
game.drawBoard()
pg.display.update()
clock.tick(60)
试试这个:
n = 1
game = Board()
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
clock.tick(60)
while n == 1:
disp.blit(bg,(0,0))
game.drawBoard()
pg.display.update()
n -= 1
你每一帧都在生成新的颜色。您需要在开始时为每颗宝石生成一次颜色,然后使用它们绘制矩形。
class Board:
def __init__(self):
self.x = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
self.y = [0, 40, 80, 120, 160, 200, 240, 280, 320, 360, 400, 440, 480, 520, 560, 600, 640, 680, 720, 760, 800]
self.size = (21, 20)
#generate random color for every posible jewel on screen once
self.colors= [random.choice(colors_list) for i in range(self.size[0] * self.size[1])]
def drawBoard(self):
#go through every jwell position on board and draw them.
for x in range(self.size[0]):
for y in range(self.size[1]):
pg.draw.rect(disp, self.colors[y * self.size[0] + x], (self.x[x], self.y[y], cell_size, cell_size))