Переместите объект в зависимости от того, где находится ваш курсор

#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()