我正在创建一个侧滚动作游戏,你可以在其中玩一个可以施放法术的向导。法术是Box2D的身体,从你的玩家中间开始(也是一个Box2D身体),然后沿你在屏幕上点击的方向向外移动。
我将所有碰撞检测工作到你施放的法术不会相互碰撞的地方,并且它们不会与你发生碰撞。这种方法或多或少完美无缺 - 除了一个例子。我施放的第一个法术会与玩家发生碰撞,导致短暂的身体击退。除此之外,该法术的路径不会受到影响,我也没有注意到该玩家的位置发生了重大变化。我知道有回击的唯一原因是因为我跟随玩家的相机突然在那一瞬间震动(我已经通过联络听众来验证这些特定的身体正在形成接触)。
对于从同一位置产生的后续法术来说情况并非如此,并且它似乎不是与玩家的移动速度或射弹有关的问题。投射角度。它可能与Box2D如何初始化项目有关,但我无法承诺。
有谁知道如何解决这个问题?
答案 0 :(得分:0)
正如韦斯顿所提到的,可能需要更多的代码,但它确实很奇怪"第一个咒语"这样做,但随后的产卵不会。你是否为后来的产卵重用了身体?
在box2d中如果你创建2个占据相同空间的实体,他们将会"回击"彼此之间的关系使得他们不会占据同一个空间。这是设计使然,仅在创建时发生。我确定这就是你所看到的。为什么它不会发生"之后"可能取决于您的代码。
围绕这种情况的方法可能是将一些灯具设置为传感器(忽略碰撞),或者在创建主体时,设置active = false(再次忽略碰撞)。通过"有点"我的意思是你可能必须写一些代码来移动你的咒语,忽略碰撞,直到你的咒语已经清除"你的巫师。然后移除传感器或将其激活,以便碰撞恢复正常。
但这可能是矫枉过正,弄清楚后续"跨度"的微妙之处。与你的第一个相比可能更好地利用努力。
答案 1 :(得分:0)
我设法找出问题所在以及如何解决问题,但我无法解决问题的原因。
我正在使用OrthographicCamera来播放我的播放器的位置。
position.x += (universe.entity_handler.player.parts[0].body.getPosition().x - position.x) * Gdx.graphics.getDeltaTime() *
position.y += (universe.entity_handler.player.parts[0].body.getPosition().y - position.y) * Gdx.graphics.getDeltaTime() * LERP + zoom * viewportHeight / WORLD_PLAYER_Y_SKEW;
当我通过删除所有lerping来解决这个问题时,抖动消失了。
position.x = universe.entity_handler.player.parts[0].body.getPosition().x;
position.y = universe.entity_handler.player.parts[0].body.getPosition().y;
我不知道为什么线性插值会导致像这样的痉挛运动,但是嘿 - 我让它起作用了。也许我以后会回去重温这个问题。