python - pygame如何实现精灵的矩形
问题描述
我正在学习 pygame,但遇到了一个问题:当我尝试通过更改变量 self.image 和 self.rect 的内容来更改精灵的图像时,它不会显示/实际化这个新图像. 这是代码,希望能让自己理解。
all_sprites_list = pygame.sprite.Group()
luffy_sprites_ls = pygame.sprite.Group()
class luffy(pygame.sprite.Sprite):
"""docstring pour le personnage"""
def __init__(self):
self.lsLuffy = []
self.lsLuffySauter = []
super().__init__()
self.imageAll = SpriteSheet("images/attaquesLuffy.png")
#loading some img to put them in a lsLuffySauter
self.image = self.imageAll.get_image(35, 74, 20, 95)
self.lsLuffySauter.append(self.image)
self.image2 = self.imageAll.get_image(200, 300, 300,300)
self.lsLuffySauter.append(self.image2)
self.rect = self.image.get_rect()
self.rect.x = 500
self.rect.y = 500
all_sprites_list.add(self)
self.positionX = 500
self.positionY = 500
def sauter(self):
""" Called when user hits 'jump' button. """
self.current_image = self.lsLuffySauter[0]
self.positionY -= 10
self.rect = self.current_image.get_rect()
self.rect.x = self.positionX
self.rect.y = self.positionY
luffy_sprites_ls.empty()
luffy_sprites_ls.add(self)
#all_sprites_list.update()
#Code to draw in the screen
screen.fill(WHITE)
all_sprites_list.draw((screen))
luffy_sprites_ls.draw((screen))
pygame.display.flip()
clock.tick(100)
解决方案
当pygame.sprite.Group.draw()
被调用时,如在 中luffy_sprites_ls.draw((screen))
,组中的每个精灵都会在sprite.image
处渲染到屏幕上sprite.rect
。
您的sauter()
函数正在改变luffy.rect
,但它没有改变luffy.image
(它正在改变luffy.current_image
)。
可能你想要类似的东西:
def sauter(self):
""" Called when user hits 'jump' button. """
self.image = self.lsLuffySauter[0]
self.positionY -= 10
self.rect = self.image.get_rect()
self.rect.x = self.positionX
self.rect.y = self.positionY
推荐阅读
- node.js - 当资源实际上没有被移动时,为什么 Node 的 https 模块会返回 301?
- java - context.xml 中没有符合 bean 类型的 bean
- azure - 是否可以使用访问策略过滤 Azure STORAGE SAS 的 IP 地址?
- c++ - std::cout 将字符打印为 2 位十六进制
- mongodb - 如果另一个字段是特定值,如何构造一个自定义验证器,使 MongoDB 字段成为必需?
- binary-search-tree - AttributeError:“NoneType”对象没有属性“值”
- java - 如何将程序密码存储在 OS 密钥库中?
- javascript - 二进制到十进制转换在 JavaScript 中显示大数的错误结果
- reactjs - Dispatch 覆盖 React Js 中的完整存储
- java - SpringBoot + Hibernate JPA Lazy fetching 模式仍然查询实体中的列表