Python pygame:尝试使用;面积“;在Surface.blit()中标记
我试图弄明白如何使用面积参数,一个人可以通过当光碟pygame表面。 在摄影机跟随角色的位置拍摄等轴测rpg视图 只要我的播放器停留在起始屏幕边界内,我的代码就可以正常工作,但一旦我们退出,播放器就会被删除。你能帮我找出我遗漏了什么吗Python pygame:尝试使用;面积“;在Surface.blit()中标记,python,pygame,camera,blit,Python,Pygame,Camera,Blit,我试图弄明白如何使用面积参数,一个人可以通过当光碟pygame表面。 在摄影机跟随角色的位置拍摄等轴测rpg视图 只要我的播放器停留在起始屏幕边界内,我的代码就可以正常工作,但一旦我们退出,播放器就会被删除。你能帮我找出我遗漏了什么吗 def run(fullmap): pygame.init() clock=pygame.time.Clock() screen = pygame.display.set_mode((400,400)) # - backgrou
def run(fullmap):
pygame.init()
clock=pygame.time.Clock()
screen = pygame.display.set_mode((400,400))
# - background -
fullmap_rect = fullmap.get_rect()
# - player -
player = pygame.Surface((100,100))
player.fill((255,255,255))
player_rect = player.get_rect()
player_rect.center = (200, 200)
# - camera -
camera = screen.get_rect()
camera.center = player_rect.center
# - game loop -
while 1:
clock.tick(25)
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
# - input management -
keys=pygame.key.get_pressed()
if keys[pygame.K_DOWN]:
player_rect.y += 10
camera.y += 10
if keys[pygame.K_LEFT]:
player_rect.x -= 10
camera.x -= 10
if keys[pygame.K_UP]:
player_rect.y -= 10
camera.y -= 10
if keys[pygame.K_RIGHT]:
player_rect.x += 10
camera.x += 10
# - screen repaint -
screen.fill((0,0,0))
screen.blit(fullmap, (0,0), camera)
screen.blit(player, player_rect, camera)
pygame.display.flip()
if __name__ == '__main__':
RED = (150, 50, 0)
GREEN = (0, 150, 5)
BLUE = (50, 0, 150)
COLORS = (RED, GREEN, BLUE)
TILE_SIZE = 10
fullmap = pygame.Surface((1000, 1000))
for y in range(0, 1000, TILE_SIZE):
for x in range(0, 1000, TILE_SIZE):
pygame.draw.rect(fullmap, random.choice(COLORS), (x, y, TILE_SIZE, TILE_SIZE))
run(fullmap)
我期待着跟随我的球员在整个地图上
谢谢你,祝你今天愉快 可选的
区域
参数表示源的较小部分。这对游戏地图很有用,但对玩家来说不是。您希望绘制完整的玩家图像,而不仅仅是其中的一部分。您必须计算播放器相对于相机的位置:
screen.blit(全图,(0,0),摄像头)
blit(player,(player_rect.x-camera.x,player_rect.y-camera.y))
但是,由于您的播放器位于屏幕中央,因此只需在屏幕中央绘制:
screen.blit(全图,(0,0),摄像头)
blit(player,player.get_rect(center=screen.get_rect().center))
嘿,拉比76。谢谢你的回答,它解决了我的问题!我并没有把我的角色在屏幕中间乱涂,因为在我的整个代码中,有时他不是。“我发现这样管理比较容易。”我明白了。谢谢,不客气。