megamarc / Tilengine

Free 2D graphics engine with raster effects for retro/classic style game development
https://www.tilengine.org
Mozilla Public License 2.0
801 stars 94 forks source link

[Bug] Sample Barrel, collision fails. #47

Open ghost opened 5 years ago

ghost commented 5 years ago

Hola Marc

Encontré una característica en éste bug y es que sucede en la unión del tilemap. Voy tratar de explicarme :smiley: collision

Lo que ocurre en la línea https://github.com/megamarc/Tilengine/blob/54037fca5a29915685ade2a6bc7f8742a175a5e0/samples/Simon.c#L140 es que, en unos ciclos (~8 aprox.) del for, ti.index no se cumple por lo tanto sy no se asigna a cero. Esto es porque en la línea https://github.com/megamarc/Tilengine/blob/54037fca5a29915685ade2a6bc7f8742a175a5e0/src/Layer.c#L425 x es negativo(por lo tanto también xpos) y desde ahí cualquier ti.index es igual a cero, ya sea en Layer.c o Simon.c.

Lo solucioné agregando la siguiente línea en el archivo Layer.c :

...
xpos  = x % layer->width;
...
if(xpos < 0)
      xpos += layer->width;

Esto hace xpos positivo (xpos=2047en el join) y así se soluciona el bug. Pero como desconozco sobre tilemaps tengo mis dudas, no se si es aquí en la librería el bug o es sólo un bug en Simon.c que hace que Layer.c (TLN_GetLayerTile) no funcione correctamente.

Nota: https://github.com/megamarc/Tilengine/blob/54037fca5a29915685ade2a6bc7f8742a175a5e0/samples/Simon.c#L139

x+c+xworld tiene valores entre 72 .. -21, etc.

Saludos.

megamarc commented 5 years ago

Buen apunte! En realidad este ejemplo es demasiado complejo para formar parte de la distribución d tilengine, ya que debería estar al margen d implementaciones de mecánicas jugables. PEro es uno de los primeros ejemplos que hice y ahí se quedó. Los ejemplos más complejos que demuestran mecánicas jugables ya están en sus propios repositorios como SuperMarioClone o TilenginePythonPlatformer.

Lo que comentas no es un bug de la biblioteca: ti.index devuelve 0 porque en esa posición no hay ningún tile, está vacía, de ahí el índice 0. Reviso a fondo tu propuesta, gracias!