Pygame第1-3课:图片精灵

简介: Pygame第1-3课:图片精灵

转向图形精灵


彩色矩形很好 - 它们是一个好的开始,并确保你的游戏基本工作,但迟早你会想要为你的精灵使用一个很酷的宇宙飞船图像或角色。这引出了第一个问题:在哪里获得游戏资源。


获得图片资源


当你需要为你的游戏添加图片资源时,你有3个选择:

  1. 自己制作
  2. 找一位美工为你制作
  3. 使用互联网上已有的图片资源

在本课中,将使用图像“p1_jump.png”:

image.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)将背景改为蓝色。现在可以看到问题:


image.png

当您在计算机上有图像文件时,该文件始终是矩形像素网格。无论你绘制什么样的形状,仍然会有像素边框填充图像的“背景”。需要做的是告诉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,当绘制图像时,要忽略指定颜色的任何像素。现在图像看起来好多了:


image.png

整合到一起

# Pygame sprite Example
import pygame
import random
import os
WIDTH = 800
HEIGHT = 600
FPS = 30
# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# set up assets folders
# Windows: "C:\Users\chris\Documents\img"
# Mac: "/Users/chris/Documents/img"
game_folder = os.path.dirname(__file__)
img_folder = os.path.join(game_folder, "img")
class Player(pygame.sprite.Sprite):
    # sprite for the Player
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(os.path.join(img_folder, "p1_jump.png")).convert()
        self.image.set_colorkey(BLACK)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)
        self.y_speed = 5
    def update(self):
        self.rect.x += 5
        self.rect.y += self.y_speed
        if self.rect.bottom > HEIGHT - 200:
            self.y_speed = -5
        if self.rect.top < 200:
            self.y_speed = 5
        if self.rect.left > WIDTH:
            self.rect.right = 0
# initialize pygame and create window
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
# Game loop
running = True
while running:
    # keep loop running at the right speed
    clock.tick(FPS)
    # Process input (events)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False
    # Update
    all_sprites.update()
    # Draw / render
    screen.fill(BLUE)
    all_sprites.draw(screen)
    # *after* drawing everything, flip the display
    pygame.display.flip()
pygame.quit()


目录
相关文章
|
12月前
|
Python
python及pygame雷霆战机游戏项目实战02 敌人精灵
python及pygame雷霆战机游戏项目实战02 敌人精灵
85 0
|
12月前
|
Python
Pygame第1-2课:使用精灵
Pygame第1-2课:使用精灵
63 0
|
Python
pygame包打开的图片要默认放在什么地方?
pygame包打开的图片要默认放在什么地方?
400 0
pygame包打开的图片要默认放在什么地方?
|
Python
pygame将文字转为图片
pygame将文字转为图片
136 0
Pygame中的精灵和碰撞检测
Pygame中的精灵和碰撞检测
|
Python
Python 技术篇-使用pygame库展示界面添加图片不显示问题解决办法
Python 技术篇-使用pygame库展示界面添加图片不显示问题解决办法
442 0
Python 技术篇-使用pygame库展示界面添加图片不显示问题解决办法
|
Python
pygame资源图片剪裁
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
1204 0
|
Python
pygame精灵类实现房子爆炸效果
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.
1388 0
|
Python Windows
pygame经典sprite精灵类
import cStringIO, base64 import pygame from pygame.locals import * class Ball(pygame.
1275 0
|
Python
pygame学习笔记(5)——精灵
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 据说在任天堂FC时代,精灵的作用相当巨大,可是那时候只知道怎么玩超级玛丽、魂斗罗,却对精灵一点也不知。pygame.sprite.Sprite就是Pygame里面用来实现精灵的一个类,使用时,并不需要对它实例化,只需要继承他,然后按需写出自己的类就好了,因此非常简单实用。
1072 0