记录精彩的程序人生
https://blog.csdn.net/Const_Gong/article/details/51459197 声明:本教程翻译自:Box2D C++ tutorials-Forces and impulses,仅供学习参考。 力和冲量(Forces and impulses) 让物体移动,需要对其施加力或者冲量。可以通过时间的不断积累对物体施加力的作用来改变物体的运动,然而冲量作用于物体则会立刻改变物体的速度。举个例子,想象一下现在你的车坏了,你想推车,可以选择驱动另外一辆车缓慢开向这辆坏了的车,当两辆车的保险杠接触之后,继续对这辆车施加推力,然后通过时间不断的积累慢慢的让其移动。或者也可以用冲量,驱动一辆完好的车全速驶向这辆坏了车。具体使用哪种方法取决于你。 也可以通过简单设置物体的位置来瞬间‘曲速(参见Warp drive)’物体。在游戏中你可能想有一个瞬移的特性,但是你要知道在真正的物理世界当中并不存在这样一种特性!Box2D的全部侧重点是让所模拟的物体看起来更真实,基于这一点考虑我会建议你尽量使用力和冲量来移动物体。大多数时候这么做看起来貌似过于严谨,但是在真实的世界....
https://blog.csdn.net/Const_Gong/article/details/51459188 声明:本教程翻译自: Box2D C++ tutorials-World settings ,仅供学习参考。 世界(Worlds) 世界(Worlds)作为Box2D世界里主要的实体,在之前的讨论话题中已简单的介绍过。当你创建或者删除物体的时候,可以调用世界里的方法来完成这些功能,所以世界也管理着所有对象的空间分配。这也就意味着世界非常重要,那么就让我们来看看世界到底可以做些什么吧。 -定义重力加速度 -调用物理模拟 -发现定制器的作用域 -切断射线并找到相交的定制器 最后两个特性会在稍后的话题里展开讲解,目前我们只看第一个特性以及世界的生命周期。testbed框架为我们完成了这些,而且作为m_world类成员变量我们也已经使用过了,所以相比于创建一个测试场景来说,我们只对它做一个快速查看。 世界(world)的创建像其它普通类型一样,在构造函数里进行基本的设置。 b2Vec2 gravity(0, -9.8); // normal earth gravity, 9....
https://blog.csdn.net/Const_Gong/article/details/51459183 声明:本教程翻译自: Box2D C++ tutorials- Fixtures ,仅供学习参考。 定制器(Fixtures) 定制器用来描述场景中对象的大小,形状,材质属性等。一个物体可以附加多个定制器,物体的质心会被定制器的附加顺序所影响。当两个物体相撞时,会根据各自的定制器作出相应的反应。定制器的主要属性如下: 形状 - 多边形或圆弧 恢复 - 定制器的弹力 摩擦 - 光滑程度 密度 - 物体大小的重量 我们会谈到上面的每一个概念,并针对它们做一些实验(isSensor属性可以让定制器变成’传感器‘,之后的教程里我们会谈到它)。让我们就以上一次话题’物体‘作为起点,创建一个简单的动态物体作为开始吧。那么FooTest类的构造函数看起来会是下面这个样子: FooTest() { b2BodyDef myBodyDef; myBodyDef.type = b2_dynamicBody; // this will be a dynamic body myBody....
https://blog.csdn.net/Const_Gong/article/details/51459174 声明:本教程翻译自:Box2D C++ tutorials-Bodies,仅供学习参考。 物体(Bodies) 物体是物理场景中的基本对象,但是这里的物体并不是你看到的实际互相弹跳碰撞的实物。听起来很费解吗?挺住!马上做解释! 你可以把物体想象成是一种看不见摸不着的实物的属性。这些不可见的属性是: 质量(mass)-实物到底有多重 速度(velocity)-某方向上实物到底运动多快 转动惯量(rotational inertia)-开始或停止转动需要多大的力 角速度(angular velocity)-某方向实物转动的速度有多快 位置(location)-实物在哪 角度(angle)-实物面向哪个方向 即便你知道一个对象的所有这些特性,你仍然不清楚这个对象的长相或者它与其它物体产生碰撞的时候会作出什么样的反应。我们需要使用定制器(fixtures)来定义物体的形状和大小,关于定制器我们会在本教程的下一个话题进行讲解。目前我们还是使用一个简单的盒子来代替随后出现的定....
https://blog.csdn.net/Const_Gong/article/details/51459168 声明:本教程翻译自:Box2D C++ tutorials-Making a test,仅供学习参考。 创建属于你的测试 让我们向testbed中添加一个测试,这里只是一个简单的例子,一开始不会实现很多功能,但是作为一个例子我们会看到所有需要编辑和修改的地方。 首先需要一个Test类的子类来定义测试自身。在Testbed/Tests文件夹下面,应该可以找到一大堆在testbed项目中使用的名字相近的.h头文件。在这个目录下可以添加自己创建的.h头文件,取一个简洁的名字比如呃…FooTest。现在,我们将会创建一个只能在屏幕顶部显示一些文本的空例子。 #ifndef FOOTEST_H #define FOOTEST_H class FooTest : public Test { public: FooTest() { } //do nothing, no scene yet void Step(Settings* settings) { //run the defaul....
https://blog.csdn.net/Const_Gong/article/details/51459143 声明:本文翻译自Box2D tutorials-Testbed structure ,仅供学习参考。 Testbed结构 testbed框架可以让你高效的添加新的测试。当定义一个新的测试,只要写出针对于测试必要的代码即可。相对于所有测试来说的,相同功能的方法例如,创建、销毁、重设,以及控制面板上的选中框和按钮,都由testbed框架来处理,永远都不需要你亲自更改。 每个测试的设置方法——如何设置场景,鼠标/键盘的输入,等等,可以按需设置。在创建属于我们自己的测试之前,先来看看一个测试的生命周期是怎样的。 图中橘色的部分,是我们在自己的测试中需要添加或修改的部分。具体来说,我们会通过创建一个Test类的子类,Test类封装了所有公共特性,我们会在子类中覆盖其中一些方法。让我们来看几个在Test类中可能会用到的虚方法。 class Test ...{ virtual void Step(Settings* settings); virtual void Keyboard(....
https://blog.csdn.net/Const_Gong/article/details/51457330 声明:本文翻译自Box2D C++ tutorial-Setting up ,仅供学习参考。 环境设置包括三种主流系统: -Windows -Linux -Mac 由于最新的Box2D版本,源码中针对Windows和Mac平台中的主流IDE(VS2010和XCode4)已经进行了整合,所以这里就不进行翻译了,再者教程原文中的设置看起来已经过时了,有兴趣的读者可以自己查看,目的主要就是让Testbed例子跑起来。因为教程的后面都是基于这个框架对例子进行讲解的。 下面简单说一下基本操作步骤,源代码下载下来之后,进行解压,打开Box2D v2.2.1文件夹,进入Build目录即可看到名为VS2010和XCode4的两个文件夹,进入对应的文件夹即可看到对应的IDE入口程序。这里我用的是XCode4,用XCode4打开后,选择左上角的项目名称为Testbed,编译即可运行,顺利的话即可看到类似下面的窗口, 如果看到类似这个窗口,那么祝贺你,你成功了! Box2D C++ ....
https://blog.csdn.net/Const_Gong/article/details/51457221 声明:本文翻译自Box2D C++ tutorial-Instroduction 仅供学习参考。 简介 Box2D这个名字是世界上2D物理引擎中最好的命名,在如今大部分软件都习惯采用动物的名字命名的情况下,似乎Box2D这个名字看起来有点土,但是名字仅仅是个名字,就像玫瑰总是能够散发出香气一样,不管她叫什么玫瑰。轻量级、健壮、高效以及非常的小巧。并且在很多平台上都开辟了很多应用。而且还是开源和免费的。详情可见Box2D官方网站http://www.box2d.org。 物理引擎实现了在实时逼真的环境中对物体的物理特性进行了模拟。虽然她可以在很多其他应用中使用,但是她的诞生却是作为游戏中的类库而产生的,因此大部分的游戏软件都会以Box2D作为主要的物理引擎来使用。引擎主要是由Erin Catto(译者注:作者twitter:@Erin Catto,需翻墙)开发并维护,牛b的物理引擎使用起来不应该像全日制工作那样不爽,但是使用牛b的Box2D物理引擎完全可以轻松的当作一种....
https://blog.csdn.net/Const_Gong/article/details/51459214 声明:本教程翻译自:Box2D tutorials-Moving at constant speed,仅供学习参考。 以匀速移动物体 游戏中一种常见的需求是让物体做匀速运动。例如横屏游戏中的玩家角色,太空飞船或者汽车,等等。根据游戏的不同,有时候物体应该逐渐改变速度,其他情况又希望能够瞬间开始和停止运动。使用SetLinearVelocity方法精确的设置物体速度,这种方法看起来非常诱人,而且这么做也可以达到目标,但是这种方法有其自身的缺点。虽然这么做在屏幕上看起来很好,但是直接设置物体的速度不是参与模拟物理世界的正确方法。让我们看看如何使用实际的力和冲量来使物体达到特定速度。 我们将会看到两种情况,一种是物体立即开始移动到特定速度,另一种是物体缓慢移动直到达到特定速度。一开始,我们需要一个有动态物体的场景,然后再放一些静态物体的篱笆墙来防止这个动态物体到处跑。篱笆墙的场景在后面的话题中还会经常遇到。为了持续跟踪用户所做的操作,我们会创建一个类成员变量来记录上一次用户....
https://blog.csdn.net/Const_Gong/article/details/51464603 声明:本文翻译自Box2D C++ tutorial-World querying,仅供学习参考。 查询World 通常你可能想知道在给定的场景中都有哪些实体。例如有一个炸弹爆炸了,周围的所有实物都会受到不同程度的破坏,那么在RTS(译者注:Real-Time Strategy,即时战略)游戏当中,当玩家拖拉一个选框的时候,玩家可以合理的选中其中尚未完全破坏的单位。这种快速查询部分场景中尚未被完全损坏的单位的方法及其细节,就属于“查询World”的范畴。 Box2D提供了两个工具来完成这个功能-射线投射和AABB框测试。呃,射线投射是…别忘了上一篇刚刚介绍过哦!在上一篇中我们使用近似纯手工的方法实现的这个功能,当时通过遍历World中的定制器(fixture)来检测哪个物体距离射线原点最近。当场景中有大量物体时候,这种方法很低效。一个更好的办法是使用world自有的RayCast方法。此方法可以通过引擎来捕捉射线路径附近的定制器。 射线投射,高效的遍历方法 既然上一篇中我....
https://blog.csdn.net/Const_Gong/article/details/51464597 声明:本教程翻译自:Box2D C++ tutorials - Ray casting,仅供学习参考。 射线投射经常用来找出部分物理世界当中已经存在的物件。所谓射线就是一条直线,我们可以通过使用Box2D当中提供的方法来检测是否与某个定制器(fixture)有交点。我们也可以找出与定制器交点的法线。 下面就是上面我提到的方法,如果射线与某个定制器发生碰撞则返回true。这里需要注意的是此方法是b2Fixture类的一个成员,这也就是说首先我们满足一个射线对儿这个基本条件才行。 bool b2Fixture::RayCast(b2RayCastOutput* output, const b2RayCastInput& input); 现在让我们看一下输入、输出参数。直接从源代码中可以看出b2RayCastInput包含了哪些参数: // Ray-cast input data. The ray extends from p1 to p1 + maxFracti....
https://blog.csdn.net/Const_Gong/article/details/51464593 声明:本教程翻译自:Box2D C++ tutorials-Sensors ,仅供学习参考。 传感器(Sensors) 在上一个话题中,我们看到,可以通过一些设置防止两个定制器发生碰撞。它们肆无忌惮的互相穿透,好像压根儿就没有看到对方,即便它们在穿透的过程中停止运动,也会保持着重叠的状态。也许这可能就是你想要的特性,但这么做有一个缺陷:既然互相之间没有碰撞,那么我们也就永远都不会获得BeginContact/EndContact信息。 如果我们让两个实体不发生碰撞,就像上一个话题例子中的船和飞机一样,但是我们依然想知道它们之间什么时候发生重叠。比如说,当一架敌军飞机飞到我方友军船只头顶的时候投下一枚炸弹,或者是其它类似的游戏逻辑。如果简单的关闭船和飞机之间的碰撞特性,那么我们就得不到重叠的响应事件,不过我们还有另外一个办法。 当你创建定制器(fixture)的时候,可以设置成员变量isSensor为true,设置此定制器为’传感器(sensor)’的一员,或者如果定制....
https://blog.csdn.net/Const_Gong/article/details/51464583 声明:本教程翻译自:Box2D C++ tutorials Collision callbacks,仅供学习参考。 碰撞回调(Collision callbacks) 当物理场景中的物体移动或者彼此之间发生碰撞的时候,Box2D会为我们处理所有必要的碰撞检测,对于这一点我们不必过于担心。但是就整个游戏来说,偶尔我们需要在物体发生碰撞的时候触发一些事件。例如当游戏玩家触碰到怪物的时候,玩家应该over,等等。我们需要一种从物理引擎获取此信息的方法。 在画自己的图像这个话题中,我们在游戏场景中创建了一个物体作为研究对象,并在每一帧对物体当前位置做了查询操作,并对物体进行了渲染。之所以每帧对物体都进行渲染,是因为物体的位置/旋转每一帧似乎都在不停的变化。但是碰撞则有一点点不一样,它并不是每一帧都会发生,它的发生频率通常少于渲染帧率。所以如果还是每帧都去询问物理引擎某个物体是否发生碰撞,这就像是旅行当中,车中后座的孩子不停的问你:”我们到了吗?怎么还没到啊…“,而大部分时候得....
https://blog.csdn.net/Const_Gong/article/details/51469002 声明:本文翻译自Box2D C++ tutorial-Removing bodies safely,仅供学习参考。 安全地移除物体 除非你正在完成一个最基本的游戏,否则很有可能你会在游戏进行的某一时刻删除一些物体。比如说当玩家杀死一个敌人后,所发出的子弹需要被清除掉,还比如说两个物体发生碰撞其中一个完全毁坏,等等很多此类的例子。在代码中移除一个物体简单的令人发指-只要调用world->DestroyBody(b2Body*),如果进行删除操作期间没有对此物体发生调用,那么整个删除操作就完成了。问题经常出现在删除物体的同一个时间步长内发生对此物体的调用,通常是一个碰撞回调。如果我们回想一下之前碰撞回调的方法,我们会发现不能在碰撞回调内部删除物体,因为此时world正好运行在同一个物理步长中,此时被删除的物体还处于运行期间,这么做不是一个好的办法。 如果你使用线程或者计时器(timers)来移除物体的话,会经常碰到类似的情况,比如说你想在游戏中某个事件发生后的几秒钟删....
各大AI 开放平台一览 百度AI 腾讯AI 开放平台 阿里人工智能 网易人工智能 亚马逊人工智能服务 Inter 英特尔人工智能服务 京东AI 海康威视 AI Face++ AI 小米小爱 AI 搜狗 AI OLAMI 欧拉密 AI 讯飞 AI 版权声明:本文为CSDN博主「简简单单OnlineZuozuo」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_15071263/article/details/82908201
****https://blog.csdn.net/Const_Gong/article/details/51469008 声明:本文翻译自Box2D C++ tutorial-Ghost vertices,仅供学习参考。 题外话:因为在Box2D的用户手册的第四章中,我把ghost vertices翻译成了幽灵顶点,所以这里还延续这个翻译吧,如果有人有更恰当的翻译,指出来我会改正,:)。好了,下面开始正文。 (注意:本话题接下来要说的内容和其它教程并不太一样,因为其它教程是基于Box2D v2.1.2版本的,此版本没有边缘形状(译者注:edge shapes,以后简称为边缘)这个概念。我刚开始写这个话题的时候差点忽略了这个问题。本次话题的讨论基于Box2D v2.2版本。) 幽灵顶点(Ghost vertices) 在’跳跃问题‘这个话题中我曾经说过,对于大多数学习Box2D的新同学来说,最常问的问题就是“如何告诉我的游戏角色当前正站在地面上?”。现在看来,在这问题上貌似是我错了…由此也引出我们今天的这个话题。 最近出现一个常见的问题是“为什么我的角色在平坦的地面上移动的时候会出现一....
https://blog.csdn.net/Const_Gong/article/details/51464567 声明:本教程翻译自:Box 2D C++ turorials - Anatomy of a collision,仅供学习参考。 在Box2D中,经常会遇到物体之间的碰撞问题,当一个碰撞发生时,就是利用定制器(fixtures)用来做碰撞检测的。碰撞可以以很多种方式进行,我们可以在碰撞过程中获取大量信息用在游戏逻辑中。 比如说,你可能想知道这几条信息: 碰撞的开始和结束 定制器中的哪个点有碰撞接触 定制器之间法向量的关系 碰撞过程中产生了多大的能量以及会产生有多大的响应 通常情况下碰撞发生的速度非常快,但是这篇文章我们会对一个碰撞进行讨论,把它的速度降到很慢,以此让我们来仔细看看碰撞过程中到底发生了什么,以及我们可以从中得到哪些相关信息。 故事发生在两个多边形定制器(fixtures)之间,为了能够更好的控制这两个多边形,我们选择在失重的世界(重力加速度为零)创建它们。其中一个是静止的四方盒子,另一个是面向四方盒子进行横向移动的三角形。 场景中,三角形底部的角会和盒子....
通达信公式编写初中高级全套教程附通达信全部函数表.rar 不解释
https://libgdx.badlogicgames.com/news.html libGDX 1.9.10 released Tomski, 2019-07-19 15:12:47 libGDX 1.9.10 Yes thats right, 10 comes after 8! A few of the notable changes and updates since last post GWT update to 2.8.2 MobiVM release 2.3.7 Lwjgl 3.2.1 Lots of QOL and bug fixes for GWT backend Better iOS backend customization PixmapPacker features like NinePatch and whitespace stripping InstancedRendering support via Mesh and InstanceBufferObjects SCENE2D (Standard tweaks and improvements acros....
https://zhidao.baidu.com/question/217767503.html 这是表格属性设置的原因 打开表格属性对话框 表格—>文字环绕 将“文字环绕”设置成“环绕” 这样下边的空白行就没有了