Turtle.onkeypress不工作(Python)

2024-05-18 17:52:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python很陌生,在Python学习课程中做了一些小游戏,但从来没有在家。所以最近我开始做一个游戏,但仅仅10分钟后我就发现了一个问题:

当我按“W”时什么也没发生,尽管我在键盘上输入了密码。 你自己看看:

(专为全屏设计)

import turtle

s = turtle.Screen()

g = turtle.Turtle()

t = turtle.Turtle()

#Ground

t.speed(0)

t.up()

t.goto(-1000,-200)

t.down()

t.goto(1000,-200)


#Player

g.speed(0)

PlayerX = -600

def moveX():

    g.clear()

    global PlayerX

    g.up()

    g.goto(PlayerX,-99)

    g.down()

    g.color("Slate Gray")

    g.begin_fill()

    g.circle(-50)

    g.end_fill()

    PlayerX = PlayerX - 1




turtle.onkeypress(moveX, "w")

moveX()

顺便说一句,我完全知道我没有做一个后退按钮。


Tags: 游戏密码键盘fill课程downspeed小游戏
3条回答

我想它叫onkey而不是onkeypress。 另外,我认为您需要聆听(如果您希望它运行,则添加一个mainloop):

turtle.onkey(moveX, "w")
turtle.listen()
moveX() # draw things first
turtle.mainloop()

您可能需要重新访问正在使用的数字,以确保形状在窗口上。

不确定是不是和Python3有关。但onkey函数似乎被拖到Screen()下面。

turtle.Screen().onkey(movex,“w”)

除了@doctorlove对添加listen()以允许窗口接收键盘事件的修正点(+1)之外,还有两条评论:

首先,用鼠标点击窗口使其处于活动状态,否则它不会响应键盘。其次,在事件处理程序中停用事件处理程序并在退出时重新激活它可能会有帮助,以避免在有人反复非常快地按键时出现问题。

下面是第二条评论以及其他一些代码建议:

from turtle import Turtle, Screen

screen = Screen()
screen.setup(1200, 500)

# Ground

ground = Turtle()
ground.speed('fastest')

ground.penup()
ground.goto(-1000, -200)
ground.pendown()
ground.forward(2000)

# Player

player = Turtle()
player.speed('fastest')

PlayerX = -600

def moveX():
    global PlayerX

    screen.onkeypress(None, "w")  # disable handler in handler
    player.clear()
    player.penup()
    player.goto(PlayerX, -99)
    player.pendown()
    player.color("Slate Gray")
    player.begin_fill()
    player.circle(-50)
    player.end_fill()

    PlayerX -= 1

    screen.onkeypress(moveX, "w")  # reenable handler

screen.listen()

moveX()

screen.mainloop()  # change import & use turtle.mainloop() if Python 2

不需要运行mainloop(),但是程序将在没有它的初始moveX()调用后退出。mainloop()将控制权移交给Tk事件处理程序,因此没有它,某些事件可能不会触发。

如果这是Python 2,则需要将onkeypress()更改为onkey(),并更改调用mainloop()的方式。

相关问题 更多 >

    热门问题