在用python编写的游戏中,键不会移动对象

2024-04-23 09:58:18 发布

您现在位置:Python中文网/ 问答频道 /正文

更新:manish kumar给了我这个问题的解决方案。我不得不写信事件.key而不是事件类型在代码的某个部分。 请在下面查看:

for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            crashed = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change = -5
            elif event.key == pygame.K_RIGHT:
                x_change = 5

我想用Pygame做一个简单的游戏。 简单地说,我已经编写了代码来移动汽车的左右。 除了钥匙不能移动汽车外,一切正常。你知道吗

代码如下:

import pygame
from pygame.locals import *
pygame.init() 

black = (0,0,0)
white = (255,255,255)

GD1 = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Racing!") 
clock = pygame.time.Clock() 

carimg = pygame.image.load("C:/Users/Abdulaziz/Downloads/my_app___car_sprite_5_by_nicolaspok-d65xysp.png")

def car(x,y):
    GD1.blit(carimg,(x,y))

x = (800 * 0.45)
y = (600 * 0.7)

x_change = 0

crashed = False 

while not crashed: 

    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            crashed = True

        if event.type == pygame.KEYDOWN:
            if event.type == pygame.K_LEFT:
                x_change = -5
            elif event.type == pygame.K_RIGHT:
                x_change = 5


        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
               x_change = 0

    x += x_change

    GD1.fill(white)
    car(x,y)



    pygame.display.flip() 
    clock.tick(60) 
pygame.quit()
quit()

问题可能出在代码的这一部分:

if event.type == pygame.KEYDOWN:
            if event.type == pygame.K_LEFT:
                x_change = -5
            elif event.type == pygame.K_RIGHT:
                x_change = 5


        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
               x_change = 0

再次,汽车出现,但不移动。你知道吗


Tags: key代码righteventiftypedisplaychange
2条回答

我认为问题在于:

for event in pygame.event.get(): 
    # modifications to x_change

x += x_change

如果对pygame.event.get()的调用返回两个事件,一个KEYDOWN和一个KEYUP,那么x_change将被设置为5或-5,但随后它将被设置回0。你知道吗

您应该在每次迭代时更新x

for event in pygame.event.get(): 
    # modifications to x_change

    x += x_change

你必须使用事件.key而不是事件类型. 你知道吗

if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            x_change = -5
        elif event.key == pygame.K_RIGHT:
            x_change = 5


    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
           x_change = 0

相关问题 更多 >