Как добавить ожидания между картинками - PullRequest
0 голосов
/ 01 июня 2019

Я хочу сделать две картинки, которые накладываются друг на друга после нажатия клавиши «w», чтобы создать анимацию ходьбы:

#Imports
import turtle
import time

#Registers Gifs
turtle.register_shape("ZeldaBackToolless1.gif")
turtle.register_shape("ZeldaBackToolless2.gif")

Zelda = turtle.Turtle()
Zelda.penup()


def move_up():
    if Waiting == True:
        time.sleep(.2)
        Zelda.shape("ZeldaBackToolless1.gif")
        Waiting = False
    else:
        time.sleep(.2)
        Zelda.shape("ZeldaBackToolless2.gif")
        Waiting = True



turtle.listen()
turtle.onkeypress(move_up, "w")

Если есть способ сделать логическое выражение в функции move_up() с помощью логического выражения, сохраняющего то состояние, в котором оно было ранее, я думаю, это будет прекрасно работать.

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Я чувствую, что и ваше решение, и решение @Prune являются необдуманными. Используя time.sleep(), вы блокируете другие события черепахи. Если это в конечном итоге предназначено как wait изображение, то последнее, что вы хотите сделать, это заблокировать то, что вы ожидаете. Это действительно должно вместо этого быть сделано с событиями таймера:

from turtle import Screen, Turtle

def walk():
    screen.onkeypress(None, "w")  # disable handler in handler

    def stop_walk():
        zelda.shape("image_2.gif")

        screen.onkeypress(walk, "w")  # restore event handler

    zelda.shape("image_1.gif")

    screen.ontimer(stop_walk, 200)  # in the future, in milliseconds

screen = Screen()

# Registers Gifs
screen.register_shape("image_1.gif")
screen.register_shape("image_2.gif")

zelda = Turtle()
zelda.penup()

screen.onkeypress(walk, "w")

screen.listen()
screen.mainloop()

Это позволит другим событиям черепахи продолжаться в течение периода ожидания.

0 голосов
/ 01 июня 2019

Как бы мне не хотелось это предлагать, на этом уровне программирования проще всего использовать глобальную переменную состояния:

waiting = True

def move_up():
    global waiting

    time.sleep(.2)
    if waiting:
        Zelda.shape("ZeldaBackToolless1.gif")
    else:
        Zelda.shape("ZeldaBackToolless2.gif")

    waiting = !waiting

Еще короче, вы можете использовать свой флаг в качестве индекса списка:

waiting = True

def move_up():
    global waiting
    display = ["ZeldaBackToolless1.gif", "ZeldaBackToolless2.gif"]

    waiting = !waiting
    time.sleep(.2)
    Zelda.shape(dislpay[waiting])
...