首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Processing.py空白窗口问题

Processing.py空白窗口问题
EN

Stack Overflow用户
提问于 2018-10-25 02:57:51
回答 1查看 46关注 0票数 2

我试着用processing.py写了一个A* alg,但是我的代码开头有个问题:我的窗口完全是空白的

因此,我希望出现一个网格,等待用户单击某个单元格,然后用一个黑色矩形填充该单元格。但是,我只想让它在我代码的开头运行,所以我没有把它放在draw函数中。

下面是我的代码:

代码语言:javascript
复制
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函数,因为我设法在添加网格之前显示它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-25 03:29:57

所以,我希望出现一个网格,等待用户点击一个单元格,然后用一个黑色矩形填充那个单元格。但是,我只想让它在我代码的开头运行,所以我没有把它放在draw函数中。

无论如何,我建议使用draw函数,根据程序的当前状态连续绘制场景。

请注意,您的程序会在无限循环中挂起。变量mousePressedmouseXmouseY永远不会更新。这些变量不会神奇地改变它们的状态。它们在2帧之间更改状态,在执行draw函数后,处理进行事件处理并更改内置变量。你没有给Processing任何做这项工作的机会。

创建to变量,它注意到“click”的x和y窗口坐标:

代码语言:javascript
复制
enter_x = -1
enter_y = -1

实现mousePressed事件以接收"click":

代码语言:javascript
复制
def mousePressed():
global enter_x, enter_y
if enter_x < 0 or enter_y < 0:
    enter_x = mouseX
    enter_y = mouseY 

如果draw function中的“单击”坐标有效(>= 0),则将黑色矩形绘制到

代码语言:javascript
复制
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)

完整的代码可能如下所示:

代码语言:javascript
复制
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函数中绘制网格。一般来说,每一帧都重新绘制场景要比“撤消”已绘制的内容要好。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52976169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档