我试着用processing.py写了一个A* alg,但是我的代码开头有个问题:我的窗口完全是空白的
因此,我希望出现一个网格,等待用户单击某个单元格,然后用一个黑色矩形填充该单元格。但是,我只想让它在我代码的开头运行,所以我没有把它放在draw函数中。
下面是我的代码:
taille = 400
pas = taille // 20
def setup():
size(taille, taille)
background(255, 255, 255)
stroke(0)
strokeWeight(2)
frameRate(20)
for i in range(pas, taille, pas):
line(i, 0, i, taille)
line(0, i, taille, i)
drawRect()
def drawRect():
x, y = pressed()
for i in range(1, taille // pas - 1):
for j in range(1, taille // pas - 1):
if i * pas <= x and x <= (i + 1) * pas:
if j * pas <= y and y <= (j + 1) * pas:
rect(i * pas, j * pas, pas, pas)
def pressed():
while True:
if mousePressed:
return (mouseX, mouseY)
我高度怀疑错误来自drawRect函数,因为我设法在添加网格之前显示它。
发布于 2018-10-25 03:29:57
所以,我希望出现一个网格,等待用户点击一个单元格,然后用一个黑色矩形填充那个单元格。但是,我只想让它在我代码的开头运行,所以我没有把它放在draw函数中。
无论如何,我建议使用draw
函数,根据程序的当前状态连续绘制场景。
请注意,您的程序会在无限循环中挂起。变量mousePressed
、mouseX
和mouseY
永远不会更新。这些变量不会神奇地改变它们的状态。它们在2帧之间更改状态,在执行draw
函数后,处理进行事件处理并更改内置变量。你没有给Processing任何做这项工作的机会。
创建to变量,它注意到“click”的x和y窗口坐标:
enter_x = -1
enter_y = -1
实现mousePressed
事件以接收"click":
def mousePressed():
global enter_x, enter_y
if enter_x < 0 or enter_y < 0:
enter_x = mouseX
enter_y = mouseY
如果draw function
中的“单击”坐标有效(>= 0
),则将黑色矩形绘制到
def draw():
global enter_x, enter_y
if enter_x >= 0 and enter_y >= 0:
stroke(0)
fill(0)
ix = enter_x // pas
iy = enter_y // pas
rect(ix * pas, iy * pas, pas, pas)
完整的代码可能如下所示:
taille = 400
pas = taille // 20
def setup():
size(taille, taille)
background(255, 255, 255)
stroke(0)
strokeWeight(2)
frameRate(20)
for i in range(pas, taille, pas):
line(i, 0, i, taille)
line(0, i, taille, i)
enter_x = -1
enter_y = -1
def mousePressed():
global enter_x, enter_y
if enter_x < 0 or enter_y < 0:
enter_x = mouseX
enter_y = mouseY
def draw():
global enter_x, enter_y
if enter_x >= 0 and enter_y >= 0:
stroke(0)
fill(0)
ix = enter_x // pas
iy = enter_y // pas
rect(ix * pas, iy * pas, pas, pas)
注意,可能还需要在draw
函数中绘制网格。一般来说,每一帧都重新绘制场景要比“撤消”已绘制的内容要好。
https://stackoverflow.com/questions/52976169
复制相似问题