2016-03-18 9 views
0

Ich möchte eine Art Bildschirmschoner in Pygame machen, wo Blasen im Bildschirm prallen, und auch gegeneinander prallen. Wie kann ich das machen? Unten ist der Teil innerhalb des Bildschirms für Prellen:Pygame springenden Blasen

import pygame 
from pygame.locals import * 

WIDTH=1 
TV_SIZE=(800,900) 

pygame.init() 

CLOCK=pygame.time.Clock() 
TV=pygame.display.set_mode(TV_SIZE) 

class Ball(object): 

    def __init__(self,pos_x,x_dir,pos_y,y_dir,color,radius): 
     self.pos_x=pos_x 
     self.x_dir=x_dir 
     self.pos_y=pos_y 
     self.y_dir=y_dir 
     self.color=color 
     self.radius=radius 
    def move(self): 
     if self.pos_x>=TV_SIZE[0]-self.radius or self.pos_x<=self.radius: 
      self.x_dir=-self.x_dir 
      self.pos_x+=self.x_dir 
     if self.pos_y>=TV_SIZE[1]-self.radius or self.pos_y<=self.radius: 
      self.y_dir=-self.y_dir 
      self.pos_y+=self.y_dir 
     else: 
      self.pos_x+=self.x_dir 
      self.pos_y+=self.y_dir 
      pygame.draw.circle(TV,self.color,(self.pos_x,self.pos_y),self.radius,WIDTH) 
      pygame.display.flip() 

ball_1=Ball(100,5,100,5,(100,100,100),50) 
ball_2=Ball(31,8,31,8,(200,200,100),30) 

while True: 
    for e in pygame.event.get(): 
     if e.type==QUIT: 
      pygame.quit() 

    ball_1.move() 
    ball_2.move() 
    TV.fill((0,0,0)) 

    CLOCK.tick(30) 

Antwort

1

Diese funktionieren könnte:

  1. Überprüfen Sie, ob der Abstand zwischen den Kreiszentren. (Wenn es weniger als die Summe ihrer Radien ist, kollidiert es) Um Entfernungen zu finden, finde x- oder y-Pixel-Abstände. Der Abstand in Pixeln:

    sqrt((x_dist**2) + (y_dist**2)). 
    

http://i.stack.imgur.com/EFR8f.png

  1. Wenn sie kollidieren, die Bounce starten. Dann brauchst du Physik. Denken Sie daran: Kraft = Masse (Beschleunigung), Gesamtenergie = potentielle Energie + kinetische Energie. Aber ich kann dir nicht wirklich helfen. Ändern Sie einfach x_dir und y_dir, je nachdem, wie sie kollidieren. Experiment.

  2. Fühlen Sie sich frei, mich etwas zu fragen! = D