Прежде всего, привет, я здесь впервые. Я молодой программист (15 лет), и это моя вторая попытка создать игру (на самом деле весь игровой движок и фреймворк многократного использования, не знаю, как это назвать, может быть, GDK?), Но в этот раз я делаю ее более организованной. *
ВАЖНОЕ ПРИМЕЧАНИЕ: я использую платформу XNA, поэтому игровой движок не является чисто низкоуровневым управлением DirectX! Я пытаюсь расширить XNA с помощью предопределенных классов, которые можно будет легко вставить в любую игру и управлять ими позже!
Я застрял в поиске способа поместить сущность в список WorldManager, затем извлечь сущность для прямых изменений, а затем вернуть ее в список (таким образом, он используется с методом обновления).
Мои идеи (и вопросы) были:
Наилучшим возможным решением было бы каким-то образом связать сущность со списком, так как я обновляю объект одиночной сущности, который он также обновляет в списке. К сожалению, я не знаю, как это сделать, и это может быть лучшим ответом.
Я также подумал о том, чтобы сначала отредактировать созданный мною объект, а затем использовать поиск, чтобы найти его в списке и обновить. Проблема в том, что я не уверен в том, как искать метод поиска. Что если любое изменение может заставить метод думать, что это совершенно новый объект? (Как найти на самом деле найти?)
Что я сделал, так это добавил идентификаторы к сущностям в тот момент, когда они добавлены в список, чтобы я мог вернуть их на место после редактирования. Проблема в том, что у меня тоже есть метод удаления, и я не уверен, что он изменит индексы, потому что если бы это было так, мне пришлось бы делать повторное обновление идентификаторов каждый раз, когда я удаляю сущность. Я нахожу это довольно неэффективным. Так бы List <>. Удалить поменять индексы? (Я думаю, это будет)
Это на самом деле 3 вопроса в одном, и я буду признателен за ответ на любой из них, конечно, ответы на самые важные вопросы будут более ценными!
Кусок кода, чтобы понять, как все это работает:
public class WorldManager
{
List<Entity> Entities = new List<Entity>();
List<Entity> ToAdd_Entities = new List<Entity>();
List<Entity> ToRemove_Entities = new List<Entity>();
...
public void Update()
{
for(int count = 0; count < ToAdd_Entities.Count; count++)
{
Entities.Add(ToAdd_Entities[count]);
int index = Entities.IndexOf(ToAdd_Entities[count]);
Entities[index].ID = index;
ToAdd_Entities.Remove(ToAdd_Entities[count]);
}
for (int count = 0; count < ToRemove_Entities.Count; count++)
{
Entities.Remove(ToRemove_Entities[count]);
ToAdd_Entities.Remove(ToAdd_Entities[count]);
//index update is required here too, I just didn't implement it yet.
}
...
}
}
Как бы я получить к нему доступ:
List<Entity> bots = WorldManager.GetEntitiesByName("bot");
bots[1].Location = new Vector2(x,y);
WorldManager.UpdateEntities(bots);
Я не использую этот кусок кода, это просто простой пример моей идеи.
Пожалуйста, простите меня за мой запутанный английский (если вы находите это запутанным), я серб.
Заранее спасибо.