您的位置:首页 > 其它

pygame游戏开发 基础物理建模 粒子系统模拟

2013-08-30 17:09 232 查看
粒子是一种微小的物体,在数学上通常用点来表示其模型。我们可以把粒子想象成颗粒状的物体,如雪花,雨滴,沙尘,烟雾

等特殊的事物。又比如游戏中的怪物,晶体,材料,在需要的时候,也可以通过粒子来实现。俗话说“不积跬步,无以至千里,

不积小流,何以成江海”,单个的粒子是比较平凡的存在,但是如果将大量的粒子聚到一起,就可以实现很多神奇的效果了。

在python中想要定义一个粒子是非常容易的。用“类”实现。

class Snow():
x = 0               # 雪花的横坐标
y = 0               # 雪花的纵坐标
vx = 0              # 雪花的水平速度
vy = 0              # 雪花的竖直速度
def __init__(self):
self.x = random.randint(0,500)   # 初始化雪花横坐标
self.y = random.randint(0,500)   #初始化雪花纵坐标
def getsnowpos(self):
return self.x,self.y         # 返回雪花坐标位置


接下来是雪花飘舞的核心代码

def main():
pygame.init()
clock = pygame.time.Clock()
area = [500,500]
screen = pygame.display.set_mode(area)
pygame.display.set_caption("PHY")
swlist = []
for i in range(0,50):      # 建立50个雪花的类
swlist.append(Snow())
while True:
screen.fill(0)
event = pygame.event.poll()
if event.type == pygame.QUIT:
pygame.quit()
exit(0)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_n:
pygame.quit()
exit(0)
clock.tick(30)
for snow in swlist:   # 每个雪花位置的变换
# if random.randint(0,1):
snow.vx = random.randint(-3,3)  # 雪花的横向速度
snow.vy = 1                     # 雪花的竖直速度
snow.x += snow.vx               # 雪花的横轴移动位置
snow.y += snow.vy               # 雪花的纵轴移动位置
if snow.y > 500:
snow.y = 0
pygame.draw.circle(screen,[255,255,255],snow.getsnowpos(),1);
pygame.display.update()


当然,逻辑还是有待改进的,首先就没加入重力的作用;其次还可以加入风的效果,只需要在每次赋值snow.vx时加入一个恒定的量即可



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐