创建图像表面窗口的精灵表

Posted

技术标签:

【中文标题】创建图像表面窗口的精灵表【英文标题】:Sprite sheet creating a window of the image surface 【发布时间】:2021-01-21 12:35:32 【问题描述】:

我正在尝试在pygame/python 中重新创建 chrome no internet 恐龙游戏。但是每当我运行它而不是创建主文件窗口时,它都会从精灵表文件创建图像窗口。不知道我在这里做错了什么。

主文件:

# importing the other file where the spritesheet class is
from SpriteSheet import SpriteSheet

import pygame

pygame.init()

SW = 500
SH = 500
win = pygame.display.set_mode((SW, SH))
SPRITE_SHEET = pygame.image.load('sheet.png')

# mainloop
run = True
while run:

# checking for clicking the x button
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

# cropping the image from the spritesheet
        spritesheet = SpriteSheet(SPRITE_SHEET)
        image = spritesheet.get_image(
            848, 2, 44, 47, (255, 255, 255))
        win.blit(image, (0, 0))

精灵表文件:

import pygame

# creating the class
class SpriteSheet(object):
    SpriteSheet = None

# getting the spritesheet
    def __init__(self, sheet):
        self.SpriteSheet = sheet

# cropping the image
    def get_image(self, x, y, width, height, color):
        image = pygame.display.set_mode([width, height])

        image.blit(self.SpriteSheet, (0, 0), (x, y, width, height))

        image.set_colorkey(color)

        return image

【问题讨论】:

【参考方案1】:

创建图像窗口而不是创建主文件窗口

没有。没有什么比图像窗口更好的了。

与显示器相关联的pygame.Surface 对象的内容就是您在窗口中看到的内容。

win = pygame.display.set_mode((SW, SH))

首先你blit SPRITESHEET on image (in SpriteSheet.get_image())

image.blit(self.SpriteSheet, (0, 0), (x, y, width, height)) 

现在image 的内容是SPRITESHEET。然后你 blit image win

win.blit(image, (0, 0))

因此显示image(与SPRITESHEET相同)的内容。

当你不想在窗口中看到SPRITESHEET的内容时,那你就得去掉这行

>win.blit(image, (0, 0))


顺便说一句,pygame wiki 提供了一个很好的完整的Spritesheet 示例。

【讨论】:

以上是关于创建图像表面窗口的精灵表的主要内容,如果未能解决你的问题,请参考以下文章

为 Unity-2D 创建精灵表

我应该如何为精灵表中的精灵分配名称?

纹理包装动画图像/精灵表有效-Libgdx

在 Unity 5 中,为啥精灵表中的某些精灵在精灵中不可见,但在 UI 图像中可以正常工作?

精灵表图像未显示

在 Sprite Kit iOS 中使用一个图像精灵表