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

来源:互联网 发布:小猪cms源码下载 编辑:程序博客网 时间:2024/04/30 15:32

        游戏嘛,肯定有很多地方都与物理相关,所以需要物理建模来模拟相关的物理定律。于是乎,我就找到了一篇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 pygamedef 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 += 1if __name__=="__main__":    main()








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

嘿嘿,python至上!!!