#python #python-turtle
Вопрос:
Я сделал базовый понг, пройдя учебник и изменив несколько вещей, в настоящее время я хотел бы, чтобы левое весло, которое является переменной paddle_a
, перемещалось в зависимости от того, где находится курсор, сохраняя при этом значение x. Или, другими словами, перемещение вверх и вниз в зависимости от значения y мыши. Я поискал в Интернете и не смог найти ничего, что помогло бы мне в этом случае, так что помощь будет признательна.
import turtle wn = turtle.Screen() wn.title("Pong") wn.bgcolor("black") wn.setup(width=800, height=600) wn.tracer(0) # Paddle A paddle_a = turtle.Turtle() paddle_a.speed(0) paddle_a.shape("square") paddle_a.color("white") paddle_a.shapesize(stretch_wid=5, stretch_len=0.5) paddle_a.penup() paddle_a.goto(-380, 0) # Ball ball = turtle.Turtle() ball.speed(0) ball.shape("square") ball.color("white") ball.shapesize(stretch_len=0.75, stretch_wid=0.75) ball.penup() ball.goto(0, 0) ball.dx = 0.3 ball.dy = 0.3 # Functions def paddle_a_up(): y = paddle_a.ycor() y = 10 paddle_a.sety(y) def paddle_a_down(): y = paddle_a.ycor() y -= 10 paddle_a.sety(y) # Keybinding wn.listen() wn.onkeypress(paddle_a_up, "w") wn.onkeypress(paddle_a_down, "s") # Main game loop while True: wn.update() # Move the ball ball.setx(ball.xcor() ball.dx) ball.sety(ball.ycor() ball.dy) # Border checking if ball.ycor() gt; 290: ball.sety(290) ball.dy *= -1 if ball.ycor() lt; -290: ball.sety(-290) ball.dy *= -1 if ball.xcor() gt; 390: ball.goto(0, 0) ball.dx *= -1 if ball.xcor() lt; -390: ball.goto(0, 0) ball.dx *= -1
Комментарии:
1. Вы могли бы рассмотреть возможность использования pygame, которая довольно легко обрабатывает события мыши.
Ответ №1:
Вот простой подход, использующий ondrag()
событие мыши на весле вместо ключевых событий. Нажмите и удерживайте весло, перемещая его вверх и вниз. Шарик будет продолжать двигаться самостоятельно:
from turtle import Screen, Turtle # Functions def paddle_move(x, y): paddle_a.sety(y) screen = Screen() screen.title("Pong") screen.bgcolor("black") screen.setup(width=800, height=600) screen.tracer(0) # Paddle A paddle_a = Turtle() paddle_a.shape("square") paddle_a.color("white") paddle_a.shapesize(stretch_wid=5, stretch_len=0.5) paddle_a.penup() paddle_a.setx(-380) # Ball ball = Turtle() ball.shape("square") ball.color("white") ball.shapesize(stretch_len=0.75, stretch_wid=0.75) ball.penup() ball.dx = 1.3 # user defined properties ball.dy = 1.3 # Keybinding paddle_a.ondrag(paddle_move) # Main game loop def play(): # Move the ball ball.setx(ball.xcor() ball.dx) ball.sety(ball.ycor() ball.dy) # Border checking if ball.ycor() gt; 290: ball.sety(290) ball.dy *= -1 elif ball.ycor() lt; -290: ball.sety(-290) ball.dy *= -1 if not -390 lt;= ball.xcor() lt;= 390: ball.goto(0, 0) ball.dx *= -1 screen.update() screen.ontimer(play) play() screen.mainloop()