我是开发游戏的新手。在我以前将主要角色的运动放置在while循环中之前,它工作得很好。现在,我正在尝试为maincharacter创建一个Class,如在下面的代码中可以看到的(有人告诉我这样做更好,因为该冲突将更易于编程,并且不会造成混乱)。但是,我无法使角色移动(包括相机)。请告诉我我在做什么错。我很确定这是一个小错误,我无法弄清楚。

这只是我游戏的一部分。但是我只想让您看看我如何处理主要角色。这部分代码应显示主要角色的背景和图像,然后在按下箭头键(包括照相机)后,主要角色应会四处移动。

import pygame

pygame.init()
gameDisplay = pygame.display.set_mode((800,600))
pygame.display.set_caption("No Name")
clock = pygame.time.Clock()
pygame.key.set_repeat(1, 1)
Background = pygame.image.load('desert.png')
mainCharacterImage = pygame.image.load('main character (front).png')

x = 626
y = 384
CameraX = x-400
CameraY = y-300
key_pressed = pygame.key.get_pressed()



class mainCharacter():
    def __init__(self, x, y, CameraX, CameraY):
        self.rect = pygame.Rect(x-CameraX,y-CameraY,30,30)

    def drawMainCharacter(self, event, x, y, CameraX, CameraY, mainCharacterImage):
        if key_pressed[pygame.K_LEFT]:
            x -= 2
            CameraX -= 2
        if key_pressed[pygame.K_RIGHT]:
            x += 2
            CameraX += 2
        if key_pressed[pygame.K_UP]:
            y -= 2
            CameraY -= 2
        if key_pressed[pygame.K_DOWN]:
            y += 2
            CameraY += 2

        gameDisplay.blit(mainCharacterImage,(x - CameraX, y - CameraY))


Exit = False

while (not Exit):

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            Exit = True
    mainCharacterCoordinates = mainCharacter(x,y,CameraX,CameraY)
    mainCharacterCoordinates.drawMainCharacter(event,x,y,CameraX,CameraY,mainCharacterImage)
    gameDisplay.blit(Background,(-2000 - CameraX, -600 - CameraY))
    pygame.display.update()
    clock.tick(60)


pygame.quit()
quit()

最佳答案

我发现您的代码有两个主要问题。


您首先要初始化key_pressed。这意味着它将永远不会改变。将key_pressed移到主循环中,并将该信息传递到drawMainCharacter()中,以确保在按下键时检查每个帧
您在开始时初始化xy,并且从不对其进行更新。这将导致您的位置更新并使用drawMainCharacter(x,y)绘制单个帧。在下一个循环中,开始的xy将被传入,字符将回到其开始位置!我建议在字符对象内初始化xy,而不是让主循环访问该信息。传递key_pressed并允许角色更新其位置。不需要循环就知道这个位置!

10-01 19:58
查看更多