0

这是一个有点奇怪的问题,但我有一个海龟游戏,我希望每次用户按下向上箭头键时,海龟都会移动,但如果你按住它,它不会继续移动。有没有办法用乌龟做到这一点?EG:onkeyrelease 或 onkeypress,以便它只执行一次所需的功能,直到您再次单击该键才再次执行?

4

2 回答 2

0

当您制作游戏并希望用户即使一直按下键也只移动一次,您应该在任何编程语言中使用 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()
于 2020-04-05T20:20:03.220 回答
0

我尝试了@SaymoinSam 的大量onkeyrelease()示例,但它们对我不起作用。我相信问题是操作系统实现了键重复,你不能直接从 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')设置另一个射击

于 2020-04-10T01:30:05.187 回答