Как исправить «Ссылка на объект требуется для нестатического поля, метода или свойства ...» - PullRequest
1 голос
/ 27 ноября 2011

Я пытаюсь написать код, который отображает значение X моего игрока в тексте. Это говорит мне, что для строки Microsoft.Xna.Framework.Graphics.SpriteBatch.DrawString нужна ссылка на объект. Есть идеи? Вот мой код:

public void Effects(Player player)
{
    string compassString = "";
    int playerY = (int) (((player.position.X + player.width) * 2f) / 16f);
    if (playerY > 0)
    {
        compassString = "Distance: " + playerY + " feet left";
        if (playerY == 1)
        {
        compassString = "Distance: " + playerY + " foot left";
        }
    }
    else if (playerY < 0)
    {
        playerY *= -1;
        compassString = "Distance: " + playerY + " feet right";
        if (playerY == 1)
        {
            compassString = "Distance: " + playerY + " foot right";
        }
    }
    else
    {
        compassString = "Distance: Level";
    }
    Color black;
    black.R = (byte)((0xff + black.R) / 2);
    black.G = (byte)((0xff + black.R) / 2);
    black.B = (byte)((0xff + black.R) / 2);
    Microsoft.Xna.Framework.Graphics.SpriteBatch.DrawString(Main.fontMouseText, compassString, new Vector2((float) (0x16), (float) ((0x4a + (0x16)) + 0x30)), black, 0f, new Vector2(), (float) 1f, SpriteEffects.None, 0f);

}

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Если вы хотите отобразить координаты в виде строки в XNA, вы должны:

  1. Определите новый SpriteFont в вашем приложении.
  2. В вашем методе Game.Draw() (а не только где-то в вашем коде!) Используйте экземпляр spriteBatch по умолчанию для рисования координат, используя только что определенный SprinteFont.

Здесь - хорошее руководство по этим шагам с веб-страницы MSDN.

Вот цитата из вышеуказанной связанной страницы:

protected override void Draw(GameTime gameTime) // <- do it here, not somewhere else!
{
    GraphicsDevice.Clear(Color.CornflowerBlue);

    spriteBatch.Begin(); // <-- before you start to draw

    spriteBatch.DrawString(Font1, output, FontPos, Color.LightGreen,
        0, FontOrigin, 1.0f, SpriteEffects.None, 0.5f);

    spriteBatch.End(); // <-- after you draw
    base.Draw(gameTime);
}
0 голосов
/ 27 ноября 2011

Вы получаете эту ошибку, потому что SpriteBatch не является статическим классом.Он должен быть создан как int i = 0;Вы не можете сделать int.i = 0;

Перейти к game1.cs.Найдите объявление "SpriteBatch spriteBatch".Либо сделайте его общедоступным статическим, либо сделайте другой глобальный класс (или синглтон), который имеет общедоступную ссылку на эту переменную.В методе game1.cs in Draw, который вы вызываете

spriteBatch.Begin();
yourClass.Draw();
spriteBatch.End();

Затем в YourClass.Draw () введите:

<yourGlobalClass>.SpriteBatch.DrawString(..);

Таким образом, после назначения spitebatch в game1.cs вы можетепоставить строку:

<yourGlobalClass>.SpriteBatch = spritebatch;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...