Eso nos venía muy bien hasta ahora, porque todas la monedas se ponían a girar alegremente. Pero ahora, al coger las monedas, las borramos y las paramos (si no se hace esto aparecen efectos raros en la pantalla).
Al parar la primera moneda (la de más arriba), de la que hemos clonado todas, se paraban todas. Así que hemos modificado la función de clonar añadiendo nuevos parámetros (opcionales):
//en ScreenManager.h void LoadBackgroundSprites(Sprite *sprite, int *map, int map_columns, int map_rows, unsigned int firstframe = 0, unsigned int lastframe = 0, unsigned int speed = 0); //en ScreenManager.cpp void ScreenManager::LoadBackgroundSprites(Sprite *sprite, int *map, int map_columns, int map_rows, unsigned int firstframe, unsigned int lastframe, unsigned int speed) { unsigned int i; unsigned int length = map_columns * map_rows; bool primero = true; for (i = 0; i < length; i++) if (map[i] > 0) { int y = i / map_columns; int x = i - (y * map_columns); if (primero) { sprite->SetXY(x * 16, y * 16); primero = false; } else { Sprite *newSprite = CloneBackgroundSprite(sprite, x * 16, y * 16); if (speed > 0) { newSprite->SetAnim(firstframe, lastframe, speed); newSprite->StartAnim(); } } } }
Lo nuevo de la función está al final:
Si la velocidad de la animación es mayor de cero entonces preparamos el sprite para animarlo y comenzamos la animación. De esta forma cada sprite es animado de forma independiente y no depende del primer sprite.
Ya se pode descargar el editor de mapas.
Saludos
P.D: Es importante parar el Sprite a la hora de borrarlo, por lo que estas dos líneas deben ir juntas, si no darán problemas el resto de sprites. En el destructor de la clase Sprite hemos escrito el siguiente código:
Sprite::~Sprite() { PA_StopSpriteAnim(m_screen, m_index_sprite); PA_DeleteSprite(m_screen, m_index_sprite); }
y se invoca de esta forma:
delete sprite;
Borra el objeto sprite, y de esta forma se ejecuta el destructor de la clase Sprite.
Aún así el tema no va bien. Si creas y destruyes muchos Sprites al final el sistema no permite crear más o aunque los cree no se ven correctamente, parece un problema de PAlib.
Saludos
1 comentario:
Hola,compañero!
Exelente, espero pueda contactar contigo en alguna ocación ;)
mi correo es mygeze[arroba]hotmail.com
Un saludo, Bye Byte.
Publicar un comentario