【问题标题】:turtle onkeypress() does not respond乌龟 onkeypress() 没有响应
【发布时间】:2020-09-08 11:16:44
【问题描述】:

我正在创建一个游戏,但是当我按向上或向下箭头键时,没有任何反应。当我按下这些键时,乌龟并没有移动,而是在我运行代码时已经移动了。代码如下:

turtle_race.py:

from turtle import Screen
import elements

win = Screen()
win.setup(800, 600)
win.bgcolor("cyan")
win.title("Turtle Race")
win.tracer(0)

obj = elements.Objects()

win.onkeypress(obj.player_one_move(), "Up")
win.onkeypress(obj.player_two_move(), "Down")
win.listen()

while True:
    win.update()

这里是 elements.py:

from turtle import Turtle

class Objects:
    def __init__(self):
        self.player_one = Turtle("turtle")
        self.player_one_init()
        self.x1 = 0
        self.x2 = 0

        self.player_two = Turtle("turtle")
        self.player_two_init()

    def player_one_init(self):
        self.x1 = -200
        self.player_one.speed(5)
        self.player_one.color("red")
        self.player_one.penup()
        self.player_one.setx(self.x1)
        self.player_one.sety(150)

    def player_two_init(self):
        self.x2 = -200
        self.player_two.speed(5)
        self.player_two.color("green")
        self.player_two.penup()
        self.player_two.setx(self.x2)
        self.player_two.sety(-150)

    def player_one_move(self):
        x = self.player_one.xcor() + 35
        self.player_one.setx(x)

    def player_two_move(self):
        x = self.player_two.xcor() + 35
        self.player_two.setx(x)

【问题讨论】:

    标签: python python-3.x turtle-graphics python-turtle


    【解决方案1】:

    快速回答是你想传递这些方法,而不是调用它们:

    win.onkeypress(obj.player_one_move(), "Up")
    win.onkeypress(obj.player_two_move(), "Down")
    

    所以改为:

    win.onkeypress(obj.player_one_move, "Up")
    win.onkeypress(obj.player_two_move, "Down")
    

    这些方法将由其他人在以后调用。

    更长的答案是您完全误解了面向对象编程。您应该创建Player 类的两个实例,而不是操纵两个玩家的Objects 类实例。

    turtle_race.py:

    from turtle import Screen, mainloop
    import elements
    
    screen = Screen()
    screen.setup(800, 600)
    screen.bgcolor('cyan')
    screen.title("Turtle Race")
    
    player_1 = elements.Player('red', (-200, 150))
    player_2 = elements.Player('green', (-200, -150))
    
    screen.onkey(player_1.move, 'Up')
    screen.onkey(player_2.move, 'Down')
    screen.listen()
    
    mainloop()
    

    elements.py:

    from turtle import Turtle
    
    class Player:
        def __init__(self, color, position):
            self.player = Turtle('turtle')
            self.player.color(color)
            self.player.penup()
            self.player.setposition(position)
    
        def move(self):
            x = self.player.xcor() + 35
            self.player.setx(x)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 2022-08-02
      • 2017-08-09
      • 2023-02-26
      • 2013-07-29
      • 2023-03-20
      相关资源
      最近更新 更多