当前位置: 首页 > 知识库问答 >
问题:

Pygame仅显示一个图像/精灵

钱旻
2023-03-14
# Import the library PyGame
import pygame; pygame.init()

# Create the window/GUI
global window
window = pygame.display.set_mode((800, 800))
pygame.display.set_caption('Space Invaders')


class sprite:
    """A class that you assign to the a sprite, it has the functions     draw() and resize()"""

    def __init__(self, fileto):
        self.x = 330
        self.y = 700
        self.width = 100
        self.height = 100
        self.image = pygame.image.load(fileto).convert()

    # Blit the sprite onto the screen, ex: plane.draw()
    def draw(self):
        window.fill(255)
        window.blit(self.image, (self.x, self.y))
        self.image = pygame.transform.scale(self.image, (self.width, self.height))
        pygame.display.flip()


bakgrunn = pygame.image.load("stars.png").convert()

# Assign the variable plane to the class "sprite"
plane = sprite("plane.gif")
projectile = sprite("projectile.png")

while True:
    # Draw the plane and set the size
    plane.draw()
    plane.width = 100
    plane.height = 100

    projectile.draw()

我正在PyGame中制作一个太空入侵者游戏,但当我尝试绘制投射物时,它会覆盖/更改主精灵(平面)。如何解决此问题,以便在屏幕上显示多个精灵?

共有1个答案

公冶威
2023-03-14

您的精灵的绘制功能正在给您带来问题。每次绘制精灵时,它都会填充并刷新显示。这意味着,如果有两个或多个对象,则仅显示最后一个对象。对每个对象仅使用blit功能,并且在每个游戏循环中仅填充/刷新屏幕一次。

# Import the library PyGame
import pygame; pygame.init()

# Create the window/GUI
window = pygame.display.set_mode((800, 800))
pygame.display.set_caption('Space Invaders')


class Sprite:
    """A class that you assign to the a sprite, it has the functions     draw() and resize()"""

    def __init__(self, fileto):
        self.x = 330
        self.y = 700
        self.width = 100
        self.height = 100
        self.image = pygame.image.load(fileto).convert()

    # Blit the sprite onto the screen, ex: plane.draw()
    def draw(self):
        window.blit(self.image, (self.x, self.y))    

# Assign the variable plane to the class "sprite"
plane = Sprite("plane.gif")
projectile = Sprite("projectile.png")

while True:
    # Clear the screen.
    window.fill((255, 255, 255))

    # Draw all objects to the screen.
    plane.draw()
    projectile.draw()

    # Make all everything you've drawn appear on your display.
    pygame.display.update()  # pygame.display.flip() works too

这将正确地绘制所有精灵。但是,它会在几秒钟后崩溃,因为您没有处理事件。在你进一步前进之前,你需要查阅一个教程。

 类似资料:
  • 我试图让这个游戏工作,但它只是显示一个黑屏。这是一个简单的游戏,你只要避免掉块。我看过相关的问题,但没有一个答案对我有用。它说我必须添加更多细节,所以希望这一行足够了,因为idk在这一行还需要写些什么来为我的文章添加细节。我的代码:

  • 问题内容: 引导轮播是否可扩展以在滑块中显示下一个和上一个图像? 目前,我的轮播看起来像这样,如何将上一张和下一张图像添加到当前活动的幻灯片中? 问题答案: Bootstrap是可能的,但是需要一些自定义… 您必须使用CSS和jQuery自定义幻灯片的位置。 另一个变化是仅显示下一张和上一张幻灯片的一部分。这可以通过在.. 的左侧和右侧上放置绝对位置叠加来完成。

  • 我正在使用chart.js在一个页面上显示多个折线图。然而,只有最后一张图表显示,尽管我称之为“canvas1”和“canvas2”。有些地方一定有冲突,我试过很多东西,但没有任何乐趣。以下是两个图表,仅显示最后一个: 图一 图二: 你的帮助将不胜感激,已经打扰我一段时间了! 提前谢谢

  • 最后是我的适配器类

  • 问题内容: 假设我想要一种只显示HTML中250x250像素的图像的中心50x50像素的方法。我怎样才能做到这一点。另外,有没有办法对css:url()引用执行此操作? 我知道CSS中的 clip ,但这似乎仅在与绝对定位一起使用时才起作用。 问题答案: 一种方法是在容器(td,div,span等)中将要显示的图像设置为背景,然后调整背景位置以获取所需的精灵。

  • 问题就在这里:我创建了世界上最简单的RecyclerView,但它只显示第一个项目。我不明白为什么。谢谢你的帮助。 item_layout.xml mainactivity.java