2014-12-11 59 views
-1

這是我的遊戲代碼:子彈是不可見的,將不會刪除屏幕後刪除

這是我的整段代碼。爲什麼我發射子彈時屏幕上沒有出現子彈, 爲什麼當我將子彈移開時仍然留在屏幕上(請參見242到250行)?如果你有時間,你能告訴我爲什麼自從我第一次開始我的比賽以來,我的比賽是滯後的嗎?感謝您的幫助! (已經被其他用戶回答),其拍攝子彈

class Fire_User(pygame.sprite.Sprite): 
     def __init__(self, image_file): 
      pygame.sprite.Sprite.__init__(self) 
      self.image = pygame.image.load(image_file) 
      self.rect = self.image.get_rect() 

    #Move function# 
     def update(self): 
      self.rect.x -= 10 

#Class for the player 1 to be able to fire projectiles(Steve's head from Minecraft) at player 2# 
    class Fire_Comp(pygame.sprite.Sprite): 
     def __init__(self, image_file): 
      pygame.sprite.Sprite.__init__(self) 
      self.image = pygame.image.load(image_file) 
      self.rect = self.image.get_rect() 

     #Move function# 
     def update(self): 
      self.rect.x += 10 

而且Pygame的事件:

elif event.key == K_LSHIFT: 
    bullet = Fire_User('bomb_user.jpg') 
    bullet.rect.x = my_ball.rect.x + 10 
    bullet.rect.y = my_ball.rect.y 
    fired = 1 
    bulletGroup.add(bullet) 
elif event.key == K_RSHIFT: 
    otherBullet = Fire_Comp('steve.png') 
    otherBullet.rect.x = dad.rect.x - 10 
    otherBullet.rect.y = dad.rect.y 
    fired = 1 
    otherBulletGroup.add(otherBullet) 

更新:
我試圖做塊我的照片(子彈)搬上銀幕。它給我一個錯誤:

Traceback (most recent call last): 
    File "E:/PyCharm_Tony/Hero's_War.py", line 273, in <module> 
    screen.blit(bullet.image, bullet.rect) 
NameError: name 'bullet' is not defined 

爲什麼會發生這種情況?我編輯了我的程序。哦,運行代碼片段只會將我的代碼加載到一個句子中(很長)。

回答

1

在遊戲開始時的初始延遲是因爲語句

pygame.time.delay(1000) 

刪除或評論它來除去滯後。

現在,而不是做:

bullet = Fire_User() 
otherBullet = Fire_Comp() 

在每個事件創建實例。例如:

elif event.key == K_LSHIFT: 
    bullet1 = Fire_User() 
    bullet1.rect.x = my_ball.rect.x+10 
    bullet1.rect.y = my_ball.rect.y 
    bulletGroup.add(bullet1) 

這將使每當按K_LSHIFT 子彈出現。我建議把這些職位也作爲Fire_User()類的__init__的參數。減少rect的增量以清楚地看到移動。

就刪除子彈而言,spritecollide函數對此有一個屬性dokill

spritecollide(sprite, group, dokill, collided = None) -> Sprite_list 

dokill參數是一個布爾值。如果設置爲True,所有發生碰撞的Sprites將從組中移除。

+0

我需要'pygame.time.delay(1000)'這一行才能播放我的音樂。有另一種方式嗎? – 2014-12-29 14:32:34

+1

使用'pygame.mixer.pre_init()':[syntax](http://www.pygame.org/docs/ref/mixer.html#pygame.mixer.pre_init)在pygame之前設置'mixer'模塊。 mixer.init()'以避免滯後。這樣,可以避免''delay'語句。 – 2014-12-29 15:06:41