【发布时间】:2020-04-18 20:30:41
【问题描述】:
我试图记住以前的图纸来实现 Ctrl-Z(撤消)和(重做)。为此,我使用集合中的堆栈(deque),我还创建了一个名为 DrawEntity 的对象,它具有矩形列表(pygame 类)的属性,因为我不想保存 every 我绘制的像素,但只有一个“笔触”而不是构成他的组件(小 ractangles 笔触)但是,我不知道如何插入到主 DrawEntity 列表中,这会将这些实体保存在每个笔触的队列,而不是每个矩形的队列。这是我到目前为止所拥有的:
main.py:
import pygame as pg
from collections import deque
from DrawEntity import DrawEntity
DrawEnt = deque()
def draw(window):
d_Ent = DrawEntity()
mouseX, mouseY = pg.mouse.get_pos()
click = pg.mouse.get_pressed()
if click[0]:
rect = pg.draw.rect(window, (0, 0, 0), pg.Rect(mouseX, mouseY, 3, 3), 3)
d_Ent.add(rect)
if d_Ent.entity:
print("new Entity")
print(d_Ent)
DrawEnt.append(d_Ent)
def main():
running = True
window = pg.display.set_mode((640, 480))
window.fill((255, 255, 255))
while running:
clock.tick(3200)
for event in pg.event.get():
if event.type == pg.QUIT:
running = False
if event.type == pg.KEYDOWN:
if event.key == pg.K_z and pg.key.get_mods() & pg.KMOD_LCTRL:
print(len(DrawEnt))
draw(window)
pg.display.flip()
#end main loop
pg.quit()
if __name__ == '__main__':
pg.init()
clock = pg.time.Clock()
main()
还有 DrawEntity.py :
class DrawEntity:
def __init__(self):
self.entity = []
def add(self, toAdd):
self.entity.append(toAdd)
def remove(self):
self.entity = []
def __str__(self):
return ' '.join(map(str, self.entity))
基本上,我想进入一个 while 循环并留在那里,而我一直单击,以便将所有矩形收集到列表中,然后将其附加到主实体列表中,但是这不会进入 while 循环,并且每个当我绘制它时,它会为每个新实体附加一个矩形而不是一系列矩形。 (如果我尝试使用 while 循环游戏会崩溃)
所以:
-1 点击时收集我目前绘制的所有矩形
1.1 如果我停止单击,则将带有矩形列表的新 d_Ent 附加到主实体列表(main.py 中第 5 行的 DrawEnt)
- 继续程序
- 如果我再次单击,转到 1
【问题讨论】:
标签: python graphics pygame draw