我正在用Python创建一个非常基本的幻想游戏。我有一个图像文件,我想成为世界地图,我有一个图像文件,是一个用于播放器在地图上的位置的图钉。到目前为止,我已经使用PIL将引脚粘贴到地图上。每当用户想要他/她的角色移动时,我都可以调用一个运行以下命令的函数,并使用新的地图图像更新游戏的gui:
world_map = Image.open('fantasy-world-1.jpg')
player_pin = Image.open('player_pin.jpg')
world_map.paste(player_pin, (x-coord, y-coord))
world_map.save('map_with_pin.png')
对我而言,这似乎不是最佳方式。
图钉位于白色背景上,白色背景也会粘贴,覆盖部分地图。有没有办法让背景或特定颜色透明?
或者使用pygame或其他模块有更简单的方法吗?
谢谢!
答案 0 :(得分:1)
这是一个简短的演示,说明如何在pygame中单击鼠标来移动对象。首先将对象的位置存储在变量中(此处称为pos
)。如果用户单击鼠标按钮,您将获取鼠标位置(event.pos
或pygame.mouse.get_pos()
)并将其分配给pos
变量以进行更新。然后,每帧只绘制背景和图像(本例中为arrow_img
),并使用pos
作为图钉的blit目的地。
import pygame as pg
pg.init()
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
BLUE = pg.Color('dodgerblue1')
background_img = pg.Surface(screen.get_size())
background_img.fill((30, 30, 30))
arrow_img = pg.Surface((54, 54), pg.SRCALPHA)
pg.draw.polygon(arrow_img, BLUE, [(0, 0), (27, 0), (0, 27)])
pg.draw.polygon(arrow_img, BLUE, [(10, 17), (17, 10), (52, 44), (44, 52)])
pos = (100, 100) # Position of the arrow.
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
elif event.type == pg.MOUSEBUTTONDOWN:
# Change the position of the arrow.
pos = event.pos
print(event.pos)
# Blit the background to clear the screen.
screen.blit(background_img, (0, 0))
# Blit the arrow.
screen.blit(arrow_img, pos)
pg.display.flip()
clock.tick(30)
pg.quit()