2013-06-19 34 views
0

我有幾個對象在屏幕上滾動。我唯一的問題是他們同時開始。我希望他們在不同的時間開始,以便他們不總是在同一個X座標上。我會這麼做嗎?PYGAME在不同的時間初始化多個對象。

import pygame, sys, time, random 
from pygame.locals import * 
pygame.init() 
winW = 800 
winH = 500 
surface = pygame.display.set_mode ((winW, winH),0,32) 

class Enemy(): 
    def __init__(self, char, xMoveAmnt, startY=0, startX=0): 
     self.char = char 
     self.x = startX 
     self.y = startY 
     self.startX=startX 
     self.startY=startY 
     self.xMoveAmnt = xMoveAmnt 
     self.image = pygame.image.load(self.char) 
     self.rect = self.image.get_rect() 


    def moveChar(self): 
     self.x += self.xMoveAmnt 
     if self.x + self.rect.right >= 800: 
      self.x=self.startX 
      self.y=random.randint(0,300) 


enemyList = [] 
for i in range (0, 3): 
    xMoveAmnt=20 
    enemyList.append(Enemy(("orc.png"), xMoveAmnt, random.randint(0, 500), 0)) 

while True: 
    surface.fill ((255,255,255)) 
    for enemy in enemyList: 
     enemy.moveChar() 
     surface.blit(enemy.image, (enemy.x, enemy.y)) 
     time.sleep(00.01)   
    pygame.display.update() 

回答

1

,將在你的代碼的影響更小的變化是有另一個隨機參數進行初始化的,直到對象開始進行自我更新,將指定一個延遲。

class Enemy(): 
    def __init__(self, char, xMoveAmnt, startY=0, startX=0, delay=0): 
     ... 
     self.delay = delay 

    def moveChar(self): 
     if self.delay > 0: 
      self.delay -= 1 
      return 
     self.x += self.xMoveAmnt 
     if self.x + self.rect.right >= 800: 
      self.x=self.startX 
      self.y=random.randint(0,300) 

enemyList = [] 
for i in range (0, 3): 
    xMoveAmnt=20 
    enemyList.append(Enemy(("orc.png"), xMoveAmnt, random.randint(0, 500), 0, random.randint(0,100))) 

幾個不相關的提示: 1)不使用time.sleep - 而使用pygame.time.delay了時序 2)不斷髮展的前瞭解有關Pygame的精靈類和精靈羣體項目 更大一些。他們提供了一些更高級別的好處來控制遊戲對象中的多重點

+0

非常感謝!當我決定讓這個更復雜時,我會研究精靈班和小組。你幫了我很多! :d –