"исключение nullreference не было обработано" в body.cs движка физики дальновидности
Я программист на С ++, пробующий с #. Я много сделал с box2d в C++, но это мой первый раз с C#. Итак, я пытаюсь сделать простую игру с физическим движком дальновидности. Когда я пытаюсь скомпилировать свой код (я использую Visual Studio C# 2010 Express и XNA Game Studio 4.0), он останавливается в body.cs на IBroadPhase broadPhase = World.ContactManager.BroadPhase;
С этой ошибкой: nullreferenceexception was unhandled
, Я считаю, что проблема в моем классе Player, поэтому вот код для этого:
public class Player : Entity
{
Vector2 position;
SpriteBatch spriteBatch;
Texture2D texture;
Rectangle rectangle;
Body body;
CircleShape shape;
Fixture fixture;
public Player()
{
// TODO: Construct any child components here
}
///
/// Allows the game component to perform any initialization it needs to before starting
/// to run. This is where it can query for any required services and load content.
///
public override void Initialize(World world, SpriteBatch spriteBatch, Texture2D texture)
{
// TODO: Add your initialization code here
this.spriteBatch = spriteBatch;
this.texture = texture;
rectangle = new Rectangle(0, 0, 11, 14);
body = BodyFactory.CreateBody(world);
body.BodyType = BodyType.Dynamic;
body.Position = new Vector2(0, 0);
shape = new CircleShape(1.0f, 1.0f);
fixture = body.CreateFixture(shape);
base.Initialize(world, spriteBatch, texture);
}
///
/// Allows the game component to update itself.
///
/// <param name="gameTime" />Provides a snapshot of timing values.
public override void Update(GameTime gameTime)
{
// TODO: Add your update code here
base.Update(gameTime);
}
public override void Draw(GameTime gameTime)
{
spriteBatch.Begin();
spriteBatch.Draw(texture, new Vector2(body.WorldCenter.X * 10, body.WorldCenter.Y * 10), rectangle, Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
}
Тестовый стенд Farseer работает нормально, так что я уверен, что мой код - проблема, а не сторонник. Дайте мне знать, если вам нужно увидеть больше моего кода. Я также разместил это на форумах дальновидных, так что, если я получу ответ, я сообщу вам об этом. Заранее спасибо.
1 ответ
Кто-то попросил меня показать код Game1.cs, и обнаружил проблему. Проблема заключалась в том, что я никогда не создавал мир до инициализации своего игрока. Это было исправлено добавлением world = new World(Vector2.Zero);
прежде чем я инициализировал плеер.