“.subsurface()”、“.convert_alpha()”和“%”是做什么的?
What do ".subsurface()", ".convert_alpha()", and "%" do?
我正在努力学习 Pygame,我正在学习的教程中有一个部分解释了如何制作精灵动画。它给了我一个 sprite sheet,其中有 8 个图像,每个图像尺寸为 128x128,而整个 sheet 尺寸为 1024x128。
然后出现如下代码:
#! /usr/bin/env_python
import pygame, sys
from pygame.local import *
pygame.init()
ZONE = pygame.display.set_mode((400,300))
pygame.display.set_caption("Game Zone")
RED = (255,0,0)
clock = pygame.time.Clock()
counter = 0
sprites = []
sheet = pygame.image.load("spritesheet.gif").convert_alpha()
width = sheet.get_width()
for i in range(int(width/128)):
sprites.append(sheet.subsurface(i*128,0,128,128))
while True:
pygame.display.update()
ZONE.fill(RED)
ZONE.blit(sprites[counter],(10,10))
counter = (counter + 1) % 8
clock.tick(16)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
教程对这些行的作用非常模糊,所以我想知道:
sheet.subsurface()
是做什么的?这四个参数代表什么? (我相信第三和第四是指个别图像的宽度和高度。)
.convert_alpha()
是做什么的?教程说它 "preserves transparency," 但我觉得很奇怪,因为我之前已经使用过透明背景的图像并且 none 需要这种转换的图像。
%
是做什么的?我已经知道 /
代表除法,但是教程没有解释 %
.
让我们谈谈 subsurface()。假设您有 1,600 张图像要加载到程序中。有两种方法可以做到这一点。 (好吧,不止两个,但我在这里强调一下。)首先,您可以创建 1,600 个文件,依次将每个文件加载到表面中,然后启动程序。或者,您可以将它们放在一个文件中,将该文件加载到单个表面中,然后使用 subsurface()。在本例中,spritesheet.gif 为 128 像素高,并且每 128 像素包含一个新图像。
这两种方式基本上做同样的事情,但一种可能比另一种更方便。特别是,打开和读取文件的性能成本很小,如果您需要连续执行此操作 1,600 次,那么该成本可能会很大。
我对子表面的理解是,它基本上是一个 Pygame 表面,但根据父表面定义;如果您更改了父表面,则任何子表面都将以相同的方式更改。但是,在所有其他方面,它都可以视为规则表面。
subsurface
为您提供一个表示较大曲面的矩形截面的曲面。在这种情况下,您有一个大表面,上面有很多精灵,而次表面用于从该表面提取碎片。您也可以创建新表面并使用 blit 复制像素,但使用次表面更容易一些,并且不需要复制像素数据。
https://www.pygame.org/docs/ref/surface.html#pygame.Surface.subsurface
建议搜索:pygame subsurface
convert
和 convert_alpha
都用于将表面转换为屏幕使用的相同像素格式。这可确保您在将转换显示到屏幕时不会因为转换而损失性能。 convert
丢弃任何 alpha 通道,而 convert_alpha
保留它。您看到的评论是指选择使用 convert_alpha
而不是 convert
,而不是选择使用 convert_alpha
而不是什么都没有。
https://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert
建议搜索:pygame convert_alpha
“%”运算符不是 Pygame 功能,它只是 Python 的 "modulo/remainder" 运算符。在这种情况下,它用于使 counter
变量在值 0 到 7 之间重复循环,然后再次返回到 0。
https://docs.python.org/2/reference/expressions.html#binary-arithmetic-operations
建议搜索:python percent sign
我正在努力学习 Pygame,我正在学习的教程中有一个部分解释了如何制作精灵动画。它给了我一个 sprite sheet,其中有 8 个图像,每个图像尺寸为 128x128,而整个 sheet 尺寸为 1024x128。
然后出现如下代码:
#! /usr/bin/env_python
import pygame, sys
from pygame.local import *
pygame.init()
ZONE = pygame.display.set_mode((400,300))
pygame.display.set_caption("Game Zone")
RED = (255,0,0)
clock = pygame.time.Clock()
counter = 0
sprites = []
sheet = pygame.image.load("spritesheet.gif").convert_alpha()
width = sheet.get_width()
for i in range(int(width/128)):
sprites.append(sheet.subsurface(i*128,0,128,128))
while True:
pygame.display.update()
ZONE.fill(RED)
ZONE.blit(sprites[counter],(10,10))
counter = (counter + 1) % 8
clock.tick(16)
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
教程对这些行的作用非常模糊,所以我想知道:
sheet.subsurface()
是做什么的?这四个参数代表什么? (我相信第三和第四是指个别图像的宽度和高度。).convert_alpha()
是做什么的?教程说它 "preserves transparency," 但我觉得很奇怪,因为我之前已经使用过透明背景的图像并且 none 需要这种转换的图像。%
是做什么的?我已经知道/
代表除法,但是教程没有解释%
.
让我们谈谈 subsurface()。假设您有 1,600 张图像要加载到程序中。有两种方法可以做到这一点。 (好吧,不止两个,但我在这里强调一下。)首先,您可以创建 1,600 个文件,依次将每个文件加载到表面中,然后启动程序。或者,您可以将它们放在一个文件中,将该文件加载到单个表面中,然后使用 subsurface()。在本例中,spritesheet.gif 为 128 像素高,并且每 128 像素包含一个新图像。
这两种方式基本上做同样的事情,但一种可能比另一种更方便。特别是,打开和读取文件的性能成本很小,如果您需要连续执行此操作 1,600 次,那么该成本可能会很大。
我对子表面的理解是,它基本上是一个 Pygame 表面,但根据父表面定义;如果您更改了父表面,则任何子表面都将以相同的方式更改。但是,在所有其他方面,它都可以视为规则表面。
subsurface
为您提供一个表示较大曲面的矩形截面的曲面。在这种情况下,您有一个大表面,上面有很多精灵,而次表面用于从该表面提取碎片。您也可以创建新表面并使用 blit 复制像素,但使用次表面更容易一些,并且不需要复制像素数据。
https://www.pygame.org/docs/ref/surface.html#pygame.Surface.subsurface
建议搜索:pygame subsurface
convert
和 convert_alpha
都用于将表面转换为屏幕使用的相同像素格式。这可确保您在将转换显示到屏幕时不会因为转换而损失性能。 convert
丢弃任何 alpha 通道,而 convert_alpha
保留它。您看到的评论是指选择使用 convert_alpha
而不是 convert
,而不是选择使用 convert_alpha
而不是什么都没有。
https://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert
建议搜索:pygame convert_alpha
“%”运算符不是 Pygame 功能,它只是 Python 的 "modulo/remainder" 运算符。在这种情况下,它用于使 counter
变量在值 0 到 7 之间重复循环,然后再次返回到 0。
https://docs.python.org/2/reference/expressions.html#binary-arithmetic-operations
建议搜索:python percent sign