#python #function #onclick #python-turtle
Вопрос:
Я довольно новичок в кодировании на python, поэтому я очень смущен. В настоящее время я работаю над игрой типа кликера для печенья. Вот код до сих пор.
import turtle as t
#screen
wn = t.Screen()
wn.bgcolor("DarkSlateGray")
wn.setup(width=1366, height=768)
#clicks
clicks = 0
#square
sq = t.Turtle()
sq.speed(0)
sq.shape("square")
sq.color("coral2")
sq.shapesize(stretch_wid=5, stretch_len=5)
sq.penup()
sq.goto(0,0)
#pen
pen = t.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 270)
pen.write("Times clicked: 0", align="center", font=("Comic Sans MS", 24, "normal"))
#click function
def getclick(sq, clicks):
clicks = 1
pen.clear()
pen.write("Times clicked: {}".format(clicks), align="center", font=('Comic Sans MS', 24, 'normal'))
#click detection
wn.listen()
sq.onclick(getclick)
Функция «getclick» должна увеличить количество «кликов» на 1, а затем остальная часть функции записывает новое количество кликов. Однако, когда я тестирую этот код, число увеличивается не на 1, а на случайную величину где-то между -49,0 и 49,0. Например, я запущу программу, а затем щелкну черепаху, и число увеличится до -29,0, а затем снова до 34,0, но если я снова нажму на нее, она ничего не сделает.
Комментарии:
1. Вероятно, он рассматривает один клик как много кликов
Ответ №1:
Есть некоторые проблемы в использовании sq.onclick(getclick)
. Из документации черепахи: Подпись turtle.onclick
is
turtle.onclick(fun, btn=1, add=None) Parameters fun – a function with two arguments which will be called with the coordinates of the clicked point on the canvas
Таким образом, координаты x, y вашего клика передаются в вашу getclick
функцию, и вы печатаете координаты y ваших кликов (примерно от -49,0 до 49,0). Параметр функции clicks
также делает не то , что вы ожидаете: он просто затеняет глобальный clicks
и не изменяет его.
Более правильной версией является:
def getclick(x, y):
global clicks
clicks = 1
pen.clear()
pen.write("Times clicked: {}".format(clicks), align="center", font=('Comic Sans MS', 24, 'normal'))