Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python物理库?_Python_Physics_Pygame - Fatal编程技术网

Python物理库?

Python物理库?,python,physics,pygame,Python,Physics,Pygame,有没有适合Linux的Python最新物理库?我刚刚开始使用PyGame学习Python,但PyGame缺少物理库并不酷。我花了大约两个小时试图找到一个好的物理图书馆,但这就像试图抓住石油;我似乎做不到 我几乎不需要物理引擎;我所要做的就是编程一个物体向上跳,然后落回地面。似乎有一些简单的碰撞正在发生(我认为PyGame可以处理),但真正困扰我的是跳跃计算。如果没有任何好的可用的物理库,这个问题似乎很简单,我可以试着找到一个基本的加速度方程和重力方程,并尝试应用它们。。。不过,我想避免这样做 谢

有没有适合Linux的Python最新物理库?我刚刚开始使用PyGame学习Python,但PyGame缺少物理库并不酷。我花了大约两个小时试图找到一个好的物理图书馆,但这就像试图抓住石油;我似乎做不到

我几乎不需要物理引擎;我所要做的就是编程一个物体向上跳,然后落回地面。似乎有一些简单的碰撞正在发生(我认为PyGame可以处理),但真正困扰我的是跳跃计算。如果没有任何好的可用的物理库,这个问题似乎很简单,我可以试着找到一个基本的加速度方程和重力方程,并尝试应用它们。。。不过,我想避免这样做


谢谢您的帮助。

试试pyODE,它是opendynamicengine的python绑定


你可以找到更多的信息。

是另一个你可能想看的有希望的信息。

根据ODE网站的介绍,ODE包本身现在包含基于CPython的Python绑定;pyODE绑定被认为是过时的。安装说明包含在上一页中

默认情况下,这是针对Python2的,但我也能够使用Python3进行绑定,只需最少的工作量(MacOSX)。我甚至可以运行教程

这可能不符合主题,但为了记录在案,以下是我必须更改的内容:

  • 我必须通过取消注释
    sqrt
    sin
    cos
    asin
    acos
    (第33-37行,文件版本:2001年3月20日)的
    定义来更改
    OpCode.h
    。这是我所需要的一个丑陋的攻击,因为如果没有这个ODE本身,就不能使用双精度算法进行编译,如果我们可以信任ODE页面上的文档,就需要使用python绑定
  • 我必须通过在第18行之后添加以下行来更改
    setup.py

    # bugfix: in Python3 read() returns bytes, which need to be converted
    # to strings
    try: 
        ode_cflags = [x.decode("utf-8") for x in ode_cflags]
        ode_libs = [x.decode("utf-8") for x in ode_libs]
    except:
        # in Python2 we just continue
        pass
    
  • 要运行教程,请在我使用的
    demos
    目录中

    $ 2to3 -w *.py
    

  • 就这样。

    基本的物理运动学方程就是你所需要的。即使这些问题已经得到了回答,如果我是你,我还是会用手去做,只是因为使用图书馆似乎有点过头了。启动速度方程:

    velocity = initial velocity + (acceleration * time) 
    
    在此基础上,我们整合以找到位置:

    position = initial position + (initial velocity * time) + (acceleration * time^2)/2
    
    您的跳跃是为了计算角色的y位置,所以只需使用该方程来计算y位置,并使用初始速度和加速度。重力引起的标准加速度为每秒-9.8米^2(至少在地球表面——不同的行星是不同的)。从角色所在的初始位置开始,如果地面对你来说是0,则从0开始

    因此:

    选择一个初始速度
    v
    值,以在跳跃开始时提供向上运动,t应为他开始跳跃后经过的比赛时间

    您只需要一行代码就可以做到这一点,不需要库

    编辑:处理着陆时要做的事情


    所以在现实世界中,加速度是由不平衡力引起的。重力总是作用在你身上,但当你站在地面上时,它会被地面的“法向力”抵消。只要你站着的地面足够坚固,足以支撑你的重量,地面就会向上推,并反重力,你就不会向下加速。因此,在游戏中,如果你没有实际模拟力,当你的角色接触地面时,只需将加速度从-9.8更改为0。如果地面平坦,您的跳跃将在
    位置=初始位置时结束

    好的,在经历了巨大的痛苦并“成功”安装了模块之后,我运行了一个PyODE示例,它给出了这样的信息:“ImportError:没有名为ode的模块”。嗯??是我安装的!知道这里发生了什么吗?@Elliot,你能告诉我你的python版本和操作系统,以及你如何安装pyODE吗?我使用的是windows安装程序,它是开箱即用的。我在Linux(Ubuntu 10.10)上使用的是Python 2.7。pyODE似乎正在安装到2.6,但当我将其中一个示例作为Python 2.6(使用别名)运行时,仍然会出现相同的错误。我首先安装ODE,然后通过“Python setup.py install”命令行函数安装pyODE。基本的物理运动方程就是您所需要的。即使这些问题已经得到了回答,如果我是你,我还是会用手去做,只是因为使用图书馆似乎有点过头了。开始速度方程。嗨,恰克,谢谢你的清晰简洁的回答。我将我的公认答案改为你的答案,因为它可能对未来寻求实现“跳跃”代码最简单方法的人更有用。@elliot感谢未来的反馈更新:值得注意的是,许多游戏实现的跳跃不是基于物理的。例如,在2d马里奥游戏中,马里奥摔倒的速度要快得多。在3d马里奥游戏中,他摔倒的速度要慢得多。只是想一想——如果你不想,你的游戏不必遵守物理!
    y = vt + (-4.9)t^2