Как добавить второй прыгающий мяч в окно? - PullRequest
1 голос
/ 21 апреля 2009

Я кодировал анимацию (на питоне), чтобы пляжный мяч подпрыгивал вокруг экрана. Теперь я хочу добавить второй мяч в окно, и когда они столкнутся, они отскочат друг от друга.

Пока мои попытки этого не увенчались успехом. Есть идеи, как это сделать? Код, который у меня есть, приведен ниже.

import pygame

import sys

if __name__ =='__main__':

    ball_image = 'Beachball.jpg'
    bounce_sound = 'Thump.wav'
    width = 800
    height = 600
    background_colour = 0,0,0
    caption= 'Bouncing Ball animation'
    velocity = [1,1]
    pygame.init ()
    frame = pygame.display.set_mode ((width, height))
    pygame.display.set_caption (caption)
    ball= pygame.image.load (ball_image). convert()
    ball_boundary = ball.get_rect (center=(300,300))
    sound = pygame.mixer.Sound (bounce_sound)
    while True:
        for event in pygame.event.get():
            print event 
            if event.type == pygame.QUIT: sys.exit(0)
        if ball_boundary.left < 0 or ball_boundary.right > width:
            sound.play()
            velocity[0] = -1 * velocity[0]
        if ball_boundary.top < 0 or ball_boundary.bottom > height:
            sound.play()
            velocity[1] = -1 * velocity[1]

        ball_boundary = ball_boundary.move (velocity)
        frame.fill (background_colour)
        frame.blit (ball, ball_boundary)
        pygame.display.flip()

Ответы [ 2 ]

7 голосов
/ 21 апреля 2009

Вот очень базовая реструктуризация вашего кода. Это все еще можно привести в порядок, но оно должно показать вам, как вы можете использовать экземпляры класса.

import pygame
import random
import sys

class Ball:
    def __init__(self,X,Y):
        self.velocity = [1,1]
        self.ball_image = pygame.image.load ('Beachball.jpg'). convert()
        self.ball_boundary = self.ball_image.get_rect (center=(X,Y))
        self.sound = pygame.mixer.Sound ('Thump.wav')

if __name__ =='__main__':
    width = 800
    height = 600
    background_colour = 0,0,0
    pygame.init()
    frame = pygame.display.set_mode((width, height))
    pygame.display.set_caption("Bouncing Ball animation")
    num_balls = 1000
    ball_list = []
    for i in range(num_balls):
        ball_list.append( Ball(random.randint(0, width),random.randint(0, height)) )
    while True:
        for event in pygame.event.get():
            print event 
            if event.type == pygame.QUIT:
                sys.exit(0)
        frame.fill (background_colour)
        for ball in ball_list:
            if ball.ball_boundary.left < 0 or ball.ball_boundary.right > width:
                ball.sound.play()
                ball.velocity[0] = -1 * ball.velocity[0]
            if ball.ball_boundary.top < 0 or ball.ball_boundary.bottom > height:
                ball.sound.play()
                ball.velocity[1] = -1 * ball.velocity[1]

            ball.ball_boundary = ball.ball_boundary.move (ball.velocity)
            frame.blit (ball.ball_image, ball.ball_boundary)
        pygame.display.flip()
3 голосов
/ 21 апреля 2009

Вам, вероятно, следует создать класс для представления вашего пляжного мяча. Затем вы можете создать столько экземпляров, сколько захотите, и поместить их в список Python.

Затем вы просматриваете этот список в каждом кадре, обновляя и отображая каждый из них.

Вам нужно будет включить метод для проверки столкновения с другим шаром (это просто для кругов). Если обнаружено столкновение, задействованные шары должны имитировать отскок друг от друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...