我是开发游戏的新手。在我以前把主要角色的运动放在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()
答案 0 :(得分:1)
我发现您的代码存在两个主要问题。
您在开始时初始化key_pressed
。这意味着它永远不会改变。将key_pressed
移动到主循环中并将该信息传递到drawMainCharacter()
以确保在按下某个键时检查每个帧
您在开始时初始化x
和y
,并且永远不会更新它。这将导致您的位置使用drawMainCharacter(x,y)
更新并绘制一帧。在下一个循环中,将传入开始x
和y
,角色将重新回到它的起始位置!我建议在角色对象中初始化x
和y
,而不是让主循环访问该信息。传递key_pressed并允许角色更新它的位置。循环不需要知道这个位置!