微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 pygame 空间入侵者中交换按键上的船舶图像

如何解决在 pygame 空间入侵者中交换按键上的船舶图像

我想在使用 pygame 的太空入侵者游戏中拥有替代角色。我希望游戏在按 1 时切换到船 1,如果按 2 则切换到船 2,依此类推。

我曾尝试在我的 ship.py 文件中更改 self.image,以便:

    for event in pygame.event.get():
         if event.type == pygame.K_1:
              self.image = pygame.image.load('images/ship1.bmp')
              self.image.get_rect()
         elif event.type == pygame.K_2:
              self.image == pygame.image.load('images/ship2.bmp')
              self.image.get_rect()

但这会在我的主要外星人入侵程序中返回一些关于船级的错误

下面是我加载的静态图像的工作代码,这也是我试图用 if 和 elif 语句更改的代码。任何建议将不胜感激。如果它有帮助,我是一个非常笨拙的编码员。

class Ship(Sprite):
    """A class to manage the ship."""
 
    def __init__(self,ai_game):
        """Initialize the ship and set its starting position."""
        super().__init__()
        self.screen = ai_game.screen
        self.settings = ai_game.settings
        self.screen_rect = ai_game.screen.get_rect()

        # Load the ship image and get its rect.
        self.image = pygame.image.load('images/ship.bmp')
        self.rect = self.image.get_rect()

解决方法

指令 self.image.get_rect() 什么都不做。您必须设置属性 rect。我建议将新图像置于当前图像的中心:

self.rect = self.image.get_rect(center = self.rect.center)

pygame.event.get() 获取所有消息并将其从队列中删除pygame.event.get() 获取所有消息并将其从队列中删除。请参阅文档:

这将获取所有消息并将它们从队列中删除。 [...]

参见Faster version of 'pygame.event.get()'. Why are events being missed and why are the events delayed?

获取事件一次并在多个循环中使用它们或将列表或事件传递给处理它们的函数和方法:

class Ship(Sprite):
    def __init__(self,ai_game):
        # [...]
       
        self.ship_image_1 = pygame.image.load('images/ship1.bmp')
        self.ship_image_2 = pygame.image.load('images/ship2.bmp')

    # [...]


    def my_method(self,event_list):

        for event in event_list:
            if event.type == pygame.K_1:
                self.image = self.ship_image_1
                self.rect = self.image.get_rect(center = self.rect.center)
            elif event.type == pygame.K_2:
                self.image = self.ship_image_2
                self.rect = self.image.get_rect(center = self.rect.center)
while run:

    event_list = pygame.event.get()
    for event in event_list:
        if event.type == pygame.QUIT:
            run = False

    my_sprite.my_method(event_list)
,

首先加载不在循环中的图像。

image1 = pygame.image.load('image1')
image2 = pygame.image.load('image2')
 #replace image 1 with your image
 #in the event loop
 screen.blit(image1,(Your wish dimensions))
 #note that I took screen.blit because I made my screen in a variable called screen.
 #If you variable is display take display.blit
 if event.type == pygame.KEYDOWN:
    if pygame.key == pygame.K_RIGHT:
       image1 = image 2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。