Après une assez longue absence, me voilà de retour. J'ai eu un petit ennui de santé (pas moi personnellement, mais une personne qui m'est chère...), puis un déménagement et une longue interruption d'internet. Mais tout est rentré dans l'ordre, et je reprends où j'ai laissé les choses.
J'ai relu plus ou moins ce qui c'est passé sur le forum. J'ai retenu deux points saillants:
1. Le choix de Jack de réimplémenter le compilateur de FreePascal suite à l'arrêt du développement de FreeBasic. Personnellement, je ne peux qu'aprouver ce choix, pour deux raisons: d'une part la large portabilité sur d'autres systèmes, et d'autre part, une assez bonne compatibilité avec Delphi. Wait and see - bon courage, Jack !
2. Le choix de Ygeronimi d'arrêter la gestion du Mag. Dommage, mais je comprends. On pourrait peut-être repenser le cycle de production (écriture, correction, publication) ainsi que le moyen de mise à disposition. Je me demande si un site FTP participatif pourrait être une solution plus souple permettant à tout le monde d'y déposer des éléments, quitte à le superviser de façon légère, façon modérateur. Ou éventuellement sous forme d'un blog...
Bon, voilà. Je suis de retour, et pas les mains vides. Pendant mon "absence" du forum, j'ai tout de même continué à programmer, et je reviens avec une nouvelle version de KGF.dll disponible sur mon site et mon site miroir (le WebDav suivra un peu plus tard).
J'ai réfléchi sur les problèmes de collusion des sprites. S'il est simple de gérer les collusions pour des sprites rectangulaires, cela devient nettement plus complexe pour des sprites montrant des formes quelconques (avec fond transparent). Exemple: un guerrier avec une lance: on voudrait que la "collusion" se déclenche lors du contact avec la pointe de la lance, pas avec le rectangle englobant tout le sprite.
Je me suis rappelé que KGF.dll contenait déjà une série de fonctions gérant des régions Windows. Petit rappel: une région Windows est un ensemble de points, pas forcément contigus, pouvant être localisé n'importe où dans l'écran. Une région est formée par un rectangle, une éllipse, par n'importe quelle combinaison de rectangles et ellipses, des polygones quelconques ou par un masque donné par une bitmap. Accessoirement, on peut affecter une telle région à une fenêtre Windows qui prend alors instantanément cette forme. Mais le point intéressant, c'est qu'une région a son existence propre, indépendemment d'une fenêtre Windows.
Et c'est là que je veux en venir. On peut créer un sprite avec un dessin queconque et une couleur de transparence. Cette image du sprite peut être utilisée pour créer une région englobant tous les pixels de l'image, quelque soit sa forme. Une région est également "localisée", c'est à dire on lui donne la même adresse de base que celle du sprite. La région ainsi créée est une pure création technique, non visible à l'écran, mais parfaitement utilisable par les fonctions de gestion des régions. J'ai donc simplement ajouté deux fonctions: MoveRegion qui doit être utilisée de façon synchrone avec SPRITE_POSITION et ses dérivés, permettant ainsi de déplacer la région en même temps que le sprite, et la fonction CheckSpriceIntersection qui permet de déterminer si deux régions (et donc deux sprites) ont au moins 1 point en commun (et donc un contact !).
Dans la section "Le site de Klaus", "KGF.dll - nouvelles versions", j'ai publié la nouvelle version de KGF.dll contenant ces fonctions (la doc est à jour !), ainsi qu'une démo simpliste avec un sprite fixe un un sprite mobile par les flèches. Et on voit la détextion de la collision, dès que le sprite mobile touche le sprite fixe. Et par programme, j'ai rendu impossible de faire se chevaucher les deux sprites.
Voilà mon petit bonus de retour, et d'autres nouveautés suivront bientôt !
EDIT
Le WebDav est à jour également !