Создание бесконечно порождающихся врагов - PullRequest
1 голос
/ 27 февраля 2012

Поскольку это всего лишь моя вторая игра, я все еще немного не уверен, как постоянно создавать и использовать новые экземпляры объектов. В ActionScript я знаю, что есть способ создать новый экземпляр чего-либо, не называя его именем, а затем перебрать какой-нибудь список. Но мне интересно, что было бы лучшим способом сделать это в C # с использованием XNA. Если бы кто-нибудь мог привести простой пример кода, он был бы признателен.

Спасибо

Ответы [ 4 ]

2 голосов
/ 27 февраля 2012

Вы ищете что-то похожее на приведенное ниже:

// A sample enemy class
class Enemy
{
    public int EnemyStrength { get; set; }

    public Enemy(int strength)
    {
        EnemyStrength = strength;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // A List to hold all the enemies
        List<Enemy> Enemies = new List<Enemy>();

        // Create some enemies
        for (int i = 0; i < 5; i++)
        {
            Enemies.Add(new Enemy(i));
        }

        // Display the strength of them all.
        foreach (Enemy enemy in Enemies)
        {
            Console.WriteLine(enemy.EnemyStrength);
        }

    }
}

Важным битом является Enemies.Add (new Enemy (i)), который создает и добавляет врага в список, не назначая его поименованномупеременная - я думаю, это то, что вы спрашиваете.

1 голос
/ 27 февраля 2012

Я не знаю конкретно о XNA, но в C # существует множество коллекций, которые можно использовать. Наиболее интересными являются общие, такие как List<MyObject>, которые предоставляют строго типизированный список (т.е. не требуется приведение). Другими вариантами могут быть такие, как Массивы , Словари (если вы хотите дать им несколько имен, но также хотите иметь возможность легко проходить через них или если вам нужно найти один экземпляр по некоторому ключу быстро).

Есть и много других, но это одни из самых распространенных.

Пример кода (предполагается, что у вас есть класс с именем врага):

List<Enemy> myList = new List<Enemy>();
for (int i = 0; i < 100; i++)
{
        myList.Add(new Enemy());
}

Очевидно, что это не создает бесконечных врагов, но показывает, как добавить кучу новых неназванных объектов в простой список.

Вы можете использовать что-то вроде этого:

foreach (Enemy badguy in myList)
{
    badguy.Update();
}
0 голосов
/ 27 февраля 2012

Хорошим началом будет использование http://en.wikipedia.org/wiki/Flyweight_pattern, поскольку оно сэкономит ресурсы.

0 голосов
/ 27 февраля 2012

XNA обеспечивает бесконечный игровой цикл, постоянно вызывая Update и Draw. Как сказал Крис, держите ваши объекты в списке, и каждый раз, когда вам нужно добавить новый объект, создайте его экземпляр в методе Update. Затем пусть методы Update и Draw просматривают список и вызывают методы Update и Draw каждого объекта соответственно.

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