+-

如何将图像加载到精灵中,而不是为精灵绘制形状?
例如:我将50×50的图片加载到精灵中,而不是绘制50×50的矩形
例如:我将50×50的图片加载到精灵中,而不是绘制50×50的矩形
到目前为止,这是我的Sprite代码:
class Player(pygame.sprite.Sprite):
def __init__(self, color, width, height):
super().__init__()
#Config
self.image = pygame.Surface([width, height])
self.image.fill(WHITE)
self.image.set_colorkey(WHITE)
# Draw
pygame.draw.rect(self.image, color , [0, 0, width, height])
# Fetch
self.rect = self.image.get_rect()
def right(self, pixels):
self.rect.x += pixels
def left(self, pixels):
self.rect.x -= pixels
def up(self, pixels):
self.rect.y -= pixels
def down(self, pixels):
self.rect.y += pixels
最佳答案
首先在全局范围内或在单独的模块中将映像 load导入.不要在__init__方法中加载它,否则每次创建实例时都必须从硬盘读取它,这很慢.
现在,您可以在类(self.image = IMAGE)中分配全局IMAGE,并且所有实例都将引用此图像.
import pygame as pg
pg.init()
# The screen/display has to be initialized before you can load an image.
screen = pg.display.set_mode((640, 480))
IMAGE = pg.image.load('an_image.png').convert_alpha()
class Player(pg.sprite.Sprite):
def __init__(self, pos):
super().__init__()
self.image = IMAGE
self.rect = self.image.get_rect(center=pos)
如果要对同一类使用不同的图像,则可以在实例化期间传递它们:
class Player(pg.sprite.Sprite):
def __init__(self, pos, image):
super().__init__()
self.image = image
self.rect = self.image.get_rect(center=pos)
player1 = Player((100, 300), IMAGE1)
player2 = Player((300, 300), IMAGE2)
使用convert或convert_alpha(用于具有透明性的图像)方法可提高blit性能.
如果图像位于子目录中(例如“ images”),则使用os.path.join构造路径:
import os.path
import pygame as pg
IMAGE = pg.image.load(os.path.join('images', 'an_image.png')).convert_alpha()
点击查看更多相关文章
转载注明原文:python-Pygame-在精灵中加载图像 - 乐贴网