我正在做一個氣球爆破游戲,希望氣球在點擊時消失。我在主回圈中有一個爆炸類和一個事件,可以正確檢查精靈的位置,然后在滑鼠單擊氣球時顯示爆炸影片。盡管如此,原來的氣球精靈一直從螢屏上掉下來。
這是氣球課
class Balloon(pygame.sprite.Sprite):
def __init__(self,img):
super(Balloon,self).__init__()
self.image=pygame.image.load(img).convert_alpha()
self.image=pygame.transform.scale(self.image,(40,40))
self.speed = random.randint(1,4)
self.rect=self.image.get_rect()
self.rect.x= random.randrange(screen_width)
self.rect.y= 0
def update(self):
for event in pygame.event.get():
if event.type==pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
for sprite in balloongroup:
if sprite.rect.collidepoint(pos):
self.kill()
self.rect.y =self.speed
if self.rect.bottom >screen_height:
self.kill()
現在這是主回圈:
def start():
#explosion_group.update()
#explosion_group.empty()
balloongroup.empty()
allsprites.empty()
#basket=createBasket()
while True:
clock.tick(fps)
for event in pygame.event.get():
if event.type==QUIT:
return
explosion_group.update()
if event.type==pygame.MOUSEBUTTONDOWN:
pos = pygame.mouse.get_pos()
for sprite in balloongroup:
if sprite.rect.collidepoint(pos):
explosion = Explosion(pos[0], pos[1])
explosion_group.add(explosion)
allsprites.add(explosion)
explosion_group.draw(screen)
screen.fill((0,0,0)) # <--------------- here
screen.blit(pygame.image.load("background.jpg"),(0,0))
balloongroup.update()
if random.randrange(100)<2:
create_balloon()
allsprites.draw(screen)
clock.tick(60)
pygame.display.update()
我認為在氣球類的更新方法中添加事件會起作用,但遺憾的是它不起作用。我不知道從哪里開始。
uj5u.com熱心網友回復:
首先,請注意您的事件回圈不正確。您必須處理回圈中的所有事件:
def start():
# [...]
while True:
# [...]
for event in pygame.event.get():
if event.type == QUIT:
return
if event.type == pygame.MOUSEBUTTONDOWN:
for sprite in balloongroup:
if sprite.rect.collidepoint(event.pos):
explosion = Explosion(*event.pos)
explosion_group.add(explosion)
allsprites.add(explosion)
explosion_group.draw(screen)
explosion_group.update()
永遠不要pygame.event.get()在應用程式回圈中多次呼叫。請參閱“pygame.event.get()”的更快版本。為什么會錯過事件,為什么會延遲事件?.
你為什么不顯示爆炸而不是精靈?kill創建爆炸物件時的精靈:
def start():
# [...]
while True:
# [...]
for event in pygame.event.get():
if event.type == QUIT:
return
if event.type == pygame.MOUSEBUTTONDOWN:
for sprite in balloongroup:
if sprite.rect.collidepoint(event.pos):
srite.kill() # <----------
explosion = Explosion(event.pos[0], event.pos[1])
# [...]
或者,您可以kill在爆炸影片結束時使用精靈。將精靈傳遞給爆炸類,kill并在影片結束時傳遞給它:
class Explosion(pygame.sprite.Sprite):
def __init__(self, x, y, target):
pygame.sprite.Sprite.__init__(self)
# [...]
self.target = target
def update(self):
# [...]
if self.index < len(self.red):
self.image = self.red[self.index]
else:
self.kill()
self.target.kill()
def start():
# [...]
while True:
# [...]
for event in pygame.event.get():
if event.type == QUIT:
return
if event.type == pygame.MOUSEBUTTONDOWN:
for sprite in balloongroup:
if sprite.rect.collidepoint(event.pos):
explosion = Explosion(event.pos[0], event.pos[1], sprite) # <---
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367981.html
下一篇:如何將3D位置陣列拆分為子卷
