Почему моя привязка ключей turtle не отвечает?

#python #module #turtle-graphics #key-bindings

#python #модуль #черепаха-графика #привязки клавиш

Вопрос:

Я нахожусь в процессе модуляции своего кода для игры, которую я написал. Когда я модулировал класс player, я добавлял все дополнительные параметры / аргументы, чтобы его можно было разделить. Я сохранил привязку клавиш в основном игровом модуле.

Код привязки ключей выглядит следующим образом

 
turtle.listen()
a=turtle.onkey(player.go_left(walls), "Left")
b=turtle.onkey(player.go_right(walls), "Right")
c=turtle.onkey(player.go_up(walls), "Up")
d=turtle.onkey(player.go_down(walls), "Down")
e=turtle.onkey(player.headright(missile,lives), "d")
f=turtle.onkey(player.headleft(missile,lives), "a")
g=turtle.onkey(player.headdown(missile,lives),"s")
h=turtle.onkey(player.headup(missile,lives),"w")
i=turtle.onkey(player.headright(missile,lives),"D")
j=turtle.onkey(player.headleft(missile,lives), "A")
k=turtle.onkey(player.headdown(missile,lives),"S")
l=turtle.onkey(player.headup(missile,lives),"W")
o=turtle.onkey(player.drink(info),"space")
m=turtle.onkey(player.fireball(missile2,info,lives),"z")
n=turtle.onkey(player.fireball(missile2,info,lives),"Z")

  

Игра запускается без ошибок, но клавиши не реагируют на действие.

Вы можете найти код в

https://github.com/Ninedeadeyes/7-Dungeons-Deep/tree/master

Код привязки клавиш находится в игре (версия mod)

Все функции находятся внутри ‘player.py ‘

Любая помощь была бы отличной.

Комментарии:

1. Почему вы фиксируете возвращаемое значение из onkey переменных in? Это всегда None? Почему вы вызываете onkey и listen turtle обычно onkey вызывается screen ?

2. Я пытался что-то сделать, но даже если вы удалите переменные, это не будет иметь никакого значения. Как onkey, так и listen являются методами turtle.. Вы можете использовать что-то еще с этими методами, но если вы используете библиотеку turtle, это должно сработать.. Это работает, когда я написал игру в одном файле, но мне пришлось добавить дополнительные дополнения из-за модуляции кода. Если вы можете предоставить некоторые отзывы о том, что это должно быть, вместо turtle. onkey, я буду благодарен

3. Прочитав немного больше, я думаю, что могу добавить функцию только без аргументов, чтобы она работала docs.python.org/2/library/turtle.html#turtle . onkey

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

5. Поскольку вы не предоставили пример кода player.go_left(walls) etc., Я предположил, что он вернул соответствующий тип (т. Е. Функцию обратного вызова без параметров) — но да, это должна быть функция. Если на ваш вопрос по существу дан ответ, либо напишите хороший ответ и примите его, либо закройте вопрос.

Ответ №1:

Функция onkey разрешает только функцию без аргументов, поэтому невозможно использовать функции с аргументами, поэтому она не работает.

https://docs.python.org/2/library/turtle.html#turtle .onkey

Но… Если вы используете

черепаха.onkey((lambda:player.go_left(стены)), «Левый»)

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