игроки не двигаются одновременно - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь сделать игру на питоне с модулем черепахи, у меня есть квадрат, движущийся к игроку (круг), и цель в том, чтобы круг перепрыгнул через квадрат и не получил удар.
игрок может прыгать, нажимая пробел,
, но каждый раз, когда вы нажимаете пробел, чтобы прыгать, игрок прыгает, но квадрат перестает двигаться, и вы не можете перепрыгнуть.
вот мой код:

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 () в конце

1 Ответ

0 голосов
/ 27 августа 2018

Как указано выше, ваш код вообще не работает, так как 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()
...