我希望每个球都能独立移动。我认为问题与它们具有相同速度有关,但我不知道为什么会这样或者那是否是问题所在。另外,为什么屏幕的右侧部分会以这种方式表现?我希望球能够在整个屏幕上正确地移动。
import sys
import pygame
import random
screen_size = (screen_x, screen_y) = (640, 480)
screen = pygame.display.set_mode(screen_size)
size = {"width": 10, "height": 10}
velocity = {"x": {"mag": random.randint(3,7), "dir": random.randrange(-1,2,2)}, "y": {"mag": random.randint(3,7), "dir": random.randrange(-1,2,2)}}
class Ball(object):
def __init__(self, size, position, velocity):
self.size = size
self.position = position
self.velocity = velocity
self.color = (255, 255, 255)
def update(self):
self.position["x"] += (self.velocity["x"]["mag"] * self.velocity["x"]["dir"])
self.position["y"] += (self.velocity["y"]["mag"] * self.velocity["y"]["dir"])
if self.position["x"] <= 0 or self.position["x"] >= screen_y:
self.velocity["x"]["dir"] *= -1
if self.position["y"] <= 0 or self.position["y"] >= screen_y:
self.velocity["y"]["dir"] *= -1
self.rect = pygame.Rect(self.position["x"], self.position["y"], size["width"], size["height"])
def display(self):
pygame.draw.rect(screen, self.color, self.rect)
def main():
pygame.init()
fps = 30
clock = pygame.time.Clock()
balls = []
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
(x, y) = event.pos
position = {"x": x, "y": y}
new_ball = Ball(size, position, velocity)
balls.append(new_ball)
for ball in balls:
ball.update()
screen.fill((0,0,0))
for ball in balls:
ball.display()
pygame.display.update()
clock.tick(fps)
if __name__ == "__main__":
main()