为什么我的碰撞测试总是返回'true',为什么图像矩形的位置总是错误(0,0)?

为什么我的碰撞测试总是返回'true',为什么图像矩形的位置总是错误(0,0)?,第1张

为什么我的碰撞测试总是返回'true',为什么图像矩形位置总是错误(0,0)?

pygame.Surface.get_rect.get_rect()
返回具有
Surface 对象大小的矩形,但是由于 Surface 对象没有位置,因此它返回始终以(0,0)开始的矩形。
Surface放置在
blit
显示器上的某个位置。

您必须通过关键字参数来设置矩形的位置,例如:

self.rect = self.image.get_rect(topleft = (self.x, self.y))

或对虚拟属性的分配(请参阅参考资料

pygame.Rect
),例如:

self.rect = self.image.get_rect()self.rect.topleft = (self.x, self.y)

绝对没有必要添加一些额外的属性

self.x
self.y
。请改用矩形的位置。例如:

class Ball(pygame.sprite.Sprite):    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load("ball.png")        self.rect = self.image.get_rect(topleft = (280, 475))        self.col = False    def update(self):        gameDisplay.blit(self.image, self.rect)    def test_collisions(self,sprite):        self.col = pygame.sprite.collide_rect(self,sprite)class Obstacle(pygame.sprite.Sprite):    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load("obstacle.png")        self.time = pygame.time.get_ticks()        self.rect = self.image.get_rect(topleft = (1000, 483))    def change_x(self):        self.time = pygame.time.get_ticks()        self.rect.x = -(self.time/5) + 800    def update(self):        gameDisplay.blit(self.image, self.rect)

进一步注意,如果使用和调用(使用包含的sprite的和属性来绘制它们),则可以

Ball.update()
分别摆脱方法
Obstacle.update()
(可以删除它们)。例如:
pygame.sprite.Group
.draw()
.image``.rect

obstacle = Obstacle()ball = Ball()      all_sprites = pygame.sprite.Group([obstacle, ball])while not crashed:    # [...]    gameDisplay.fill((255,255,255))    all_sprites.draw(gameDisplay)    pygame.display.flip()    clock.tick(1000)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5654385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存