Я делаю игру с использованием Monogame, и я пытался выяснить, как реализовать функцию, которая действует аналогично инструкции AS3 и GML.С заявлением в C#, как в AS3/GML
До сих пор у меня есть система, которая работает, но не полностью так, как я ее хочу. Я храню свои GameObjects в словаре списков. Это значит, что я могу перейти к конкретному типу объекта, к которому я хочу получить доступ, без необходимости перебирать список ВСЕХ объектов. Используемый ключ - это имя типа.
public static Dictionary<string, List<GameObject>> All =
new Dictionary<string, List<GameObject>>();
Доступ ко всем конкретным типам объектов с использованием AllOf. Если в Словаре существует список, содержащий этот тип, он возвращает этот список, иначе он возвращает пустой список.
public static List<GameObject> AllOf(Type type)
{
string key = type.Name;
if(All.ContainsKey(key))
{
return All[key];
}
return new List<GameObject>();
}
Пример того, как они реализуются
public override void Update(GameTime gameTime)
{
List<GameObject> list = Instance.AllOf(typeof(Dummy));
for(int i = 0; i < list.Count; i++)
{
list[i].Update(gameTime);
list[i].foo += bar;
}
}
Но я предпочел бы использовать что-то похожее на AS3/GML с утверждением, что позволит также для других, кодов, не являющихся членами быть казнены.
with(typeof(Dummy))
{
Update(gameTime);
foo += bar;
int fooBar = 2;
someObject.someMemberFunction(fooBar);
}
Есть ли способ сделать это? Моя конечная цель состоит в том, чтобы сделать мой код немного чище, и сделать его легче сделать много изменений, не набирая цикл for каждый раз.
Я пробовал это, но когда я делаю VS, начинает кричать на меня, говоря: «Вы должны предоставить инициализатор в фиксированном или используемом заявлении оператора» – Gurman8r
извините, сделал предположение, позвольте мне обновить элемент, который вы должны инициализировать элемент в команде «использование», потому что он говорит об использовании этого конкретного объекта, который будет иметь только область видимости этого использования. – Nikerym
Будет ли доступ к одному объекту или всем его экземплярам? Например, я не пытаюсь создавать новые экземпляры. Попытка изменить те, которые уже инициализированы и запущены. – Gurman8r