Python pygame类中角色的移动不起作用

Python pygame类中角色的移动不起作用,python,class,pygame,game-physics,Python,Class,Pygame,Game Physics,我是开发游戏的新手。以前我把主角的动作放在while循环中,效果很好。现在我正在尝试为主要角色创建一个类,如下面的代码所示(我被告知这样更好,因为冲突会更容易,编程也不那么混乱)。但是,我无法使角色移动(包括相机)。请告诉我我做错了什么。我敢肯定这是一个我无法理解的小错误 这只是我游戏的一部分。但我只是想让你们看看我对主角的动作做了什么。这部分代码应该显示主字符的背景和图像,然后当按下箭头键(包括相机)时,主字符应该四处移动 我发现您的代码存在两个主要问题 您可以在开始时按键初始化。这意味着它永

我是开发游戏的新手。以前我把主角的动作放在while循环中,效果很好。现在我正在尝试为主要角色创建一个类,如下面的代码所示(我被告知这样更好,因为冲突会更容易,编程也不那么混乱)。但是,我无法使角色移动(包括相机)。请告诉我我做错了什么。我敢肯定这是一个我无法理解的小错误

这只是我游戏的一部分。但我只是想让你们看看我对主角的动作做了什么。这部分代码应该显示主字符的背景和图像,然后当按下箭头键(包括相机)时,主字符应该四处移动


我发现您的代码存在两个主要问题

  • 您可以在开始时按键初始化
    。这意味着它永远不会改变。将按下的
    移动到主循环中,并将该信息传递到
    drawMainCharacter()
    中,以确保在按下键时检查每个帧

  • 您在开始时初始化
    x
    y
    ,但从不更新它。这将导致您的位置更新并使用
    drawMainCharacter(x,y)
    为单个帧绘制。在下一个循环中,将传入起始
    x
    y
    ,并且角色将弹回到起始位置!我建议在character对象中初始化
    x
    y
    ,而不要让主循环访问该信息。传递按下的键,并允许角色更新其位置。循环不需要知道这个位置

  • 我尝试了,但没有成功:(我在角色对象内部创建了坐标。我将按下的键放入循环中,然后将按下的键传递给函数。
    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()