CQPEED 2024-08-05 13:18 采纳率: 0%
浏览 2

pygame colliderect不起作用


class Player:
    def __init__(self,country,arg):
        self.arg=arg
        self.img=pygame.image.load(f"conutrys/{country}.png")
        self.rect=self.img.get_rect()
        self.rect.x=0
        self.rect.y=80
    def down(self):
        pass
    def draw(self):
        self.arg.screen.blit(self.img,self.arg.screenrect.center)
    def is_collide(self):
        for item in self.arg.map:
            if self.rect.colliderect(item):
                return True
    def move(self,xadd=0,yadd=0):
        if not self.is_collide():
            self.rect.x+=xadd
            self.rect.y+=yadd

在我的函数中,is_collide,不起作用,怎么回事

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-08-06 09:22
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题可能出在is_collide函数的实现上。在当前实现中,is_collide函数会遍历arg.map中的每个item,并检查是否与Player对象的矩形发生碰撞。但是,在检测碰撞时,应该使用实际的矩形位置信息,而不是Player对象的矩形位置信息。 为了解决这个问题,可以修改is_collide函数,使其检测实际位置的碰撞。以下是修改后的is_collide函数的代码示例:
    def is_collide(self):
        player_rect = pygame.Rect(self.rect.x, self.rect.y, self.rect.width, self.rect.height)
        for item in self.arg.map:
            if player_rect.colliderect(item):
                return True
    

    在这个修改后的版本中,我们创建了一个新的player_rect,其位置与Player对象的矩形相同。然后在检测碰撞时使用这个player_rect。 请尝试使用这个修改后的is_collide函数,看看是否能够解决问题。如果问题仍然存在,请检查arg.map中的item是否正确初始化,并且确保Player对象的rect属性在移动时更新。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月5日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见