我的 Pong 游戏中的球拍在 Python 3.11 Turtle Graphics 上按下按键后不移动

问题描述 投票:0回答:1

主要.py:

from turtle import Screen
from Paddle import Paddle

#creating screen
screen = Screen()
screen.screensize(1000, 600)
screen.bgcolor('black')
screen.title('Pong')
screen.tracer(0)

#paddle objects: rPaddle is for the paddle in the right and lPaddle for the left one
rPaddle = Paddle((350, 0))     #the tuple is for the starting position of the paddle object
lPaddle = Paddle((-350, 0))

#screen listeners
screen.listen()
screen.onkey(lPaddle.up, 'w')
screen.onkey(lPaddle.down, 's')
screen.onkey(rPaddle.up, 'Up')
screen.onkey(rPaddle.down, 'Down')

game_on = True
while game_on:
    screen.update()


screen.exitonclick()

桨.py:

from turtle import Turtle


class Paddle(Turtle):

    def __init__(self, starting_coords): #creates the paddles
        super().__init__()
        self.paddle = Turtle("square")
        self.paddle.color('white')
        self.paddle.shapesize(5, 1)
        self.paddle.penup()
        self.paddle.goto(starting_coords)

    def up(self):
        new_y = self.paddle.ycor() + 40 #makes the paddle move 40 pixels up
        self.goto(self.xcor(), new_y)
        print("up")

    def down(self):
        new_y = self.paddle.ycor() - 40 # moves the paddle 40 pixels down
        self.goto(self.xcor(), new_y)
        print('down')

我留下了一些打印语句以确保按键被按下,但即使显示打印语句,桨仍然不会移动,所以我在遵循教程时对该怎么做感到非常困惑。

python turtle-graphics python-turtle pong python-3.11
1个回答
0
投票

奇怪的是,您对 Turtle 进行了子类化,并且还创建了一个 Turtle 实例作为成员。这会造成混乱:您在屏幕上显示

self.paddle
,然后使用
self.goto()
进行移动。这是一只完全不同的乌龟!您可能的意思是:
self.paddle.goto()

请参阅如何在 python 中创建从turtle模块继承的子类,了解为什么不应该子类化turtle的更多原因(如果这还不够证据)。

顺便说一句,

while game_on:
尽可能地猛烈攻击 CPU,从而提供不可移植的帧速率——快的机器运行得快,慢的机器运行得慢。最好使用
ontimer
来运行事件循环。 这是一个例子

© www.soinside.com 2019 - 2024. All rights reserved.