我正在尝试使用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))
显然此处还有其他代码,但我认为这与我的问题有关。
答案 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))。
然后检查以确保您的播放器没有走过屏幕边缘。