玩家不同时移动
players not moving simultaneously
我正尝试在 python 中使用乌龟模块制作游戏,我让正方形向玩家(圆圈)移动,目的是让圆圈跳过正方形而不是得到命中.
玩家可以通过按 spacebar,
来跳跃
但是每次你按下 space 条来跳跃时,玩家就会跳跃,但是方块停止移动,你无法跳过。
这是我的代码:
import turtle
import time
wn = turtle.Screen()
wn.bgcolor("white")
wn.title("dinosaur run")
wn.tracer(1,20)
floor = turtle.Turtle()
floor.fd(370)
floor.bk(370*2)
floor.ht()
player = turtle.Turtle()
player.shape("circle")
player.penup()
player.setpos(-370,14)
def jump():
player.lt(90)
player.fd(40)
time.sleep(0.5)
player.bk(40)
player.rt(90)
turtle.listen()
turtle.onkey(jump, "space")
class cactus(turtle.Turtle):
turtle.shape("square")
turtle.penup()
turtle.speed(0)
turtle.setpos(370,14)
cactusspeed = 2
while True:
x = turtle.xcor()
x -= cactusspeed
turtle.setx(x)
非常感谢,
欢迎所有想法,
我在最后尝试了 wn.update()
如上所述,您的代码根本没有 运行,因为 cactusspeed
从未被定义。而且您的 class cactus
没有希望按当前布局工作(重读 Python 类。)最后,您的 while True:
在事件驱动的世界中没有业务像乌龟。
下面是我对您的代码进行的修改,使用 ontimer()
事件来独立于玩家控制仙人掌。我还消除了 sleep()
并简单地让玩家移动得更慢并跳得更高。我相信这应该能为您提供所需的动力:
from turtle import Turtle, Screen
def jump():
player.forward(100)
player.backward(100)
def move():
if cactus.xcor() < -screen.window_width()/2:
cactus.hideturtle()
cactus.setx(370)
cactus.showturtle()
else:
cactus.forward(cactusspeed)
screen.ontimer(move, 40)
screen = Screen()
floor = Turtle(visible=False)
floor.speed('fastest')
floor.fd(370)
floor.bk(370 * 2)
player = Turtle("circle", visible=False)
player.penup()
player.setpos(-370, 14)
player.setheading(90)
player.speed('slowest')
player.showturtle()
cactusspeed = 4
cactus = Turtle("square", visible=False)
cactus.speed('fastest')
cactus.penup()
cactus.setpos(370, 14)
cactus.setheading(180)
cactus.showturtle()
screen.onkey(jump, "space")
screen.listen()
move()
screen.mainloop()
我正尝试在 python 中使用乌龟模块制作游戏,我让正方形向玩家(圆圈)移动,目的是让圆圈跳过正方形而不是得到命中.
玩家可以通过按 spacebar,
来跳跃
但是每次你按下 space 条来跳跃时,玩家就会跳跃,但是方块停止移动,你无法跳过。
这是我的代码:
import turtle
import time
wn = turtle.Screen()
wn.bgcolor("white")
wn.title("dinosaur run")
wn.tracer(1,20)
floor = turtle.Turtle()
floor.fd(370)
floor.bk(370*2)
floor.ht()
player = turtle.Turtle()
player.shape("circle")
player.penup()
player.setpos(-370,14)
def jump():
player.lt(90)
player.fd(40)
time.sleep(0.5)
player.bk(40)
player.rt(90)
turtle.listen()
turtle.onkey(jump, "space")
class cactus(turtle.Turtle):
turtle.shape("square")
turtle.penup()
turtle.speed(0)
turtle.setpos(370,14)
cactusspeed = 2
while True:
x = turtle.xcor()
x -= cactusspeed
turtle.setx(x)
非常感谢,
欢迎所有想法,
我在最后尝试了 wn.update()
如上所述,您的代码根本没有 运行,因为 cactusspeed
从未被定义。而且您的 class cactus
没有希望按当前布局工作(重读 Python 类。)最后,您的 while True:
在事件驱动的世界中没有业务像乌龟。
下面是我对您的代码进行的修改,使用 ontimer()
事件来独立于玩家控制仙人掌。我还消除了 sleep()
并简单地让玩家移动得更慢并跳得更高。我相信这应该能为您提供所需的动力:
from turtle import Turtle, Screen
def jump():
player.forward(100)
player.backward(100)
def move():
if cactus.xcor() < -screen.window_width()/2:
cactus.hideturtle()
cactus.setx(370)
cactus.showturtle()
else:
cactus.forward(cactusspeed)
screen.ontimer(move, 40)
screen = Screen()
floor = Turtle(visible=False)
floor.speed('fastest')
floor.fd(370)
floor.bk(370 * 2)
player = Turtle("circle", visible=False)
player.penup()
player.setpos(-370, 14)
player.setheading(90)
player.speed('slowest')
player.showturtle()
cactusspeed = 4
cactus = Turtle("square", visible=False)
cactus.speed('fastest')
cactus.penup()
cactus.setpos(370, 14)
cactus.setheading(180)
cactus.showturtle()
screen.onkey(jump, "space")
screen.listen()
move()
screen.mainloop()