如何解决使用ontimer函数让两只乌龟同时移动
我一直在努力让两只海龟同时移动。要么一个动作要么都被冻结。我目前正在使用 ontimer() 函数,但仍然没有完全理解它。 游戏是如果你想知道基于 paperio 游戏但是两个玩家在同一个键盘和屏幕上互相对抗 我的代码:
from turtle import *
import turtle
p1f = True
p2f = True
title("1v1 Paperio")
p1move = Turtle()
p2move = Turtle()
t1 = Turtle()
t2 = Turtle()
screen = Screen()
def Setup1():
t1.pencolor("aquamarine")
t1.pensize(5)
t1.speed(10)
t1.fillcolor("light sea green")
t1.hideturtle()
t1.penup()
t1.goto(-200,-200)
t1.pendown()
t1.begin_fill()
for i in range(4):
t1.forward(50)
t1.left(90)
t1.end_fill()
p1move.penup()
p1move.goto(-175,-175)
p1move.pendown()
def Setup2():
t2.pencolor("crimson")
t2.pensize(5)
t2.speed(10)
t2.fillcolor("red")
t2.hideturtle()
t2.penup()
t2.goto(200,200)
t2.pendown()
t2.begin_fill()
for i in range(4):
t2.forward(50)
t2.left(90)
t2.end_fill()
p2move.penup()
p2move.goto(225,225)
p2move.pendown()
def p1setup():
p1move.pencolor("aquamarine")
p1move.pensize(5)
p1move.speed(10)
p1move.fillcolor("light sea green")
def p2setup():
p2move.pencolor("crimson")
p2move.pensize(5)
p2move.speed(10)
p2move.fillcolor("red")
# ycord
# heading
def p1moving():
def p1k1():
p1x1 = p1move.xcor()
p1y1 = p1move.ycor()
while p1f == True:
p1move.forward(1)
screen.ontimer(p1moving,1)
def p1k2():
p1move.left(90)
def p1k3():
p1move.right(90)
def p2moving():
def p2k1():
p2f = True
p2x2 = p2move.xcor()
p2y2 = p2move.ycor()
while p2f == True:
p2move.forward(1)
screen.ontimer(p2moving,1)
def p2k2():
p2move.left(90)
def p2k3():
p2move.right(90)
screen.listen()
screen.onkey(p1k1,"w")
screen.onkey(p1k2,"a")
screen.onkey(p1k3,"d")
screen.onkey(p2k1,"Up")
screen.onkey(p2k2,"Left")
screen.onkey(p2k3,"Right")
if __name__ == "__main__":
Setup1()
Setup2()
p1setup()
p2setup()
screen.mainloop()
解决方法
在您使用键和计时器事件函数之前,您的大部分代码似乎都是合理的——您有未使用的变量和不会被调用的函数。您在函数内部定义的函数尤其有问题。我已经重新编写了下面的代码以按照您的描述运行。我还做了一些速度优化,让它“玩”得更好:
from turtle import Screen,Turtle
def setup1():
base1.hideturtle()
base1.color("light sea green","aquamarine")
base1.pensize(5)
base1.penup()
base1.goto(-200,-200)
base1.pendown()
base1.begin_fill()
for _ in range(4):
base1.forward(50)
base1.left(90)
base1.end_fill()
pen1.color("light sea green","aquamarine")
pen1.pensize(5)
pen1.setheading(0)
pen1.penup()
pen1.goto(-175,-175)
pen1.pendown()
def setup2():
base2.hideturtle()
base2.color("red","pink")
base2.pensize(5)
base2.penup()
base2.goto(200,200)
base2.pendown()
base2.begin_fill()
for _ in range(4):
base2.forward(50)
base2.left(90)
base2.end_fill()
pen2.color("red","pink")
pen2.pensize(5)
pen2.setheading(180)
pen2.penup()
pen2.goto(225,225)
pen2.pendown()
def p1k1():
screen.onkey(None,'w')
def p1forward():
pen1.forward(1)
screen.update()
screen.ontimer(p1forward,10)
p1forward()
def p1k2():
pen1.left(90)
screen.update()
def p1k3():
pen1.right(90)
screen.update()
def p2k1():
screen.onkey(None,'Up')
def p2forward():
pen2.forward(1)
screen.update()
screen.ontimer(p2forward,10)
p2forward()
def p2k2():
pen2.left(90)
screen.update()
def p2k3():
pen2.right(90)
screen.update()
screen = Screen()
screen.title("1v1 Paperio")
screen.tracer(False)
base1 = Turtle()
pen1 = Turtle()
setup1()
base2 = Turtle()
pen2 = Turtle()
setup2()
screen.onkey(p1k1,'w')
screen.onkey(p1k2,'a')
screen.onkey(p1k3,'d')
screen.onkey(p2k1,'Up')
screen.onkey(p2k2,'Left')
screen.onkey(p2k3,'Right')
screen.update()
screen.listen()
screen.mainloop()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。