私はスプライト、Player
を持っています。 _position
、_direction
と_velocity
がVector2
のあるXNA/Monogame:プラットジャンプ物理学と衝突問題
_position += (_direction * _velocity) * (float)gameTime.ElapsedGameTime.TotalSeconds;
:私はPlayer
の位置次のように更新します。
私は単純なコライダー(BoxCollider
)を用意しています。コイダーの位置と大きさを指定すると、矩形(BoundingBox
)が生成されます。 Initialize()
で
、私は新しいList<BoxCollider>
を作成し、レベルのためのコライダーでそれを埋めます。 Update()
で
、私は衝突をチェックするPlayer
にリストを渡します。
衝突チェック方法:今
public void CheckPlatformCollision(List<BoxCollider> colliders, GameTime gameTime)
{
var nextPosition = _position + (_direction * _velocity) * (float)gameTime.ElapsedGameTime.TotalSeconds;
Rectangle playerCollider = new Rectangle((int)nextPosition.X, (int)nextPosition.Y, BoundingBox.Width, BoundingBox.Height);
foreach(BoxCollider collider in colliders)
{
if(playerCollider.Intersects(collider.BoundingBox))
{
nextPosition = _position;
}
}
Position = nextPosition;
}
、私は重力を実装しようとしたあらゆる方法に失敗しました。 Player
が高すぎるから削除された場合、nextPosition
が離れすぎてPlayer
からなり、それは空中で立ち往生したまま。
私はまた、同様に水平方向の衝突の問題を抱えている問題は、類似している:あまりにも早く停止しPlayer
、間にスペースを残します。時には、私はPlayer
をコライダーの側に付いています。
私が知りたいのです:
がどのように適切に_position
、_direction
、および_velocity
でジャンプ重力&を実装していますか?水平と垂直の両方で適切に衝突を処理するにはどうすればよいですか?重力のために
これはおそらくあなたを助けるでしょう:http://gamedev.stackexchange.com/questions/104954/2d-collision-detection-xna-c – vyrp