我想在pygame中制作一种屏幕保护程序,其中气泡在屏幕内反弹,并且还相互反弹 。我怎样才能做到这一点?下面是在屏幕内弹跳的部分:
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)
答案 0 :(得分:1)
这可行:
检查圆圈中心之间的距离。 (如果它小于它们的半径之和,则它是碰撞的)要找到距离,找到x或y像素距离。以像素为单位的距离为:
sqrt((x_dist**2) + (y_dist**2)).
http://i.stack.imgur.com/EFR8f.png
如果它们发生碰撞,请开始反弹。然后,你需要物理学。记住:力=质量(加速度),总能量=势能+动能。不过,我无法帮助你。只需根据它们的碰撞方式更改x_dir和y_dir即可。实验
随时问我什么! = d