Я розробляю 2D shmup (тобто Aero Fighters ), і мені було цікаво, які існують різні способи зберігання рівня. Якщо припустити, що вороги визначені у власному XML-файлі, як би ви визначили, коли ворог породжує рівень?
Це базувалося б на часі? Оновлення? Відстань?
В даний час я роблю це, грунтуючись на "рівні часу" (кількість часу, на якому працює рівень - пауза не оновлює час). Ось приклад (серіалізація була зроблена XNA):
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:level="pekalicious.xanor.XanorContentShared.content.level">
<Asset Type="level:Level">
<Enemies>
<Enemy>
<EnemyType>data/enemies/smallenemy</EnemyType>
<SpawnTime>PT0S</SpawnTime>
<NumberOfSpawns>60</NumberOfSpawns>
<SpawnOffset>PT0.2S</SpawnOffset>
</Enemy>
<Enemy>
<EnemyType>data/enemies/secondenemy</EnemyType>
<SpawnTime>PT0S</SpawnTime>
<NumberOfSpawns>10</NumberOfSpawns>
<SpawnOffset>PT0.5S</SpawnOffset>
</Enemy>
<Enemy>
<EnemyType>data/enemies/secondenemy</EnemyType>
<SpawnTime>PT20S</SpawnTime>
<NumberOfSpawns>10</NumberOfSpawns>
<SpawnOffset>PT0.5S</SpawnOffset>
</Enemy>
<Enemy>
<EnemyType>data/enemies/boss1</EnemyType>
<SpawnTime>PT30S</SpawnTime>
<NumberOfSpawns>1</NumberOfSpawns>
<SpawnOffset>PT0S</SpawnOffset>
</Enemy>
</Enemies>
</Asset>
</XnaContent>
Кожен елемент Ворога - це в основному хвиля конкретних типів ворога. Тип визначається в EnemyType, тоді як SpawnTime - це "рівень часу", який має з’явитися ця хвиля. NumberOfSpawns та SpawnOffset - це кількість ворогів, яка з’явиться, і час, який проходить між кожним нерестом відповідно.
Це може бути гарною ідеєю або там можуть бути кращі. Я не впевнений. Я хотів би побачити деякі думки та ідеї.
У мене є дві проблеми з цим: нерестовий нерест правильно та створення редактора рівнів. Що стосується редактора рівня - це зовсім інша проблема (яку я, мабуть, опублікую у майбутньому: P).
Що стосується нересту правильно, то проблема полягає в тому, що у мене є змінний час оновлення, і тому мені потрібно переконатися, що я не пропускаю ворога нересту, оскільки зрушення нересту занадто мало, або тому, що оновлення зайняло трохи більше часу . Я якось виправив це здебільшого, але мені здається, що проблема полягає в тому, як я зберігаю рівень.
Отже, якісь ідеї? Коментарі?
Спасибі заздалегідь.