ゲームに重力を実装すると、キャラクターが地面にぶつかったときにキャラクターがわずかに上下にバウンドし続けます。デバッグすると、キャラクターは基本的に地面の上と外でバウンドします。この問題を解決する方法がわからない場合は、ここで助けていただければ幸いです。
定数値
private float gravity = 0.09f;
キャラクターが地面にいる場合は速度に追加
if (!isOnGround)
velocity.Y += gravity;
キャラクター全体の速度を全体の位置に追加します。
position += velocity * (float)gameTime.ElapsedGameTime.TotalSeconds;
キャラクターが地面にあるかどうかを決定する衝突方法の一部。
for (int y = topTile; y <= bottomTile; ++y)
{
for (int x = leftTile; x <= rightTile; ++x)
{
// If this tile is collidable,
TileCollision collision = Level.GetCollision(x, y, tileMap);
if (collision != TileCollision.Passable)
{
// Determine collision depth (with direction) and magnitude.
Rectangle tileBounds = Level.GetBounds(x, y);
Vector2 depth = RectangleExtensions.GetIntersectionDepth(bounds, tileBounds);
float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;
if (depth != Vector2.Zero)
{
float absDepthX = Math.Abs(depth.X);
float absDepthY = Math.Abs(depth.Y);
// Resolve the collision along the shallow axis.
if (absDepthY <= absDepthX || collision == TileCollision.Platform)
{
// If we crossed the top of a tile, we are on the ground.
if (previousBottom <= tileBounds.Top)
isOnGround = true;
1
既存の物理エンジンを使用しないのはなぜですか?Farseerは慣れるまでに約1日かかり、必要なことなら何でもできます。
—
ClassicThunder