TypeError:闪电器的无效目的地位置(我查看了其他解决方案,但由于某种原因,它们不起作用)

发布于 2025-01-20 10:13:27 字数 1178 浏览 2 评论 0原文

所以我一直在尝试制作一个游戏,但弹出了 TypeError: invalid destinationposition for blit 错误,我不知道如何解决它。

这是有问题的代码:

import pygame, sys
pygame.init()
    
# screen settings
screen_width = 1000
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))

class Player(pygame.sprite.Sprite):
      """
      player character
      """
      def __init__(self):
          pygame.sprite.Sprite.__init__(self)
            
          self.x = screen_width / 2
          self.y = screen_height / 2
          self.image = pygame.image.load('img/player.png').convert_alpha()
          self.rect = self.image.get_rect
    
    player = Player()
    player_list = pygame.sprite.Group()
    player_list.add(player)
    
    # game loop
    while True:
    
        for event in pygame.event.get():
    
            if event.type == pygame.QUIT:
                pygame.quit()
                
                sys.exit()
                
        player_list.draw(screen) # traceback thinks this is where the error is
    
        pygame.display.flip()
        pygame.display.update()

这里的代码示例实际上并不是游戏代码,而只是与我的问题相关的部分。

我会很感激一些帮助。

So I've been trying to make a game and the TypeError: invalid destination position for blit error popped up, I have no idea how to solve it.

Here's the problematic code:

import pygame, sys
pygame.init()
    
# screen settings
screen_width = 1000
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))

class Player(pygame.sprite.Sprite):
      """
      player character
      """
      def __init__(self):
          pygame.sprite.Sprite.__init__(self)
            
          self.x = screen_width / 2
          self.y = screen_height / 2
          self.image = pygame.image.load('img/player.png').convert_alpha()
          self.rect = self.image.get_rect
    
    player = Player()
    player_list = pygame.sprite.Group()
    player_list.add(player)
    
    # game loop
    while True:
    
        for event in pygame.event.get():
    
            if event.type == pygame.QUIT:
                pygame.quit()
                
                sys.exit()
                
        player_list.draw(screen) # traceback thinks this is where the error is
    
        pygame.display.flip()
        pygame.display.update()

The code example in here isn't actually the game code, but just the part related to my problem.

I'd appreciate some help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那些过往 2025-01-27 10:13:27

您的代码的问题不是player_list.draw,而是 pygame.display.update() 弄乱了您的代码。

另一个问题是 self.rect = self.image.get_rect ,它应该是 self.rect= self.image.get_rect()

,只是为了将来的工作,你应该在你的玩家类中添加一个更新函数,其中包含player_list.update你的 while 循环!

#固定代码

import pygame, sys
pygame.init()
    
# screen settings
screen_width = 1000
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))

class Player(pygame.sprite.Sprite):
    """player"""
    def __init__(self, window):
        pygame.sprite.Sprite.__init__(self)
        self.window = window
        self.x = screen_width / 2
        self.y = screen_height / 2
        self.image = pygame.image.load('sprites/NewGumbo.png').convert_alpha()
        self.rect = self.image.get_rect()

    
player = Player(screen)
player_list = pygame.sprite.Group()
player_list.add(player)
    
# game loop
while True:
    
    for event in pygame.event.get():
    
        if event.type == pygame.QUIT:
            pygame.quit()
                
            sys.exit()
                
    player_list.draw(screen) # traceback thinks this is where the error is
    player_list.update()
    
    pygame.display.flip()
 

The problem with your code was not the player_list.draw, rather is was the pygame.display.update() messing up your code.

the other problem was the self.rect = self.image.get_rect, it should be self.rect= self.image.get_rect()

and just for future work, you should add an update function to your player class with player_list.update inside your while loop!

#fixed code

import pygame, sys
pygame.init()
    
# screen settings
screen_width = 1000
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))

class Player(pygame.sprite.Sprite):
    """player"""
    def __init__(self, window):
        pygame.sprite.Sprite.__init__(self)
        self.window = window
        self.x = screen_width / 2
        self.y = screen_height / 2
        self.image = pygame.image.load('sprites/NewGumbo.png').convert_alpha()
        self.rect = self.image.get_rect()

    
player = Player(screen)
player_list = pygame.sprite.Group()
player_list.add(player)
    
# game loop
while True:
    
    for event in pygame.event.get():
    
        if event.type == pygame.QUIT:
            pygame.quit()
                
            sys.exit()
                
    player_list.draw(screen) # traceback thinks this is where the error is
    player_list.update()
    
    pygame.display.flip()
 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文