Questions tagged «physics»

与物体在空间和时间上的运动有关。包括诸如加速度(推力和重力),质量,碰撞响应,摩擦等概念。

3
使用Bullet时,物理无法通过网络正确同步
我正在尝试使用Bullet实现客户端/服务器物理系统,但是我在使事物同步方面遇到问题。 我实现了一个自定义运动状态,该状态可以从我的游戏对象读取和写入转换,并且可以在本地运行,但是我尝试了两种不同的网络游戏方法: 使客户端上也在服务器上的动态对象(例如,不是随机碎片和其他不重要的东西)成为运动学对象。这可以正常工作,但对象移动得不太平稳 对象在这两者上都是动态的,但是在服务器发出的每个对象移动的消息之后,我将线速度和角速度设置为服务器上的值,并使用服务器上的转换调用btRigidBody :: proceedToTransform。我也叫btCollisionObject :: activate(true); 强制更新对象。 我对方法2的意图是基本上执行方法1,但是劫持Bullet进行穷人的预测,而不是自己动手解决方法1,但这似乎行不通(原因并非100%明确我什至单步执行“项目符号”,并且有时这些对象最终会出现在不同的位置。 我朝着正确的方向前进吗?Bullet似乎内置了自己的插值代码。那可以帮助我使方法1更好地工作吗?还是我的方法2代码不起作用,因为我不小心踩了它? 编辑:我刚刚注意到的方法1的另一个问题是,碰撞响应将与非同步对象发生碰撞。动能体有时会射出无限的东西,因为它们无法被击退。

3
如何用粒子模拟压力?
我正在尝试在要构建的Unity游戏中使用一组球形粒子来模拟压力。关于此问题的几个注意事项: 目标是用无摩擦的小球填充不断变化的2d空间/空隙。游戏正在尝试模拟将更多物体推入该空间的压力不断增加。 关卡本身一直在从左向右滚动,这意味着如果用户未更改该空间的尺寸,它将自动变小(该空间的最左侧部分将不断在屏幕外滚动)。 我想知道我可以采取什么方法来解决这些问题... 知道何时检测何时有空间要填充,然后将球体添加到该空间。 缩小时,从空间中移除球体。 模拟球体上压力的策略,以便在创建更多空间时它们“向外爆炸”。 我正在考虑的当前方法是使用不断移动的墙,该墙不在屏幕上并随屏幕移动,如下图所示: 。 这个移动的壁会将球体推入并捕获到空间中。至于添加新球体,我将要么(1)在检测到自由空间时复制球体,要么(2)在空间的左侧(壁所在的位置)生成它们-将其余球体推向填补空间。我预见了想法1的问题,因为这可能不会真正产生/模拟压力。想法2似乎更有希望,但是提出了一个问题,即如何为这些新的球形粒子提供生成位置(以及在没有空间的情况下生成它们的后果)。 非常感谢您的智慧!
11 2d  unity  physics 

5
统一的2D角色控制器(试图将老式的平台游戏带回来)
这几天,我试图创建一个统一的2D角色控制器(使用物理)。我对物理引擎刚起步,因此很难获得想要的控制感。如果有人可以为我发现的问题提供解决方案,我将非常高兴: 这是我现在的FixedUpdate: public void FixedUpdate() { Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0); _body.AddForce(v); v.y=0; if(state(MovementState.Left)) { v.x=-_walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed; } else if(state(MovementState.Right)) { v.x= _walkSpeed*Time.fixedDeltaTime+v.x; if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed; } _body.velocity=v; Debug.Log("Velocity: "+_body.velocity); } 我在这里尝试通过向左和向右施加重力和线性力来移动刚体。我设置了一种物理材料,该材料在运动时不会弹跳,摩擦力为0,在静止时摩擦力为1。主要问题是我的撞机具有坡度,并且速度从上升(慢),下坡(更快)和在直线对撞机(正常)上行走而变化。如何解决?如您所见,我始终对x轴应用相同的速度。 对于玩家来说,我在脚位置设置了一个球体,这是我要施加力的刚体。 欢迎其他任何可以使我的生活更轻松的提示:)。 PD在回家时,我注意到我可以解决这个问题,方法是平行于玩家正在行走的表面施加恒定的力,但是不知道这是否是最佳方法。

4
玩家向上移动,他是跳跃还是攀爬?
在其中带有梯子的基于2D物理的平台游戏中,您如何确定玩家向上移动是由跳跃引起还是由他爬梯引起的,从而使您知道要播放哪种动画? 通常,方向向量显然不足以确定要播放的动画:您还如何确定运动原因(因此您知道要使用的正确精灵)?

1
由于网络集成,我是否应该编写自己的物理引擎?
我目前正在开发自上而下的实时僵尸射击游戏。我正在使用JBox2D作为我的物理引擎用Java编写此代码。我本周一直在编写网络代码,现在可以进行物理同步了​​。 我打算使用预测性客户端/权威服务器模型,只要服务器稍后批准,客户端就可以自由移动。这涉及到客户端向服务器发送包含运动数据的数据包,服务器计算延迟,并从较早的状态重新模拟环境。 我的问题是,我当前的物理引擎JBox2D(基本上是Box2D的端口)不支持回滚世界,而且显然不容易序列化世界数据。我有2个解决方案,可以修改/扩展当前的物理引擎,也可以编写自己的引擎。 编写我自己的物理引擎的原因- 我可以删除不必要的功能。在自上而下的游戏中,我真的只需要碰撞机制和处理力。不涉及重力。 我可以更好地理解代码,并且[最有可能]更容易实现回滚功能 扩展/修改JBox2D的原因 编写我自己的物理引擎将是大量的工作,可能会很麻烦 JBox2D有一个广泛支持的社区,可以为我的开发人员提供帮助 JBox2D针对碰撞检测等方面进行了特定的优化,使其非常有用 已经完成了一些工作,但是几乎没有共享代码 那您有什么意见。这是我的第一款游戏,我绝对不是专业的游戏开发商。如果有人可以提供一些指向该地区已经完成的工作的链接(最好使用JBox2D / Box2D / Java)。

4
如何使物体的速度降低而使其速度降低
我正在用Flash开发游戏,需要一些帮助。可以认为是数学问题。 我的物体飞速飞行,X我的物体可能与石头碰撞。当它与石头碰撞时,我需要我的物体打破石头并继续,但速度要慢一些。这很容易硬编码和写是这样的:myVelocity -= 10;,但我的主要问题是,我希望它输少的速度越高,初始速度。 例如:如果速度为300,我希望它损失10,如果速度为200,我希望它损失20。 可以用某种公式来完成吗?

5
空间散列和四叉树的2D空间分区替代方案
我一直在尝试在游戏中实现空间分区算法,但是空间散列和四叉树都不是我想要的。 我的级别大小不应该有限制(只有Int32限制)。我需要一个不需要“水平宽度”和“水平高度”的空间分区算法。 我有许多移动的物理对象。我需要算法足够快以支持500多个对象。 还有其他选择吗?

1
反射角度
我有这个“突破风格”的游戏。 我在中心有一门大炮,大炮周围有方块,方块周围有护垫。游戏外观如下: 我设法获得了每个像素的碰撞,并且我的球在与块接触时通过以下数学运算“ 反映 ”: Ball.Direction = 2 * (Block.Direction - Ball.Direction) + 180; 蓝线是球的方向,黑线(基线)是块的表面。 方向是以弧度表示的角度(当然可以转换为度)。 球通过以下方式移动: // Event.ENTER_FRAME x += Math.sin(Direction) * Velocity; y -= Math.cos(Direction) * Velocity; 到目前为止,一切都很好。 我的问题现在出在垫子上(小彩色块周围的3个深色大块)。 当它们转过来时,表面角度会发生变化。 不仅如此,球也应该击打侧面,那么,如何测量击球的方向和球的新运动方向呢? ps:如果需要,我可以提供代码和可播放的swf。 编辑 好的,角度问题已通过Vectors解决,但侧面和后部碰撞仍然存在问题。 我将为此打开另一个问题,并将其链接到此处。


3
第一人称游戏中的重力强度
在我们的游戏中,我们将重力加速度设置为9.8 m / s ^ 2的适当值。尽管从物理上来说是正确的,但它感觉更像是在月球上四处移动。它的感觉大约是16 m / s ^ 2。其他人有没有经历过?仅仅是因为我们没有运动模糊或声音来提供明显的速度感吗?如果感觉合适,仅将其设置为16 m / s ^ 2可以吗?

3
漂亮的开源游戏/渲染引擎?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 它可能不在开放源代码的范围之内(因为没有太多希望/需要实现所有这些功能的开放源游戏),但是是否存在一个现有的开放源代码游戏或渲染引擎,其功能如下: 日/夜周期 动态天气风/雨/云/等 潮湿的表面(雨天表面看起来潮湿) 现实的水 具有定义“道路”能力的大地形 无缝的外部和内部 森林(许多树木,杂物等) 真实的照明(例如,来自火/蜡烛闪烁的光) 如果游戏引擎: 整合物理学 车辆支持 i 多人/网络能力..也许mmo 语音识别 等等

2
使用Box2D多边形“ Set()”函数?
我正在使用Box2D物理引擎。box2D有一种形状,称为b2PolygonShape。 在此类中,您可以创建多边形。还有一个Set()函数,该函数接受点数组和顶点数。 Box2D有这样的示例: // This defines a triangle in CCW order. b2Vec2 vertices[3]; vertices[0].Set(0.0f, 0.0f); vertices[1].Set(1.0f, 0.0f); vertices[2].Set(0.0f, 1.0f); int32 count = 3; b2PolygonShape polygon; polygon.Set(vertices, count); 这可行。但是,当我尝试练习并弄混此功能时,我这样做是: b2Vec2 vertices[4]; vertices[0].Set(0, 0); vertices[1].Set(0,10); vertices[2].Set(10,10); vertices[3].Set(10,0); int32 count = 4; b2PolygonShape polygon; polygon.Set(vertices, count); 当我编译并运行它时,它在Set()函数之后崩溃了。这不会创建正方形吗? 同样在控制台中,我得到了: Assertion failed: s > 0.0f …
11 2d  physics  box2d 

4
如何实施减速?
我之所以说“减速”,是因为我目前不使用加速;我的意思是将速度移回零,最终停止。 我是向量的新手,但对物理学等却不太了解。通常如何处理“减速”? 我现在所拥有的有效,但似乎有些破旧。 update:function(Game, t, dt) { var speed = Game.Input.isKeyDown('shift') ? 8 : 4; if (Game.Input.isKeyDown('a')) { this.velocity.i -= speed; } else if (Game.Input.isKeyDown('d')) { this.velocity.i += speed; } else { if (Math.abs(this.velocity.i) > 3) { this.velocity.i += (this.velocity.i > 0) ? -speed : speed; } else { this.velocity.i …

3
在Unity3D中防止刚体跳跃力和弹跳幅度的组合
我正在Unity3D中构建一个相当简单的大理石赛车游戏。球是仅在X和Y轴上移动的3D物理对象。它具有左右滚动和跳跃的能力。非常基本的东西,除了我遇到了打破比赛的问题:当摔倒并撞击地面时,球的反弹幅度可以与其弹跳力相结合,从而产生超高跳跃。这意味着,通过适当地按下按钮,玩家可以使球反弹得更高,达到意想不到的高度。在解决此故障之前,我无法正确设计关卡。我已经说明了这个示例: 但是,跳跃并不像直接将球向上射击那样简单。为了简化关卡设计中的复杂性,我将跳跃角度编程为相对于球在其上滚动的表面。 图3是该游戏到目前为止的工作方式;没有图4。这使解决弹跳问题变得更具挑战性,因为我不能简单地测量和设置Y轴上的精确力或速度。这样做会导致怪异的行为,当球在陡峭的斜坡上行驶时,这种行为会变得更加明显。 到目前为止,我已经能够构思出该游戏中所有其他设计问题的解决方案,然后找到如何对它们进行编程的方法,但是这使我陷入了困境。我尝试了许多不同的方法,但是没有一个起作用。 这是控制球跳动的C#脚本: using UnityEngine; using System.Collections; public class BallJumping : MonoBehaviour { public System.Action onJump; public Rigidbody objRigidbody; // Set this to the player public bool isGrounded; // Determines whether or not the ball is on the ground public Transform groundChecker; // A child object that's slightly …
10 unity  c#  physics  jumping 

4
对于简单游戏,是否有单独的游戏循环线程是必需的?
我是游戏开发的新手。为了学习,我正在android平台上重新创建此游戏。您可以在上面的链接中观看游戏视频。这是一个简单的游戏。 我已经阅读了很多有关游戏开发入门的文章,几乎所有文章都建议在单独的线程上使用游戏循环,这对于其他游戏也很有意义。但是,对于这个特定的游戏,我需要启动一个单独的线程吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.