类中的pygame运动不起作用

时间:2016-02-04 23:17:38

标签: python class pygame game-physics

我是开发游戏的新手。在我以前把主要角色的运动放在while循环之前它完美地工作。现在我正在尝试为主角创建一个类,如下面的代码中所示(我被告知它更好,因为碰撞将更容易,并且编程更少杂乱)。但是,我无法移动角色(包括相机)。请告诉我我做错了什么。我很确定这是一个我无法弄清楚的小错误。

这只是我游戏的一部分。但我只是想让你看看我对主机运动的处理方式。代码的这一部分应该显示主机的背景和图像,然后在按下箭头键(包括摄像机)时,主字符应该移动。

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()

1 个答案:

答案 0 :(得分:1)

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

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

  2. 您在开始时初始化xy,并且永远不会更新它。这将导致您的位置使用drawMainCharacter(x,y)更新并绘制一帧。在下一个循环中,将传入开始xy,角色将重新回到它的起始位置!我建议在角色对象中初始化xy,而不是让主循环访问该信息。传递key_pressed并允许角色更新它的位置。循环不需要知道这个位置!