确定何时在Pygame中滚动背景

时间:2014-07-22 19:16:46

标签: python pygame

我正在尝试使用Pygame创建一个自上而下的游戏。我对Python的基本概念有了扎实的把握,但是我没有经验创建没有某​​种指令的程序。我已经决定使用一个相当大的地图,它在背景中滚动,角色保留在视图的中心,我已经完成了,但是当角色接近边缘时,我试图改变精灵行为。到目前为止地图都失败了。

我正在尝试更改精灵行为,因此背景边缘不会滚过窗口边缘,而是精灵开始在窗口内朝向背景边缘移动。我理解这可能不是很清楚,但是这里有一些代码来展示我到目前为止的尝试。

class Player(pygame.sprite.Sprite):
def __init__(self,*groups):
    super(Player,self).__init__(*groups)
    self.image = pygame.image.load('player.png')
    # Sets start position
    self.rect = pygame.rect.Rect((0,0),self.image.get_size())

#Logging player key presses
def update(self,dt):
    last = self.rect
    key = pygame.key.get_pressed()
    if key[pygame.K_LEFT]:
        self.rect.x += 300 * dt
    if key[pygame.K_RIGHT]:
        self.rect.x -= 300 * dt
    if key[pygame.K_UP]:
        self.rect.y += 300 * dt
    if key[pygame.K_DOWN]:
        self.rect.y -= 300 * dt

    new = self.rect
    self.groups()[0].camera_x = self.rect.x - 320
    self.groups()[0].camera_y = self.rect.y - 240
    # An attempt at stopping camera movement at edges and corners
    if last.x > -320 and new.x < -320:
        self.rect.x = -320
    if last.x < 320 and new.x > 320:
        self.rect.x = 320
    if last.y > -240 and new.y < -240:
        self.rect.y = -240
    if last.y < 240 and new.y > 240:
        self.rect.y = 240

这是播放器代码,这是Game类的一个片段。

class Game(object):
def main(self,screen):
    clock = pygame.time.Clock()

    background = pygame.image.load('background.png')
    sprites = ScrolledGroup()
    sprites.camera_x = 360
    sprites.camera_y = 240
    self.player = Player(sprites)

    while 1:
    . . .
    screen.blit(background, (sprites.camera_x,sprites.camera_y))

显然此处还有其他代码,但我认为这与我的问题有关。

1 个答案:

答案 0 :(得分:0)

您是否尝试过检查相机边界以及播放器边界?假设您的屏幕为640 x 480

即。移动相机后,看看它是否比您想要的更远:

self.groups()[0].camera_x = self.rect.x - 320
if self.groups()[0].camera_x < -320: #half the screen width, so we want the player to move towards this now
    self.groups()[0].camera_x = -320

基于边界对camera_y执行相同操作,对另一端执行相同的camera_x(SCREEN_WIDTH +(SCREEN_WIDTH / 2))。

然后检查以确保您的播放器没有走过屏幕边缘。