本文介绍了使键绑定适用于 Space Invaders 游戏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个教程来制作太空入侵者"以学习 Python,但我在绑定我的密钥时遇到了问题.无论我将 move_leftmove_right 函数改成什么键,飞船都不会移动,也没有错误可以追踪.

I'm doing a tutorial to make "Space Invaders" in order to learn Python but I'm encountering an issue in binding my keys. No matter what keys I change the move_left and move_right functions to, the spaceship doesn't move at all, and there is no error to trace it to either.

我曾尝试查看处理类似问题的论坛和 YouTube,但都没有奏效.

I have tried looking at forums that dealt with a similar issue, and YouTube, but none of them have worked at all.

#Modules
import turtle
#Screen

wn = turtle.Screen()
wn.bgcolor("black")
wn.title("Space invaders")

# Border
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("white")
border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()
border_pen.pensize(3)
for sides in range(4):
    border_pen.fd(600)
    border_pen.lt(90)
    border_pen.hideturtle()

# Create the player turtle
player = turtle.Turtle()
player.color("blue")
player.shape("triangle")
player.penup()
player.speed(0)
player.setposition(0, -250)
player.setheading(90)
playerspeed = 15

# move player left and right
def move_left():
    x = player.xcor()
    x -= playerspeed
    player.setx(x)
def move_right():
    x = player.xcor()
    x+=playerspeed
    player.setx(x)

# keyboard bindings

wn.onkey(move_left(), "Left")
wn.onkey(move_right(),"Right")
wn.listen()
turtle.mainloop()

当我按下向左"和向右"箭头键时,我希望玩家海龟向左和向右移动.

I expect the player turtle to move left and right when I press the "Left" and "Right" arrow keys.

推荐答案

问题出在这两行代码上:

The problem is with these two lines of code:

wn.onkey(move_left(), "Left")
wn.onkey(move_right(),"Right")

你不想调用move_left(),你想传递move_left在按键被按下时被事件处理程序调用:

You don't want to call move_left(), you want to pass move_left to be called by the event handler when the key is pressed:

wn.onkey(move_left, 'Left')
wn.onkey(move_right, 'Right')

通过包含括号,您传递了 move_left() 的返回值,即 None,有效地禁用事件而不是启用它!

By including the parentheses, you pass the return value of move_left() which is None, effectively disabling the event instead of enabling it!

这是使用上述修复程序重新编写的代码:

Here's a rework of your code with the above fix:

from turtle import Screen, Turtle

screen = Screen()
screen.bgcolor('black')
screen.title("Space invaders")

# Border
border_pen = Turtle()
border_pen.hideturtle()
border_pen.pensize(3)
border_pen.speed('fastest')
border_pen.color('white')

border_pen.penup()
border_pen.setposition(-300, -300)
border_pen.pendown()

for _ in range(4):
    border_pen.forward(600)
    border_pen.left(90)

# Create the player turtle
player = Turtle()
player.shape('triangle')
player.speed('fastest')
player.color('blue')
player.penup()

player.setposition(0, -250)
player.setheading(90)

playerspeed = 15

# Move player left and right
def move_left():
    x = player.xcor() - playerspeed
    player.setx(x)

def move_right():
    x = player.xcor() + playerspeed
    player.setx(x)

# Keyboard bindings
screen.onkey(move_left, 'Left')
screen.onkey(move_right, 'Right')

screen.listen()
screen.mainloop()

这篇关于使键绑定适用于 Space Invaders 游戏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-26 22:27