捣蛋猪吧 关注:33,220贴子:1,247,678

【真干货来了】捣蛋猪基础理论简明概要

取消只看楼主收藏回复

抱歉由于时间不能逐一将一些名词向各位解释,也不能在捣蛋猪里截图。我会尽量在纸上画一些示意图再拍照发上来。
本帖中部分结果在1.5.0版本中实验,可能与最新版本不符
本帖需要的知识背景:初中与部分高中的数学与物理知识

还是@下大王 的图


IP属地:上海1楼2017-07-10 20:11回复
    以前猪吧里经常出现一个词,叫技术党。这个词,简单说就是捣蛋猪玩的很6的人,但在猪吧可以细分为三种不同的类型:
    ·擅长载具建造的
    ·擅长理论分析的
    ·擅长程序代码的
    本帖主要普及关于捣蛋猪基础理论的知识。


    IP属地:上海2楼2017-07-10 20:11
    收起回复
      本帖中的基础理论分为三大模块
      1、 游戏环境
      2、 部件特性
      3、 实验方法
      然而这个假期可能更不到实验方法


      IP属地:上海3楼2017-07-10 20:12
      回复
        1、 游戏环境
        这里所说的游戏环境,包括游戏最基础的设定,与地面、墙壁等关卡内的“自然物体”,也涉及一部分程序内部的内容。
        捣蛋猪是基于unity3d中与box2d有关的命令的一款游戏,unity3d是一款三维游戏制作引擎。虽然unity3d可以用于平面游戏的制作,但是捣蛋猪中仍然有少量3d遗留的bug,比如三向箔。关于unity3d和box2d,楼主与目前吧内的所有人都知之甚少,下面仅以楼主所理解的box2d来解释游戏的架构。


        IP属地:上海5楼2017-07-10 20:12
        回复
          (1)物理世界
          Box2D物理引擎可以创建的物理世界具备下面3个特点①:
          --物理世界中存在一个重力
          --物理世界可以是一个存在边界的范围(有碰撞效果)
          --在世界中加入静态和动态物体(具备质量和位置)。它们被用来模拟现实的运动规律
          重力的大小目前仍未知,因为我们无法得知一单位质量和长度在游戏中代表什么。根据本吧的一篇精品帖,如果假定捣蛋猪世界与地球的重力加速度相同,即9.80665m/s^2,那么测得的一格长度约等于0.94m。
          捣蛋猪世界中并没有空气,机翼、雨伞等空气动力学部件所带来的力只是根据游戏内置的公式计算得到的。对于非空气动力学部件,空气阻力被简化为一个恒定的阻力,这个阻力与物体运动方向相反。所不同的是,其大小与物体的质量、速度有关。而与物体的形状、迎风面积等无关。根据牛顿第二定律,在已知质量与长度单位的前提下,理论上可以通过录制视频算出这个力的大小。
          上左定则也是本游戏中一个奇怪的存在,即在某一部件的上方和左方的某些部件,与其下方和右方的同种部件表现出不同的特性。例如,判定断裂时,与木框连接的部件,如果在木框的上或左侧,断裂时显示snap;如果在木框的下或右侧,断裂时显示krak。另外,小铁轮如果放在框或分离器的上或左侧,铁轮受力时会像下端固定、掰向侧面后松手后的弹簧一样摆动,在下或右侧时则不会。
          除此之外,捣蛋猪所在的这个物理世界,大致遵循牛顿力学的框架。
          http://blog.csdn.net/u014096244/article/details/40183987


          IP属地:上海6楼2017-07-10 20:15
          收起回复
            1.2 物体
            在box2d中,所有的物体都是刚体,简单理解就是形状永远不变的物体,因此才有“捣蛋猪部件永远不损坏”一说。物体由本体①与贴图两部分构成。box2d只负责物理模拟,贴图不归它管,而一个本体在引擎中包含刚体①、形状、框架(fixture)三部分。
            ①box2d中刚体和物体通常指一个词,但在本文中为了区别,将刚体与贴图的集合统称为物体。本体为本帖自创,为了方便,下文中若无特别说明,以物体代指本体。


            IP属地:上海12楼2017-07-12 10:05
            收起回复
              刚体是一个物体的基础,形状与框架都依附与它存在。刚体设定了该物体的类型、位置与角度、阻尼、休眠参数等参数。
              物体类型
              box2d中的物体分为三类:静态物体、平台物体、动态物体
              静态物体,即静止的物体,无论受多大力也不会运动,质量为0(程序中用0表示质量无限大)。捣蛋猪中的墙壁、地面即为静态物体;
              平台物体,是按照固定轨迹在做运动的物体,质量也为0。捣蛋猪中没有,其它一些游戏中左右移动的平台就属于此类。
              动态物体,铁框、轮子等部件和小猪大冒险沙盒中的桥、铁盒等都是动态物体,可以移动。


              IP属地:上海13楼2017-07-12 10:19
              收起回复
                阻尼
                阻尼是在box2d中对空气阻力的模拟,表示一个物体速度减小的快慢。与之前所说的恒定的阻力不同,阻尼是一个物体的固有属性,是一个固定的数值,在程序内部已经被设定好,与质量、速度等都没有关系。
                大部分部件的阻尼都是一样的,但沙袋、猪王、绳子的阻尼要大得多(金猪未知,尚未实验)。例如,沙袋、猪王、绳子自由下落时,他们的速度在开始下落一段时间后就不再加快,看起来像是慢悠悠地下落。并且绳子拴在较快速的车上运动时,将在空中飘动的绳子剪断,断掉的一端没飞多久就落地了。
                气球的阻尼可能也较大。


                IP属地:上海14楼2017-07-12 10:33
                回复
                  补充:
                  box2d物理引擎只在点击建造格右边的对勾后才开始运行,其他如选关、拼装载具的界面都没有物理引擎参与。但是三向箔是例外。


                  IP属地:上海15楼2017-07-12 10:35
                  回复
                    休眠参数与游戏无关,各位如果觉得需要讲就再扩充一下


                    IP属地:上海16楼2017-07-12 10:37
                    回复
                      物理概念
                      在box2d中,能使物体运动状态发生改变的并不只有力,还有力矩和冲量。
                      力矩使物体转动状态发生改变。比如推门时,分别在靠近门轴、靠近门把手的地方用同样大小的力推门,但是门被推开的程度不同,这时我们说这些力造成的力矩不同,靠近门把手处的力矩比靠近门轴处的力矩大。如果要使门被推开的程度相同,即力矩相同,那么靠近门轴处用的力就要比靠近门把手处用的力大得多。可见,力矩除了与用力的大小有关之外,还与这个力的作用点与转动轴或支点的距离有关;这个距离越大,力矩越大,转动幅度越大。这段距离叫作力臂。
                      冲量表示一个力在一段时间内对物体的作用效果。比如一个力F在一段时间t 里持续作用在一个静止的物体上,这段时间之后突然撤掉这个力,这个力会使这个物体匀速直线运动。
                      不说了我感觉我讲不清楚(绝望) 总之百度上有


                      IP属地:上海18楼2017-07-12 10:59
                      收起回复
                        框架规定一个物体的基本属性,这些属性包括密度、摩擦、恢复、碰撞筛选标记、感应器标记。
                        密度不用说。但是值得注意的是,捣蛋猪里竟然不是直接设定质量,而是通过密度乘以体积间接得出的,这一点很奇怪。
                        摩擦其实就是摩擦系数,这个不讲了,一楼提过要有高中物理知识背景(甩锅)
                        恢复表示物体的弹性大小,这个我也不太懂
                        碰撞筛选规定,哪些物体之间有相互碰撞,哪些没有,比如脱框的猪和框就没有碰撞
                        感应器没啥用不讲


                        IP属地:上海19楼2017-07-12 11:12
                        收起回复
                          形状顾名思义就是形状,严格点说叫物体的几何外形,也就是通常说的“碰撞箱”。
                          在box2d中,形状依附于框架,框架依附于刚体,刚体带着形状和框架一起运动。
                          补充:
                          一个刚体可以有多个框架。假如要用box2d做一辆自行车,两个轮胎、车座、车把手、骨架等就可以用不同的框架,并将它们依附在同一个刚体上。捣蛋猪中很多部件其实就是由多个框架组成的,比如木轮由一个三角形和一个圆形的框架构成一个刚体。这可以通过三向箔实验证明。


                          IP属地:上海20楼2017-07-12 11:17
                          收起回复
                            然而不想讲游戏环境了。。。


                            IP属地:上海21楼2017-07-12 11:33
                            收起回复
                              二、部件特性
                              关于连接
                              为了方便研究,此处引入连接边的概念
                              每个部件都在正方形格子里,所以都有四条边,其中能与相邻的其他部件连接的边叫作连接边
                              连接边分为三种,在此命名为A连接边,B连接边,C连接边,因为楼主想不到更好的名字了。。如果有更好的方案欢迎分享
                              A连接边能与A连接边、B连接边、C连接边连接,铁框、木框、分离器的四边都是
                              B连接边能与A连接边、B连接边连接,不能与C连接边连接,如机翼的上下两边
                              C连接边能与A连接边连接,不能与B连接边、C连接边连接,如拳套、TNT的四边


                              IP属地:上海22楼2017-07-12 11:55
                              收起回复