box2d - 组成和射弹

标签 box2d composite

我在当前游戏中使用的是复合设计,效果很好。所有游戏对象要么是 GameObject 的实例,要么是它的直接后代......一些对象实现了特定的接口(interface),例如武器,因此它们可以被其他对象“使用”,或者只是在它们需要额外的共享数据/方法时使用。然而,我现在开始将 box2d 集成到游戏中,但在这种情况下我遇到了合成问题。例如, Sprite 在 Sprite 渲染组件中渲染, Material 等对象属性在渲染期间应用,但在弹丸等情况下,

我发现我基本上需要对相同的东西进行两次编码:基本射弹具有“onFire”、“onExpire”等方法,因为武器始终拥有射弹,因此,直接调用这些方法。但是,尝试将该数据与射弹物理组件同步,对我来说似乎是在浪费时间。我认为在这种情况下,我可能应该让射弹本身“拥有”物理体,作为射弹物理组件,它将处理 onCollision 事件,并更新位置……这对我来说似乎更清晰。现在我当然意识到,在这样做时,我明确地将射弹对象与 box2d 耦合,但对于我的需要来说,这很好。

我真的很想就此提出一些意见,因为截至目前,我在尝试制作其他对象使用的相同复合设计时遇到了很多问题,以满足我对射弹的需求。请注意,我并不担心成为最纯粹的复合 Material ,我的目标是创建游戏,而不是源引擎的 2D 等价物;)

最佳答案

For example, a sprite gets rendered in the sprite render component and the objects properties such as material, get applied during rendering, but in cases such as projectiles,

这对于 2d 来说是不典型的。在 3d 中 Material 会影响反射和照明,但在 2d 中这种情况很少见。

I think in this case, I should possibly make the projectiles themselves "own" the physics body

是的,任何模拟对象都应该有一个附有任何固定装置的主体。为你的射弹使用 isBullte = true 标志。 如果您的游戏逻辑需要在射弹上调用某些方法,只需保留引用列表,但您不需要为此进行组合。

关于box2d - 组成和射弹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451608/

相关文章:

java - Box2D - 落体在重力作用下不加速

crop - 在同一命令中进行 graphicsmagick 合成和裁剪

javascript - 如何从 Backbone Marionette 的复合 View 中获取 subview ?

mysql - 复合主键和唯一键作为外键

java - Libgdx - 使一个实体部分免受物理影响

python - Gym's box 2d (openAI) 安装不成功(pip错误)

java - box2d 、 libgdx - 玩家 body 具有宇宙飞船的相对速度,但仍然能够移动

flash - 在 Box2D 中绘制自定义多边形

Ruby/RMagick 旋转和组合图像

java - 如何在一个组合中使用两个网格布局