0
現在、XNAのFarseer Physicsを使用したゲームプロジェクトに取り組んでいます。今、私はFarseerに付属しているBodyクラスを拡張する2つのクラスを持っています。以下は、それらを衝突させるための私のコードです。Farseer Physicsで衝突しない2つのボディ3.3.2
以下のクラスは少し自明です。基本的には、プレイヤーが世界のすべてのタイルに衝突できるようにしたいのです。
public Player(World gameWorld, GameWindow Window, int playernum, Texture2D sprite) : base(gameWorld)
{
//place the player in the center of the screen - this whole method can be changed
Position = new Vector2(Window.ClientBounds.Width/2, Window.ClientBounds.Height/2);
playerSprite = sprite;
playerNum = (PlayerIndex)playernum;
//Fixture stuff
playerFixture = FixtureFactory.AttachRectangle(sprite.Width, sprite.Height, 1, new Vector2(), this);
playerFixture.CollisionCategories = Category.Cat2;
playerFixture.CollidesWith = Category.Cat1;
playerFixture.OnCollision += playerOnCollision;
//initialize the melee weapon
//initialize the ranged weapon
}
public Tile(World gameWorld, Vector2 location, Game1 game, Vector2 offset) : base(gameWorld)
{
//Loading content in the constructor for simplicity's sake because the content manager is initialized by the time the stage is created
health = 100;
prevhealth = health;
maxhealth = health;
this.game = game;
contentName = game.random.NextDouble() > 0.5 ? "Images/Tiles/MarbleTilesBreak" : "Images/Tiles/MarbleTiles1Break";
tileTex = game.Content.Load<Texture2D>(contentName + "0");
//breakSound = game.Content.Load<SoundEffect>("Tiles/FloorBreaking");
location.X *= tileTex.Width;
location.Y *= tileTex.Height;
location += offset;
Position = location;
tileFixture = FixtureFactory.AttachRectangle(tileTex.Width, tileTex.Height, 1, new Vector2(), this);
tileFixture.CollisionCategories = Category.Cat1;
tileFixture.CollidesWith = Category.Cat2;
tileFixture.OnCollision += _OnCollision;
}
私_OnCollisionは、次のようになります。
public bool _OnCollision(Fixture fix1, Fixture fix2, Contact con)
{
if (fix2.CollisionCategories == Category.Cat2)
{
health -= 10f;
}
return false;
}
私は、コードを実行したときしかし、衝突の兆候はありません。タイルが0の状態にあるとき、それは削除されるべきですが、タイルは削除されません。
あなたはファセシーワールドクラスを踏んでいますか? – ClassicThunder
world.Step(1)を使用して衝突の問題を解決しました。しかし、今、固定具は動いていません。 –
試してみてください((float)gameTime.ElapsedGameTime.TotalMilliseconds * 0.001f); – ClassicThunder