«исключение nullreference не было обработано» в body.cs движка физики дальновидности - PullRequest
1 голос
/ 06 октября 2011

Я программист на С ++, пробую c #. Я много сделал с 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 работает нормально, так что я почти уверен, что проблема в моем коде, а не в Farseer. Дайте мне знать, если вам нужно увидеть больше моего кода. Я также разместил это на форумах дальновидных, так что, если я получу ответ, я сообщу вам, ребята. Заранее спасибо.

1 Ответ

0 голосов
/ 08 октября 2011

Кто-то попросил меня показать код Game1.cs, и обнаружил проблему. Проблема заключалась в том, что я никогда не строил мир до инициализации своего плеера. Это было исправлено добавлением world = new World(Vector2.Zero); до того, как я инициализировал плеер.

...