pygame 游戏开发 基础物理建模 重力系统模拟

        游戏嘛,肯定有很多地方都与物理相关,所以需要物理建模来模拟相关的物理定律。于是乎,我就找到了一篇c++的重力系统模拟的文章(http://blog.csdn.net/poem_qianmo/article/details/7538725),然后在里面提取出了我想要的物理建模来应用到我的pygame中。

        重力模拟实现起来其实非常简单,我们都知道,重力的表现形式其实就是一个大小约等于9.8米每二次方秒,方向垂直地面指向地心的加速度。且由于X轴方向的速度不受重力影响,所以我们只要将物体的速度进行正交分解,处理竖直向下的Y轴方向即可。

       下面用本节的实例中的实现重力模拟的代码来具体说明,这一节着重讨论重力,所以演示时暂时先忽略下坠时的空气阻力与触地时的摩擦力。这是一个平抛运动,小球将具有水平方向的初速度,且受到向下的重力,即小球具有向下的加速度,若碰到地面就会进行反弹,速度反向。

       首先我们定义下坠物体的初始坐标与初始速度,初始横坐标x=10,初始纵坐标y=10,初始水平方向速度vx=3,初始竖直方向速度vy=0,重力加速度gy=3(这里为了方便演示,我们设置为3)

def main():
    x = 10    # 初始位置横坐标
    y = 10    # 初始位置纵坐标
    vx = 3    # 初始水平坐标速度
    vy = 0    # 初始竖直坐标速度
    gy = 3    # 重力加速度

然后对于重力环境的模拟代码,当触及地面之后,翻弹,速度相反

        x += vx         # 计算横轴坐标,每次刷新界面,横坐标x都加上一个vx的当前值 
        vy = vy+gy      # 计算Y轴方向速度分量,每次刷新界面,vy就加上一个gy(重力加速度)
        y += vy         # 计算纵轴坐标,每次刷新界面,纵坐标y都加上一个vy的当前值
        if y > 500:
            y = 500
            vy = -vy    # 当触及地面之后,纵轴速度反向

整个代码如下:


import pygame

def main():
    x = 10
    y = 10
    vx = 1
    vy = 0
    gy = 3
    pygame.init()
    clock = pygame.time.Clock()
    area = [500,500]
    screen = pygame.display.set_mode(area)
    pygame.display.set_caption("PHY")
    time = 10
    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)
        x += vx
        vy = vy+gy
        y += vy
        if y > 500:
            y = 500
            vy = -vy
        pygame.draw.circle(screen,[255,0,0],[x,y],10)
        pygame.display.update()
        time += 1

if __name__=="__main__":
    main()








好吧,python写的代码果然比c++简单明了的多,估计代码量比c++少了五分之四。感谢poem浅墨

嘿嘿,python至上!!!


  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值