gpt4 book ai didi

python - 你如何在 Pygame 中让 Sprite blitting 有两个独立的碰撞盒?

转载 作者:行者123 更新时间:2023-12-04 08:29:26 25 4
gpt4 key购买 nike

我不知道我的标题是否很清楚,所以我将在这里尝试更清楚地解释这一点。所以我在 Pygame 中有一个名为 spikes 的 Sprite .我想要不止一个 spikes所以我blit第二个。问题是,我的 spike_collision box 仅适用于我 blit 的第一个,而不适用于第二个。除了必须制作第二个碰撞盒之外,我如何才能拥有第二个 spikes也有自己的碰撞盒?
这是blit代码:

        screen.blit(spikes, (spike_x, 500 - player_y + 476))
screen.blit(spikes, (spike_x + 200, 500 - player_y + 476))
这是碰撞盒代码:
spike_collision = spikes.get_rect(topleft=(spike_x, 500 - player_y + 476))
谢谢。

最佳答案

我假设当你写“ Sprite ”时,你的意思是位图 Sprite ,而不是 pygame.sprite.Sprite .
最好将 Sprite 保持为位图和矩形,然后始终在其矩形处绘制 Sprite ,调整矩形以重新定位 Sprite ,并将其用于任何碰撞。
这可以通过列表对轻松完成:

spike_image = pygame.image.load('spikes.png').convert_alpha()
spike_rect = spike_image.get_rect( )
spikes_a = [ spike_image, spike_rect( top_left=( 100, 100 ) )
spikes_b = [ spike_image, spike_rect( top_left=( 200, 200 ) )

# ...

screen.blit( spikes_a[0], spikes_a[1] )
screen.blit( spikes_b[0], spikes_b[1] )
# etc.

if ( spikes_a[1].colliderect( player_rect ) ):
print( "ouch!" )
但是,您应该使用“适当的” Sprite 对象。当然有一些额外的设置,但它易于使用多次偿还:
class Spike( pygame.sprite.Sprite ):
def __init__( self, position=( 0, 0 ) ):
self.image = pygame.image.load('spikes.png').convert_alpha()
self.rect = self.image.get_rect( top_left = position )

def moveTo( self, position ):
self.rect = self.image.get_rect( top_left = position )

def moveBy( self, dx, dy ):
self.rect.move_ip( dx, dy )


spike_a = Spike( ( 100, 100 ) )
spike_b = Spike( ( 200, 200 ) )

spike_a.draw( window ) # get this for free
使用 Sprite 对象有很多有用的组和碰撞功能,非常值得一读: https://www.pygame.org/docs/ref/sprite.html

关于python - 你如何在 Pygame 中让 Sprite blitting 有两个独立的碰撞盒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65099981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com