转向图片精灵
彩色矩形很好 - 它们是一个好的开始,并确保你的游戏基本工作,但迟早你会想要为你的精灵使用一个很酷的宇宙飞船图像或角色。这引出了第一个问题:在哪里获得游戏资源。
获取图片资源
当你需要为你的游戏添加图片资源时,你有3个选择:
自己制作
找一位美工为你制作
使用互联网上已有的图片资源
在本课中,将使用图像“p1_jump.png”:
管理游戏资源
首先,需要一个文件夹img来保存游戏资源,然后将图像放入其中。
要在游戏中使用此图像,需要让Pygame加载图片文件,这意味着需要程序知道文件的位置。根据使用的计算机类型,这可能会有所不同,希望能够在任何计算机上运行程序,因此需要导入一个名为os的Python库。
import pygame
import random
import os
# set up asset folders
game_folder = os.path.dirname(__file__)
特殊的Python变量__file__指的是当前代码文件所在的文件夹,函数os.path.dirname会获得该文件夹的路径。例如
/Users/chris/Documents/gamedev/tutorials/1-3 sprite example.py
如果使用的是Windows,路径可能如下所示:
C:\Users\chris\Documents\python\game.py
不同的操作系统使用不同的方式来描述计算机上的位置。通过使用os.path命令,可以让计算机找出正确的路径。
import pygame
import random
import os
# set up asset folders
game_folder = os.path.dirname(__file__)
img_folder = os.path.join(game_folder, 'img')
player_img = pygame.image.load(os.path.join(img_folder, 'p1_jump.png')).convert()
现在已经加载了图像,pygame.image.load()并且已经确保使用convert(),这将通过将图像转换为在屏幕上绘制更快的格式来加速Pygame的绘制。现在准备用精美的玩家图片形象替换精灵中的普通绿色方块:
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = player_img
self.rect = self.image.get_rect()
self.rect.center = (WIDTH / 2, HEIGHT / 2)
请注意,已经删除了命令self.image.fill(GREEN)- 不再需要填充纯色。
现在,如果你运行该程序,你应该看到一个漂亮的小卡通外星人在屏幕上运行。但是遇到了一个问题:
目前无法看到,因为背景目前是黑色的。
用screen.fill(BLUE)将背景改为蓝色。现在可以看到问题:
当您在计算机上有图像文件时,该文件始终是矩形像素网格。无论你绘制什么样的形状,仍然会有像素边框填充图像的“背景”。需要做的是告诉Pygame忽略不关心的图像中的像素。在此图像中,这些像素恰好是黑色,因此可以添加以下内容:
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = player_img
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
self.rect.center = (WIDTH / 2, HEIGHT / 2)
set_colorkey()只是告诉Pygame,当绘制图像时,要忽略指定颜色的任何像素。现在图像看起来好多了: