我是开发游戏的新手。在我以前将主要角色的运动放置在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()
中,以确保在按下键时检查每个帧
您在开始时初始化x
和y
,并且从不对其进行更新。这将导致您的位置更新并使用drawMainCharacter(x,y)
绘制单个帧。在下一个循环中,开始的x
和y
将被传入,字符将回到其开始位置!我建议在字符对象内初始化x
和y
,而不是让主循环访问该信息。传递key_pressed并允许角色更新其位置。不需要循环就知道这个位置!