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