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