Как начать двигать черепаху через пробел с помощью 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()

person Craig    schedule 27.04.2015    source источник
comment
Это ваш самый актуальный код? Когда я запускаю его и нажимаю пробел, ничего не происходит.   -  person Kevin    schedule 27.04.2015
comment
Я не вижу определения нескольких вызываемых функций, таких как seth(), color(), listen(), title() и т. д.   -  person mbomb007    schedule 27.04.2015
comment
ну, это последняя вариация, я внес некоторые изменения, пытаясь понять, что, по-видимому, сломало ее.   -  person Craig    schedule 27.04.2015
comment
Я отредактировал код. Теперь пространство должно вызвать движение.   -  person Craig    schedule 27.04.2015


Ответы (3)


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

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

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

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()

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

person cdlane    schedule 16.12.2016

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

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

person eezee    schedule 27.04.2015

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

import turtle 
import random

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

def goForward():
  t.forward(input_value)

screen.onkey(goForward, "Forward")

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

person Sanjay Poduval    schedule 28.05.2020