Как начать движение черепахи через пробел с питоном

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

Вот с чем я работаю:

from turtle import *


# PUT YOUR CODE HERE
setup(800,600)
home()
pen_size = 2
color("blue")
title("Turtle")
speed("fastest") 
drawdist= 25 
current_state = penup
next_state = pendown

#Button Instructions
def move_up():
        seth(90)
        forward(drawdist)

def move_down():
        seth(270)
        forward(drawdist)

def move_left():
        seth(180)
        forward(drawdist)

def move_right():
        seth(0)
        forward(drawdist)


def space_bar():
    seth(90)
    forward(drawdist)
    global current_state, next_state
    next_state()
    current_state, next_state = next_state, current_state

#Change Pen Color
def red():
        color("red")

def green():
        color("green")

def blue():
        color("blue")


#Button Triggers
s= getscreen()

s.onkey(move_up,"Up")

s.onkey(move_down,"Down")

s.onkey(move_left,"Left")

s.onkey(move_right,"Right")

s.onkey(space_bar,"space")

s.onkey(red,"r")

s.onkey(green,"g")

s.onkey(blue,"b")

listen()

done()

2 ответа

Я не вижу, чтобы вы когда-нибудь получили ответ на свой вопрос:

начните двигать черепаху нажатием клавиши пробела, и он продолжает двигаться, пока я снова не нажму клавишу пробела

Предлагаемый onkeypress() Fix не делает этого. Вот упрощенный пример, который делает то, что вы хотите, запускает черепашку, когда вы нажимаете клавишу пробела, и останавливает ее, когда вы снова нажимаете клавишу пробела:

from turtle import Turtle, Screen

screen = Screen()
turtle = Turtle(shape="turtle")
turtle.speed("fastest")

def current_state():
    global moving
    moving = False
    turtle.penup()

def next_state():
    global moving
    turtle.pendown()
    moving = True
    move()

def space_bar():
    global current_state, next_state
    next_state()
    current_state, next_state = next_state, current_state

def move():
    if moving:
        turtle.circle(100, 3)
        screen.ontimer(move, 50)

current_state()

screen.onkey(space_bar, "space")

screen.listen()

screen.mainloop()

Я использовал круговое движение в этом примере, чтобы вы могли запускать и останавливать черепаху столько, сколько хотите.

Замените функцию "onkey" на функцию "onkeypress".

Функция "onkey" срабатывает один раз, независимо от нажатия клавиши, в то время как "onkeypress" срабатывает так, как вы ожидаете, удерживая клавишу.

Правильный и самый простой способ - это (НЕ ДЛЯ ПРОБЕЛ СЛУШАНИЯ СОБЫТИЙ, ЭТО ПРОСТО СЛУШАТЕЛИ СОБЫТИЙ):

import turtle 
import random

t = turtle.Turtle()
screen = turtle.Screen(

def goForward():
  t.forward(input_value)

screen.onkey(goForward, "Forward")

Слово "право" в хэштегах означает только нажатие правой клавиши.

Другие вопросы по тегам