Игра в понг — почему мяч не движется? (возможно, проблема со временем сна)

#python #python-3.x #debugging #turtle-graphics #python-turtle

Вопрос:

Поэтому я пытаюсь улучшить свои навыки работы на Python; Я сделал игру из учебника для создания классической игры понг. Однако в моем коде есть две основные проблемы, которые я не могу точно определить, что их вызывает.

Мяч не движется, что нехорошо, так как это важная функция игры. счетчик очков игрока два растет с экспоненциальной скоростью, как будто мяч, который не движется, прошел эту сторону игровой стены.

Мой код для шарика и ручки выглядит следующим образом. Я думаю, что это может быть связано со временем игрового цикла ( wn.update() ), но я совершенно потерялся. Я попытался замедлить игру, импортировав время ( time.sleep(0.09) ), но мне не повезло.

Я понятия не имею, почему счет обновляется, так как мяч не будет двигаться. это было в черепахе, а не в PyGame. Приведенный ниже код предназначен для игрового мяча и ручки.

 ball.speed(0)
ball.shape("circle")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.shapesize(stretch_wid=1.5)
ball.dx = 2
ball.dy = 2

pen = turtle.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()#So it does not draw lines.
pen.hideturtle()
pen.goto(0, 260)
pen.write(" Player One: 0 Player Two", align="center", font=("Courier", 24, "normal"))
 

И в моем основном игровом цикле у меня есть:

     wn.update()
    time.sleep(0.09)  # where 0.09 is the number of seconds (note milliseconds) 
                      # to do nothing for.
    # Moving the ball 
    ball.setx(ball.xcor()   ball.dx)
    ball.sety(ball.ycor()   ball.dy)
 

Комментарии:

1. вы должны использовать on_timer для периодического запуска функции — и эта функция должна перемещать мяч. И это не будет блокировать другой код.

Ответ №1:

Вы не должны использовать time.sleep() в turtle, потому что это останавливает всю игру и ее цикл событий, вместо этого используйте это:

 screen.ontimer(func_name, 2000) #ms
 

Комментарии:

1. Какое отношение pygame имеет этот вопрос к делу?

2. Спасибо, что, похоже, замедлило его, однако мяч все еще не движется.

3. Ваше приветствие, тогда это может быть еще один вопрос, касающийся движения, прежде чем остановиться с screen.ontimer