Questions tagged «bullet-physics»

4
2D塔防-敌人的子弹
我正在尝试找到一种好的方法来解决子弹击中敌人的问题。游戏是2D塔防,塔应该发射子弹并保证击中敌人。 我尝试了这种解决方案-http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-1/ 提到的链接也要减去子弹的起源和敌人(矢量减法)。我试过了,但子弹刚好绕过敌人。 float diffX = enemy.position.x - position.x; float diffY = enemy.position.y - position.y; velocity.x = diffX; velocity.y = diffY; position.add(velocity.x * deltaTime, velocity.y * deltaTime); 我对向量很熟悉,但不确定要使此解决方案有效需要执行哪些步骤(向量数学运算)。

1
如何将子弹物理学整合到我的游戏中?
我下载了在此处找到的发行文件,但不确定从哪里开始。在我的游戏中,我有多个椭圆和一个球体,我希望所有这些相互碰撞。(它们都有网格和相关的边界体积) 编辑-我只是意识到长方体实际上与AABB关联。我想至少得改变一下。 我需要遵循哪些步骤?

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

2
如何在Bullet物理引擎中禁用Y轴运动
我想创建一个对象,而不仅要沿X和Z轴移动,同时还要使Y轴保持禁用状态(就像在2D模式下移动一样,该对象也不会掉落)。 我目前正在使用6自由度约束来限制Y轴上的移动,但是它不起作用: btRigidBody* zeroBody = new btRigidBody(0, NULL, NULL); // Create the body that we attach things to btRigidBody* robot = mCarChassis->getBulletRigidBody(); btGeneric6DofConstraint* constrict = new btGeneric6DofConstraint(*robot, *zeroBody, btTransform::getIdentity(), btTransform::getIdentity(), false); constrict->setLinearLowerLimit( btVector3( 1, 1, 1)); constrict->setLinearUpperLimit( btVector3(-1, 1,-1)); constrict->setAngularLowerLimit( btVector3( 1, 1, 1) ); constrict->setAngularUpperLimit( btVector3(-1, -1, -1) ); …

1
Bullet Physics-从刚体直接投射光线(第一人称相机)
我已经使用Bullet实现了第一人称摄影机-它是具有胶囊形状的刚体。我只用了几天子弹,物理引擎对我来说是新的。我btRigidBody::setLinearVelocity()经常移动它,使其与世界完美碰撞。唯一的问题是Y值自由移动,我通过在移动物体之前将平移矢量的Y值设置为零来临时解决。这适用于所有情况,但从高处跌落时除外。 当身体掉落到一个高大的物体上时,由于平移矢量的Y值设置为零,因此您仍然可以四处滑动,直到停止移动并跌落到地面(仅在移动时才设置速度)。因此,为了解决这个问题,我想尝试从人体投射光线以确定世界的Y值,并检查该值与相机机身的Y值之间的差,并在出现以下情况时禁用或减慢运动速度:差异足够大。 我只是停留在投射光线并确定其撞击的世界的Y值上而有些困惑。我已经实现了这个回调: struct AllRayResultCallback : public btCollisionWorld::RayResultCallback{ AllRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld) : m_rayFromWorld(rayFromWorld), m_rayToWorld(rayToWorld), m_closestHitFraction(1.0){} btVector3 m_rayFromWorld; btVector3 m_rayToWorld; btVector3 m_hitNormalWorld; btVector3 m_hitPointWorld; float m_closestHitFraction; virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) { if(rayResult.m_hitFraction < m_closestHitFraction) m_closestHitFraction = rayResult.m_hitFraction; m_collisionObject = rayResult.m_collisionObject; if(normalInWorldSpace){ m_hitNormalWorld = rayResult.m_hitNormalLocal; } else{ …

2
为了学习Bullet,将Bullet用于2D物理而不是Box2D是否值得?
问题不多了。我并不担心开销,因为我确信它们都可以满足我的需求。基本上,由于Farseer物理引擎,我对Box2D概念很熟悉,但是当我跳到3D东西时,我想使用Bullet。也许Bullet即使在2D领域对我也具有一定的教育价值? 这个问题的一般版本是:如果我计划将来使用3D物理引擎,是否应该对2D游戏使用3D物理引擎?还是这是浪费时间而没有提供教育价值?

3
如何使用Bullet Physics / Ogre3D在RPG中移动角色?
最近,我在Ogre3D游戏中移动角色时遇到了问题。基本上,我使用子弹的RigidBody->translate()功能来移动角色,但是当这样做并撞到墙上时,我会略微穿过它,然后弹回去。我想知道是否有另一种好的方法可以在一个带有墙壁的简单平面世界中移动我的角色(具有球形碰撞形状的角色)? 我正在使用的与此相对的库是“ Ogre3D”和“子弹物理学”。
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.