Tworzę shmup 2D (tj. Aero Fighters ) i zastanawiałem się, jakie są różne sposoby przechowywania poziomu. Zakładając, że wrogowie są zdefiniowani we własnym pliku xml, jak zdefiniowałbyś, kiedy wróg pojawia się na poziomie?
Czy byłoby oparte na czasie? Aktualizacje Dystans?
Obecnie robię to na podstawie „czasu poziomu” (czasu, przez jaki poziom działa - pauza nie aktualizuje czasu). Oto przykład (serializacji dokonał 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>
Każdy element wroga jest w zasadzie falą określonych typów wrogów. Typ jest zdefiniowany w EnemyType, a SpawnTime to „czas poziomu”, jaki powinna pojawić się fala. NumberOfSpawns i SpawnOffset to odpowiednio liczba przeciwników, którzy się pojawią, oraz czas między każdym spawnem.
To może być dobry pomysł lub mogą istnieć lepsze. Nie jestem pewny. Chciałbym poznać opinie i pomysły.
Mam z tym dwa problemy: prawidłowe odrodzenie wroga i utworzenie edytora poziomów. Edytor poziomów to zupełnie inny problem (który prawdopodobnie opublikuję w przyszłości: P).
Jeśli chodzi o prawidłowe odradzanie, problem polega na tym, że mam zmienny czas aktualizacji, dlatego muszę się upewnić, że nie przegapię odrodzenia wroga, ponieważ przesunięcie odrodzenia jest zbyt małe lub dlatego, że aktualizacja zajęła trochę więcej czasu . W pewnym sensie to naprawiłem, ale wydaje mi się, że problem polega na tym, jak przechowuję poziom.
Jakieś pomysły? Komentarze?
Z góry dziękuję.