Processing.py пустое окно проблема - PullRequest
0 голосов
/ 24 октября 2018

Я пытался написать A * alg с использованием processing.py, но у меня возникла проблема с началом кода: мое окно совершенно пустое

Итак, я хочу, чтобы сетка появлялась в ожидании пользователящелкнуть по ячейке, а затем заполнить эту ячейку черным прямоугольником.Но я хочу, чтобы это выполнялось только в начале моего кода, поэтому я не поместил его в функцию рисования.

Вот мой код:

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, так как мне удалось отобразить сетку перед ее добавлением.

1 Ответ

0 голосов
/ 24 октября 2018

Итак, я хочу, чтобы отображалась сетка, ожидающая, когда пользователь щелкнет ячейку и затем заполнит эту ячейку черным прямоугольником.Но я хочу, чтобы это выполнялось только в начале моего кода, поэтому я не включил его в функцию рисования.

В любом случае, я рекомендую использовать функцию draw, чтобы непрерывно рисоватьсцена зависит от текущего состояния вашей программы.

Обратите внимание, ваша программа зависает в бесконечном цикле.Переменные mousePressed, mouseX и mouseY никогда не обновляются.Эти переменные не изменяют свое состояние магическим образом.Они изменяют свое состояние между 2 кадрами, после выполнения функции draw Обработка выполняет обработку событий и изменяет встроенные переменные.Вы не предоставляете Обработка никаких шансов сделать эту работу.

Создать в переменные, которые отмечают координаты окна 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 

Нарисуйте черный прямоугольник, если координаты "щелчка" действительны (>= 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.В общем, лучше перерисовывать сцену каждый кадр, чем «отменить» то, что было нарисовано.

...