我尝试使用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函数,因为我在添加网格之前设法显示了网格。
答案 0 :(得分:2)
因此,我希望出现一个网格,等待用户单击某个单元格,然后用黑色矩形填充该单元格。但是,我只希望它在我的代码开头运行,所以我没有将它放在draw函数中。
无论如何,我建议使用draw
函数,以根据程序的当前状态连续绘制场景。
请注意,您的程序会陷入无限循环。变量mousePressed
,mouseX
和mouseY
从未更新。此变量不会神奇地更改其状态。在执行draw
函数后,它们会在2帧之间更改状态。处理进行事件处理并更改内置变量。您不会给处理做任何工作的机会。
创建为变量,该变量会注意到“点击”的x和y窗口坐标:
enter_x = -1
enter_y = -1
实施mousePressed
事件以接收“点击”:
def mousePressed():
global enter_x, enter_y
if enter_x < 0 or enter_y < 0:
enter_x = mouseX
enter_y = mouseY
如果{click}坐标在>= 0
中有效(draw function
),则将黑色矩形绘制到上:
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
函数中绘制网格。通常,最好是每帧重绘场景,而不是“撤消”已绘制的内容。