我正在上课,这是我们到目前为止所学到的。我试图通过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)
非常感谢你!
答案 0 :(得分:0)
请参阅PyGame doc pygame.Rect()
clamp_ip
是pygame.Rect
方法,因此您必须使用butterflyInstance.rect.clamp_ip()
但您必须使用self.rect.x
,self.rect.y
,self.rect.width
,self.rect.height
代替self.x
,self.y
,self.width
,self.height
保持对象的位置和大小。
并使用butterflyInstance.rect.x
,butterflyInstance.rect.y
,butterflyInstance.rect.width
,butterflyInstance.rect.height
代替butterflyInstance.x
,butterflyInstance.y
,butterflyInstance.width
,butterflyInstance.height
PyGame在许多地方使用pygame.Rect
- 它很有用。例如:您可以使用rect.right
代替rect.x + rect.width
或rect.center = screenRect.center
将对象置于屏幕中心。