Аз съм начинаещ. Използвам Monogame и Farseer Physics Library в C#. (последни версии)
В моята игра, всеки път, когато моят 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;
}
Също така при високи скорости това се случва:
Въпреки че топката никога не може да премине през блока (тунелиране), искам да знам как мога да поправя това, така че топката никога да не влиза в зоната на блока?