试图使用clamp_ip来保持精灵在屏幕上 - pygame

时间:2016-01-05 00:39:36

标签: python pygame

我正在上课,这是我们到目前为止所学到的。我试图通过clamp_ip让sprite保持在屏幕上,但它不断给我一个错误消息," Butterfly实例没有属性clamp_ip。"我应该采用不同的方式将蝴蝶保持在屏幕上吗?

第一点是设置pygame和蝴蝶类(我在其中包含一条线来定义蝴蝶的矩形),我突出显示了我猜测潜在错误的位置。

这应该没问题。

pygame.init()
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

playground = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Butterflies')
screenRect = playground.get_rect() 
steps = 1

class Butterfly: 
    def __init__(self):
        self.x = random.randint(0, SCREEN_WIDTH)
        self.y = random.randint(0, SCREEN_HEIGHT)
        self.image_Butterfly = pygame.image.load('butterflya.png')
        self.image_ButterflyB = pygame.image.load('butterflyb.png')
        self.height = self.image_Butterfly.get_height()
        self.width = self.image_Butterfly.get_width()
        self.rect = (self.width, self.height)  

clock = pygame.time.Clock() 
fps = 10
net = []

for i in range (15):
    butterflyInstance = Butterfly()
    net.append(butterflyInstance)

playground.fill(cyan)
Game_Over = False

while not Game_Over:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            Game_Over = True

这是我猜测我搞砸了的地方。我尝试在此循环结束时使用clamp_ip函数

    for butterflyInstance in net:
        butterflyInstance.x += random.randint(-10, 10)
        butterflyInstance.y += random.randint(-10,10)
        if steps % 2 == 0: 
            playground.blit(butterflyInstance.image_Butterfly, (butterflyInstance.x, butterflyInstance.y))
            steps += 1
        else: 
            playground.blit(butterflyInstance.image_ButterflyB, (butterflyInstance.x, butterflyInstance.y))
            steps +=1 
        butterflyInstance.clamp_ip(screenRect)

非常感谢你!

1 个答案:

答案 0 :(得分:0)

请参阅PyGame doc pygame.Rect()

clamp_ippygame.Rect方法,因此您必须使用butterflyInstance.rect.clamp_ip()

但您必须使用self.rect.xself.rect.yself.rect.widthself.rect.height代替self.xself.yself.widthself.height保持对象的位置和大小。

并使用butterflyInstance.rect.xbutterflyInstance.rect.ybutterflyInstance.rect.widthbutterflyInstance.rect.height 代替butterflyInstance.xbutterflyInstance.ybutterflyInstance.widthbutterflyInstance.height

PyGame在许多地方使用pygame.Rect - 它很有用。例如:您可以使用rect.right代替rect.x + rect.widthrect.center = screenRect.center将对象置于屏幕中心。