1.图片精灵
因为在这个游戏当中看到的都是很漂亮的图形或图片。
这个首先都是由美工给开发出来各种图像的资源。
导入资源图片,加载到精灵。
定义一个pygame.sprite.Sprite.init(self)属性,
只是用这个Surface()创建了一个形状,普通图形。
这个self.image = pygame.Surface((50, 50)),要让它从磁盘上来加载一个真正的图片文件,这样可以看到的这个屏幕窗口上就是图片效果。
2.获取图片资源
首先获取图片有哪些渠道,通过科学上网,美工专门切图。
3.相对路径加载图片
如何把小人的图片加载到游戏当中呢?
我们要让 self.image = pygame.Surface((50, 50))这行代码发生变化,它要从文件当中,也就是当前项目的根目录下来加载.png的图片。
1.首先第一件事,需要得到资源图片的一个文件路径。
2.新建目录一个img的文件夹,然后把png图片资源都移动到img这个文件夹里头去。
3.获取图片的路径,不要使用绝对路径,采用相对路径。
4.首先得到当前代码文件它所在的路径,如何去获取?import OS,通过OS模块游戏的文件夹game_folder = os.path.dirname(file),这段得到的是当前这个player.py的文件。
game_folder 它所在的路径,得到这个路径之后是不是这个img跟这个png图片的路径是不是有一种相对关系。
找到这种相对关系,那我们图片的路径,就是这个我们得到的是Player.py所在的文件夹的路径。
plant_vs_zoomie_game所在文件夹,这个文件夹路径img_path = os.path.join()就是一个字符串拼接,用我们当前这个目录game_folder再加上一个‘img’目录,得到图片相对路径。
# 相对路径
game_folder = os.path.dirname(__file__)
# 字符串拼接
img_path = os.path.join(game_folder, 'img')
就是为了得到img文件夹下的png图片,在pygame里怎么把这个图片加载变成一个图像对象。
pygame里有个属性,然后里面有个load()方法,指定你要加载图片的路径。
convert_alpha()转变成一个透明图像。
player_img = pygame.image.load(os.path.join(img_path, 'R-C.png')).convert_alpha()
player_img图像对象属性,等于这个图片对象 self.image。
self.image = player_img
fill()也不再填充这个绿色
# self.image.fill(GREEN)
4.完整代码
import os
import pygame
WIDTH = 360
HEIGHT = 480
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
# 5.创建窗口标题
pygame.display.set_caption('plant_vs_zombies')
# 相对路径
game_folder = os.path.dirname(__file__)
# 字符串拼接
img_path = os.path.join(game_folder, 'img')
player_img = pygame.image.load(os.path.join(img_path, '1.png')).convert_alpha()
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
# self.image = pygame.Surface((50, 50))
self.image = player_img
self.rect = self.image.get_rect()
self.rect.center = (WIDTH / 2, HEIGHT / 2)
def update(self):
self.rect.x += 5
if self.rect.left > WIDTH:
self.rect.right = 0
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# 1.循环外定义精灵组,相当于定义了一个列表
all_sprites = pygame.sprite.Group()
# 2.创建精灵组player.py,调用player构造函数
Player = Player()
# 3.精灵添加到精灵组,传player
all_sprites.add(Player)
FPS = 60
clock = pygame.time.Clock()
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
all_sprites.update()
screen.fill(BLACK)
all_sprites.draw(screen)
pygame.display.flip()
5.运行效果

本篇博客主要讲解了如何在pygame中使用图片精灵。首先介绍了图片精灵的概念,然后阐述了获取图片资源的途径。接着,重点讲述了如何通过相对路径加载图片,包括创建img文件夹存放图片、获取代码文件路径并构建相对路径,最后利用pygame的load()方法将图片转化为图像对象。文章提供了完整的代码示例,并展示了运行效果。
64

被折叠的 条评论
为什么被折叠?



