【发布时间】:2015-03-12 22:03:15
【问题描述】:
我是一个初学者。我在 C# 中使用 Monogame 和 Farseer 物理库。 (最新版本)
在我的游戏中,每当我的ball(圆圈)碰到corner of a rectangle(甚至是另一个圆圈)时,它应该只在 Y 轴上改变方向。
但是,它不仅会改变 Y 轴上的方向(如预期的那样),而且还会向右移动少量(或相应地向左移动),具体取决于您如何击中角落(或另一个圈子)。就好像在球上施加了某种力,使其也沿 X 轴移动。
这个动作很酷,而且很有意义,但在我的游戏中,它没有,因此我想摆脱它。
这怎么可能?我猜我必须更改一些默认值。
这是我的代码的样子:
BallBody.BodyType = BodyType.Dynamic;
BlockBody.BodyType = BodyType.Static;
Ball.LinearVelocity = new Vector(0,-1); // ball going up
BallBody.OnCollision += Ball_OnCollision;
public bool Ball_OnCollision(Fixture f1, Fixture f2, Contact contact)
{
// if the Ball (f1), collides with the Block (f2)
if (f2.Body == BlockBody)
// change the direction of the Ball on Y-Axis
Ball.LinearVelocity = new Vector(0,-1);
return true;
}
在高速情况下也会出现这种情况:
即使球永远无法穿过街区(隧道),我想知道我怎样才能解决这个问题,让球永远不会进入街区?
【问题讨论】: