Estoy desarrollando un shmup 2D (es decir, Aero Fighters ) y me preguntaba cuáles son las diversas formas de almacenar un nivel. Suponiendo que los enemigos están definidos en su propio archivo xml, ¿cómo definirías cuándo aparece un enemigo en el nivel?
¿Se basaría en el tiempo? Actualizaciones? ¿Distancia?
Actualmente hago esto en función del "tiempo de nivel" (la cantidad de tiempo que el nivel se está ejecutando; la pausa no actualiza el tiempo). Aquí hay un ejemplo (la serialización fue realizada por 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>
Cada elemento enemigo es básicamente una ola de tipos de enemigos específicos. El tipo se define en EnemyType, mientras que SpawnTime es el "tiempo de nivel" en el que debería aparecer esta ola. NumberOfSpawns y SpawnOffset es el número de enemigos que aparecerán y el tiempo que transcurre entre cada engendro, respectivamente.
Esta podría ser una buena idea o podría haber mejores por ahí. No estoy seguro. Me gustaría ver algunas opiniones e ideas.
Tengo dos problemas con esto: generar un enemigo correctamente y crear un editor de niveles. Lo del editor de niveles es un problema completamente diferente (que probablemente publicaré en el futuro: P).
En cuanto al desove correctamente, el problema radica en el hecho de que tengo un tiempo de actualización variable y, por lo tanto, debo asegurarme de no perder un engendro enemigo porque el desplazamiento de engendro es demasiado pequeño o porque la actualización tomó un poco más de tiempo . La mayoría de las veces lo arreglé, pero me parece que el problema está en cómo almaceno el nivel.
Entonces, ¿alguna idea? Comentarios?
Gracias de antemano.