Есть ли у черепахи функция нажатия клавиш, которая повторяет функцию только один раз? - PullRequest
0 голосов
/ 05 апреля 2020

Это немного странный вопрос, но у меня есть игра в черепаху, в которой я хочу, чтобы каждый раз, когда пользователь нажимал клавишу со стрелкой вверх, черепаха двигалась, но не продолжала двигаться, если удерживать ее нажатой. Есть ли способ сделать это с черепахой? Например: onkeyrelease или onkeypress, так что он выполняет нужную функцию только один раз, а не снова, пока вы снова не нажмете клавишу?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Когда вы создаете игры и хотите, чтобы пользователь двигался только один раз, даже если он продолжает нажимать клавишу, вы должны использовать событие onkeyrelease на любом языке программирования.

модуль turtle имеет свои собственные события, вы не Не нужно импортировать любой другой модуль.

Вот простой пример

import turtle

m = turtle.Turtle()

def step():
  m.forward(50)

window = turtle.Screen()
window.onkeyrelease(step, "Right")
window.listen()
window.mainloop()

И здесь я сделал это для удовольствия, вы должны попробовать это:)

import turtle

t = turtle.Turtle()
step = 25
t.speed(0)

# set the angles according to the mode
t_angles = [180, 0, 90, 270] if turtle.mode() == "standard" else [270, 90, 0, 180]
# standard mode | logo mode
# 0   -> east   | 0   -> north
# 90  -> north  | 90  -> east
# 180 -> west   | 180 -> south
# 270 -> south  | 270 -> west

def t_left():
  t.seth(t_angles[0])
  t.forward(step)

def t_right():
  t.seth(t_angles[1])
  t.forward(step)

def t_up():
  t.seth(t_angles[2])
  t.forward(step)

def t_down():
  t.seth(t_angles[3])
  t.forward(step)

def t_hide(a, b): t.penup()
def t_show(a, b): t.pendown()
def t_white(): t.color("white")
def t_red(): t.color("red")
def t_green(): t.color("green")
def t_blue(): t.color("blue")
def t_yellow(): t.color("yellow")
def t_default(): t.color("black")

window = turtle.Screen()
# press arrows to move around
window.onkeyrelease(t_right, "Right")
window.onkeyrelease(t_left, "Left")
window.onkeyrelease(t_up, "Up")
window.onkeyrelease(t_down, "Down")
# press these for changing color
window.onkeyrelease(t_white, "w")
window.onkeyrelease(t_red, "r")
window.onkeyrelease(t_green, "g")
window.onkeyrelease(t_blue, "b")
window.onkeyrelease(t_yellow, "y")
window.onkeyrelease(t_default, "d")
# press Esc to quit
window.onkeyrelease(window.bye, "Escape")
# press left button of the mouse to put the pen
window.onclick(t_show, 1)
# press right button of the mouse to hold the pen
window.onclick(t_hide, 3)
# listen to all the events
window.listen()
# keep the window open
window.mainloop()
0 голосов
/ 10 апреля 2020

Я попробовал обширные onkeyrelease() примеры @ SaymoinSam, но у меня они не сработали. Я полагаю, что проблема заключается в том, что операционная система реализует повтор ключа , и вы не можете победить это непосредственно из Python черепахи.

Альтернативный подход заключается в простом отключении обработчик события внутри обработчика события:

from turtle import Screen, Turtle

turtle = Turtle()

def step():
    screen.onkey(None, 'Right')
    turtle.forward(50)

screen = Screen()
screen.onkey(step, 'Right')
screen.listen()
screen.mainloop()

Это сработает один раз и только один раз. Если вы хотите перевооружить , просто повторите screen.onkey(step, 'Right'), чтобы настроить еще один один выстрел .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...