如何在 python 乌龟中进行平滑输入
How to make smooth inputs in python turtle
我正在尝试制作乒乓球游戏。在它里面,我想要一个带有输入的平滑移动的拨片(例如,按 w 它会向上移动而不移动一次,然后在按下键时重复)我希望它在按下键时开始重复。所以你一按这个键它就不会稍微颠簸起来然后开始移动,它会平稳地向上移动。
game: bool = True
win = turtle.Screen()
win.setup(width=800, height=600)
win.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=1)
paddle_a.penup()
paddle_a.goto(-350, 0)
# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("white")
paddle_b.shapesize(stretch_wid=5, stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)
# Functions
def paddle_a_up():
if paddle_a.ycor() + 70 < 300:
y = paddle_a.ycor()
y += 20
paddle_a.sety(y)
def paddle_a_down():
if paddle_a.ycor() - 70 > -300:
y = paddle_a.ycor()
y -= 20
paddle_a.sety(y)
def paddle_b_up():
if paddle_b.ycor() + 70 < 300:
y = paddle_b.ycor()
y += 20
paddle_b.sety(y)
def paddle_b_down():
if paddle_b.ycor() - 70 > -300:
y = paddle_b.ycor()
y -= 20
paddle_b.sety(y)
# Keyboard binding
win.listen()
win.onkeypress(paddle_a_up, "w")
win.onkeypress(paddle_a_up, "W")
win.onkeypress(paddle_a_down, "s")
win.onkeypress(paddle_a_down, "S")
win.onkeypress(paddle_b_up, "Up")
win.onkeypress(paddle_b_down, "Down")
while game:
win.update()
onkeypress
应该只设置全局或 class 变量即。 move_up = True
,
onkeyrelease
应该设置 move_up = False
,
在 while game
中,您应该检查 move_up
并移动桨。
我只为左桨做的。你必须对右桨做同样的事情。
我使用速度 2
而不是 20
因为现在它移动得太快了。
import turtle
game: bool = True
win = turtle.Screen()
win.setup(width=800, height=600)
win.tracer(0)
# Paddle A
paddle_a = turtle.Turtle()
paddle_a.speed(0)
paddle_a.shape("square")
paddle_a.color("blue")
paddle_a.shapesize(stretch_wid=5, stretch_len=1)
paddle_a.penup()
paddle_a.goto(-350, 0)
# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("red")
paddle_b.shapesize(stretch_wid=5, stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)
# default value at start
paddle_a.move_up = False
paddle_a.move_down = False
# Functions
def paddle_a_up_start():
paddle_a.move_up = True
def paddle_a_up_end():
paddle_a.move_up = False
def paddle_a_down_start():
paddle_a.move_down = True
def paddle_a_down_end():
paddle_a.move_down = False
def paddle_b_up():
if paddle_b.ycor() + 70 < 300:
y = paddle_b.ycor()
y += 20
paddle_b.sety(y)
def paddle_b_down():
if paddle_b.ycor() - 70 > -300:
y = paddle_b.ycor()
y -= 20
paddle_b.sety(y)
# Keyboard binding
win.listen()
win.onkeypress(paddle_a_up_start, "w")
win.onkeyrelease(paddle_a_up_end, "w")
win.onkeypress(paddle_a_up_start, "W")
win.onkeyrelease(paddle_a_up_end, "W")
win.onkeypress(paddle_a_down_start, "s")
win.onkeyrelease(paddle_a_down_end, "s")
win.onkeypress(paddle_a_down_start, "S")
win.onkeyrelease(paddle_a_down_end, "S")
win.onkeypress(paddle_b_up, "Up")
win.onkeypress(paddle_b_down, "Down")
while game:
if paddle_a.move_up:
if paddle_a.ycor() + 70 < 300:
y = paddle_a.ycor()
y += 2
paddle_a.sety(y)
if paddle_a.move_down:
if paddle_a.ycor() - 70 > -300:
y = paddle_a.ycor()
y -= 2
paddle_a.sety(y)
win.update()
我正在尝试制作乒乓球游戏。在它里面,我想要一个带有输入的平滑移动的拨片(例如,按 w 它会向上移动而不移动一次,然后在按下键时重复)我希望它在按下键时开始重复。所以你一按这个键它就不会稍微颠簸起来然后开始移动,它会平稳地向上移动。
game: bool = True
win = turtle.Screen()
win.setup(width=800, height=600)
win.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=1)
paddle_a.penup()
paddle_a.goto(-350, 0)
# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("white")
paddle_b.shapesize(stretch_wid=5, stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)
# Functions
def paddle_a_up():
if paddle_a.ycor() + 70 < 300:
y = paddle_a.ycor()
y += 20
paddle_a.sety(y)
def paddle_a_down():
if paddle_a.ycor() - 70 > -300:
y = paddle_a.ycor()
y -= 20
paddle_a.sety(y)
def paddle_b_up():
if paddle_b.ycor() + 70 < 300:
y = paddle_b.ycor()
y += 20
paddle_b.sety(y)
def paddle_b_down():
if paddle_b.ycor() - 70 > -300:
y = paddle_b.ycor()
y -= 20
paddle_b.sety(y)
# Keyboard binding
win.listen()
win.onkeypress(paddle_a_up, "w")
win.onkeypress(paddle_a_up, "W")
win.onkeypress(paddle_a_down, "s")
win.onkeypress(paddle_a_down, "S")
win.onkeypress(paddle_b_up, "Up")
win.onkeypress(paddle_b_down, "Down")
while game:
win.update()
onkeypress
应该只设置全局或 class 变量即。 move_up = True
,
onkeyrelease
应该设置 move_up = False
,
在 while game
中,您应该检查 move_up
并移动桨。
我只为左桨做的。你必须对右桨做同样的事情。
我使用速度 2
而不是 20
因为现在它移动得太快了。
import turtle
game: bool = True
win = turtle.Screen()
win.setup(width=800, height=600)
win.tracer(0)
# Paddle A
paddle_a = turtle.Turtle()
paddle_a.speed(0)
paddle_a.shape("square")
paddle_a.color("blue")
paddle_a.shapesize(stretch_wid=5, stretch_len=1)
paddle_a.penup()
paddle_a.goto(-350, 0)
# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("red")
paddle_b.shapesize(stretch_wid=5, stretch_len=1)
paddle_b.penup()
paddle_b.goto(350, 0)
# default value at start
paddle_a.move_up = False
paddle_a.move_down = False
# Functions
def paddle_a_up_start():
paddle_a.move_up = True
def paddle_a_up_end():
paddle_a.move_up = False
def paddle_a_down_start():
paddle_a.move_down = True
def paddle_a_down_end():
paddle_a.move_down = False
def paddle_b_up():
if paddle_b.ycor() + 70 < 300:
y = paddle_b.ycor()
y += 20
paddle_b.sety(y)
def paddle_b_down():
if paddle_b.ycor() - 70 > -300:
y = paddle_b.ycor()
y -= 20
paddle_b.sety(y)
# Keyboard binding
win.listen()
win.onkeypress(paddle_a_up_start, "w")
win.onkeyrelease(paddle_a_up_end, "w")
win.onkeypress(paddle_a_up_start, "W")
win.onkeyrelease(paddle_a_up_end, "W")
win.onkeypress(paddle_a_down_start, "s")
win.onkeyrelease(paddle_a_down_end, "s")
win.onkeypress(paddle_a_down_start, "S")
win.onkeyrelease(paddle_a_down_end, "S")
win.onkeypress(paddle_b_up, "Up")
win.onkeypress(paddle_b_down, "Down")
while game:
if paddle_a.move_up:
if paddle_a.ycor() + 70 < 300:
y = paddle_a.ycor()
y += 2
paddle_a.sety(y)
if paddle_a.move_down:
if paddle_a.ycor() - 70 > -300:
y = paddle_a.ycor()
y -= 2
paddle_a.sety(y)
win.update()