0
下面的代碼基本上是一個測試,讓我瞭解Sprites和Groups。它應該創建Ball
類的10個實例,然後隨機定位並移動每個實例,並將它們反射到屏幕上。問題在於,儘管它們都是獨立定位的,但出於某種原因,它們在循環過程中似乎都繼承了相同的座標,所以似乎只有1個彈跳球。所有精靈都移動到相同的座標?
import pygame, sys, random
pygame.init()
size = width, height = 640, 400
screen = pygame.display.set_mode(size)
class Ball(pygame.sprite.Sprite):
image = pygame.image.load('assets/ball.gif').convert()
rect = image.get_rect()
max_speed = 2
speed = 0
direction = [1, 1]
def randomize(self):
random.seed()
self.rect.x = random.random() * width
self.rect.y = random.random() * height
self.speed = random.random() * self.max_speed
print ('%s %s %s') % (self.rect.x, self.rect.y, self.speed)
def update(self):
if self.rect.left < 0:
self.direction[0] = 1
if self.rect.right > width:
self.direction[0] = -1
if self.rect.top < 0:
self.direction[1] = 1
if self.rect.bottom > height:
self.direction[1] = -1
self.rect.x += self.speed * self.direction[0]
self.rect.y += self.speed * self.direction[1]
layers = pygame.sprite.LayeredUpdates()
black = 0, 0, 0
clock = pygame.time.Clock()
for i in range(0,10):
ball = Ball()
ball.randomize()
layers.add(ball)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
screen.fill(black)
layers.update()
layers.draw(screen)
pygame.display.flip()
clock.tick(30)
下面是從Ball.randomize()
輸出:
454 317 0.268577946144
560 175 0.777246064841
446 161 1.71602882781
337 221 0.298744471713
9 122 1.19615176471
304 351 1.45267115709
255 397 0.478593408657
135 213 1.04660721161
96 26 0.758952705602
389 106 0.954778970584
我認爲我不理解Ball.image實際上是如何pygame.image作品和以某種方式在所有實例共享同一個對象,但是我真的不知道如何證明它,也不知道如何解決它。
哎呀!謝謝 :) – DanH 2013-03-03 14:41:23