【问题标题】:How do I make and assign a rect to a sprite in pygame?如何在pygame中为精灵制作和分配一个矩形?
【发布时间】:2013-02-02 19:56:48
【问题描述】:

我已经构建了一个简单的游戏引擎,其中玩家和敌人类只是对象。
我想让它们成为精灵,以便我可以检查碰撞并更好地管理它们,但我似乎找不到任何关于如何做到这一点的好例子......
我已经扩展了玩家和敌人类以扩展 pygame.sprite.Sprite 类。
但是当我检查两者之间的碰撞时,
它说这两个类需要rects(矩形)。

我不知道该怎么做...

【问题讨论】:

标签: python pygame sprite collision


【解决方案1】:

Sprite 是对象,您需要的所有内容都已作为字段包含在 sprite 类中。您需要明确设置精灵的边界矩形。

来自 pygame 文档:

pygame.sprite.spritecollide 在相交的 Group 中查找 Sprite 另一个精灵 pygame.sprite.spritecollide(sprite, group, dokill, 碰撞=无):返回Sprite_list

返回一个列表,其中包含一个 Group 中与 另一个雪碧。交点是通过比较确定的 每个 Sprite 的 Sprite.rect 属性。

因此,您需要将 sprite.rect 设置为您希望精灵碰撞所基于的矩形。通常,您可以使用精灵图像的大小作为碰撞矩形。

s.image = pygame.image.load("sprite.png").convert() #load a sprite image
s.rect = b.image.get_rect() # set collision rectangle

【讨论】:

  • 我现在得到这个错误,我给两个类一个 self.rect 变量,我不明白这个....如果 pygame.sprite.collide_rect(Player.Rect, Enemy.Rect) == True: AttributeError: type object 'Player' has no attribute 'Rect'
  • 发布您的课程代码。听起来你的玩家/敌人构造函数不调用 sprite / set rect。代码是if pygame.sprite.collide_rect(player.rect, enemy.rect): print 'yes'
  • 我只将 self.rect = self.image.get_rect() 放在我的 init 函数中......分配 rect 属性的正确方法是什么?
  • 您的图片加载是否正确?您可以在 init 中分配它后立即打印您的 rect 以查看它是否打印正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多