Метод Draw() в XNA перестает работать внутри цикла for

Пока что это моя первая игра XNA, и у меня большие проблемы с ее изучением. Я следую руководству Microsoft, которое можно найти здесь: XNA Xbox Live Инди-игры

Время от времени код ломается. По общему признанию, я удалил пару битов, которые, как я думал, мне не понадобятся, и я создал два класса врагов, а не только один, но я не думаю, что я столкнулся с какими-либо серьезными ошибками с моими настройками.

В методе Draw() основного файла Game1.cs мне пришлось включить цикл for, который будет перебирать список доступных врагов и рисовать их при обновлении. Однако строка кода помечается как неверная, и я совершенно не понимаю, почему. Я следил за учебником, и похоже, что он должен работать, но это не так. Вот весь метод Draw():

protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.ForestGreen);

        backRect.Width = 800;
        backRect.Height = 480;

        // TODO: Add your drawing code here
        // Start drawing
        spriteBatch.Begin();

        spriteBatch.Draw(backgroundTexture, backRect, Color.White);

        // Draw the Player
        player.Draw(spriteBatch);

        for (int i = 0; i < goblins.Count; i++)
        {
            goblins[i].Draw(spriteBatch);
        }


        // Stop drawing
        spriteBatch.End();

        base.Draw(gameTime);
    }

Это код внутри цикла for, который не будет работать. Любые идеи, как это исправить и / или какие-либо предложения по лучшему учебнику?


person Tom Sykes    schedule 10.04.2013    source источник
comment
Какую именно ошибку вы получаете?   -  person Cemafor    schedule 10.04.2013
comment
Нет перегрузки для метода Draw, который принимает 1 аргумент.   -  person Tom Sykes    schedule 10.04.2013
comment
Похоже, вы пропустили объявление public void Draw(SpriteBatch spriteBatch) в своем вражеском классе.   -  person Cemafor    schedule 11.04.2013


Ответы (2)


Мне очень нравится это руководство: http://xbox.create.msdn.com/en-US/education/tutorial/2dgame/getting_started

Это заставило меня начать довольно хорошо.

person Colton    schedule 10.04.2013
comment
Я посмотрел на него еще раз, и почему-то ответы просто щелкнули. Это действительно хороший учебник. - person Tom Sykes; 17.04.2013

Вам всегда нужно вызывать SpriteBatch.Begin() и SpriteBatch.End() для пакетов спрайтов. Я не уверен, стоит ли их смешивать, но постарайтесь избегать этого и используйте как можно меньше пакетов спрайтов.

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.ForestGreen);

    backRect.Width = 800;
    backRect.Height = 480;

    // TODO: Add your drawing code here
    // Start drawing
    spriteBatch.Begin();

    spriteBatch.Draw(backgroundTexture, backRect, Color.White);

    // Draw the Player
    spriteBatch.Draw(playerTexture, playerRect, Color.White);

    for (int i = 0; i < goblins.Count; i++)
    {
        spriteBatch.Draw(goblins[i].Texture, goblins[i].Rect, Color.White);
    }


    // Stop drawing
    spriteBatch.End();

    base.Draw(gameTime);
}

Документацию см. здесь. .

person bash.d    schedule 10.04.2013
comment
Спасибо за ссылку, код вроде такой. Ошибки больше нет (мне пришлось добавить переменную Rectangle в класс Goblin), но враги по-прежнему не появляются... Знаете ли вы хороший учебник по созданию игр XNA? Кажется, это вызывает у меня проблемы, я просто не знаю, почему. - person Tom Sykes; 10.04.2013
comment
MSDN предлагает вам многое. - person bash.d; 10.04.2013