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

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

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

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

         在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时加入一个恒定的量即可




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值