begin process at 2012 05 27 14:25:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > CLASS SPRITE AVEC SDL

CLASS SPRITE AVEC SDL


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :sprite, collision, sdl Niveau :Débutant Date de création :11/06/2005 Date de mise à jour :11/06/2005 22:32:00 Vu / téléchargé :6 116 / 802

Auteur : lglandeur

Ecrire un message privé
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

cette class permet de gère les sprites, avec la gestion des collisions.
si vous avez des idées pour améliorer ou ajouter des fonctions, se serait simpas de le dire.

j'ai développé cette class dans le but de me faciliter la gestion des images dans mes application graphique future.

je ne suis contre aucune critique tant qu'elle sont constructives.


 Conclusion

pour info la collision cercle-boite, ne fonctionnent pas très bien, si quelqu'un a une idée qu'il le dise.

pour les fautes je m'excuse d'avance, mais moi et l'orthographe ça fait 3, si ce n'est pas plus.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 juin 2005 22:32:00 :
explication de mais motivation et tentative de correction d'orthographe

 Sources du même auteur

Source avec Zip CLASS SIMPLE POUR LIRE DES FICHIER *.INI

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip DECOUPAGE DE SPRITES par Jackyzgood
Source avec Zip Source avec une capture BILLARD EN C ET SDL (PAS DE C++) par evil512
Source avec Zip Source avec une capture JEU SOUCOUPE VOLANTE EN SDL par Mal_au_DOS
Source avec Zip Source avec une capture PETIT PROGRAMME EN SDL - TESTER DIFFÉRENTE TECHNIQUE DE PROG... par 78.ultima

Commentaires et avis

Commentaire de Pamaury le 12/06/2005 00:13:42

ton test boite-boite pourrait être plus rapide(et plus lisible):

if(ABS(rect[numSprite1].x-rect[numSprite2].x)>(rect[numSprite1].w/2+rect[numSprite2].w/2))
    return false;
            if(ABS(rect[numSprite1].y-rect[numSprite2].y)>(rect[numSprite1].h/2+rect[numSprite2].h/2))
    return false;
return true;


et voilà le code pour une collision boite-cercle
int rad=MAX(rect[numSprite1].w,rect[numSprite1].h)/2;
int x=rect[numSprite1].x;
int y=rect[numSprite1].y;
int w=rect[numSprite2].w/2;
int h=rect[numSprite2].h/2;

if(isPointIn(x,y,rect[numSprite2].x,rect[numSprite2].y,w+rad,h))
    return true;
if(isPointIn(x,y,rect[numSprite2].x,rect[numSprite2].y,w,h+rad))
    return true;

rad*=rad;

int dx=rect[numSprite2].x+w-x;
int dy=rect[numSprite2].y+h-y;
if((dx*dx+dy*dy)<=rad)
    return true;

dx-=2*w;
if((dx*dx+dy*dy)<=rad)
    return true;
    
dy-=2*h;
if((dx*dx+dy*dy)<=rad)
    return true;
    
dx+=2*w;
if((dx*dx+dy*dy)<=rad)
    return true;
    
return false;

Commentaire de lglandeur le 12/06/2005 00:30:13

merci Pamaury pour l'astuce avec les valeur abs pour le test boite-boite, je n'y avait pas pensé.

par contre pourrais m'expliquais comment fonctionne la fonction isPointIn

Commentaire de Kirua le 12/06/2005 10:12:36

Tu peux aussi essayer de gérer des collisions dites pixel-perfect, c'est-à-dire que tu gèrerais la transparene de tes images (deux pixels transparents ne se rentrent pas de dans ;)). Ça donne des effets plus prévisibles et réalistes pour le joueur + pas besoin de différencier cercle-boîte et boîte-boîte ou cercle-cercle.

Tutos:
http://www.ddj.com/documents/s=983/ddj9513a/
http://www.games-creators.org/wiki/Documentv3_198

Commentaire de Pamaury le 12/06/2005 10:46:49

oui en effet c'est pas mal mais bon si tu n'a pas d'image par exemple(tu dessine avec OpenGL et msie à l'échelle par exemple) çà marchera pas donc autant savoir faire le test mathématique .

Pour le test boite-cercle je veux bien t'expliquer mais donne moi une adrese e-mail où je peux t'envoyer une image parce que sinon j'y arriverais pas .

Commentaire de Kirua le 12/06/2005 10:50:27

Euh, le test mathématique est l'étape préalable du pixel perfect :) d'abord tu testes les boîtes: est-ce que les images se rentrent dedans, et après tu testes les pixels. Mais si t'es en 2D y a pas de problème (sauf dans le cas de la mise à l'échelle, très juste -> à éviter :p).

Boîte cercle il s'agit juste de voir si la distance de chaque côté de la boîte au centre du cercle est plus grande ou plus petite que le rayon du cercle, et comme tout est parralèle aux axes du repère, c'est pas trop dur, hmm ;)

Commentaire de Pamaury le 12/06/2005 12:25:35

oui en effet c'est pas très dur il suffit de bien voir le problème . Le pixel perfect(j'avais déjà lu l'article) marche bien si on les image . Dans le cas de la SDL çà va mais dès qu'on met à l'échelle c'est mort .

Commentaire de lglandeur le 12/06/2005 14:21:05

merci Kirua pour les sites, et je pense que ma prochaine maj comporteras le pixel perfect.

pour le pixel perfect j'aimerais savoir 2 chose:
   1) si il y a un moyen sous sdl qui permet de savoir si un pixel est transparent ou non, sans faire de test de couleur
   2) a quel moment je doit crée le masque pour perdre le moins de temps possible.

pour Pamaury mon e-mail: lglandeur@free.fr

Commentaire de Kirua le 12/06/2005 14:25:51

à mon avis tu dois sauver avec l'image (et séparer l'image du sprite, car les images sont des ressources communes, tu peux avoir plusieurs sprites qui exploitent la même image, et donc le même masque) un tableau de bits ou de booléens qui constituent le masque. tu le constitues au chargement de l'image (qui doit être unique et centralisé), et pr le fabriquer, beeeen, ça dépend de tes images! avec du targa (tga) il y a un octet alpha, avec les bmp il te faut soit un masque supplémentaire soit connaître la couleur ... à toi de définir! pas easy, je sais bien.

l'idéal, ce serait un gestionnaire de ressources qui donne accès aux images à la demande, et comme ça les sprites ne se soucient pas de savoir ça: c'est géré à part.

Commentaire de MoDDiB le 17/06/2005 23:45:53

Hey kirua pourquoi tu nous ferais pas un tuto la dessus avec le .tga ? :)

Commentaire de Kirua le 17/06/2005 23:52:46

Hmmm, parce que j'ai jamais fait ça, ça peut répondre à ta question ;) je parle plus par procuration que par expérience à vrai dire.
Par contre pour les gestionnaires de ressources, c'est pas bien méchant: tu as une classe Manager qui donne des "handle" sur les ressources à la demande et qui compte le nombre de handle qu'elle a donné. Si on demande une ressource qui n'existe pas, elle est créée (chargée), et si elle existait déjà, on retourne simplement un handle sur celle existante.
Quand un handle est détruit (appel du destructeur de celui-ci), il le dit à son manager "père". Quand le nombre de handles dans la nature d'une ressource est à 0, c'est que plus personne ne l'utilise: on la libère.

Il y a moyen de faire qq ch d'assez beau et de très générique avec un peu d'héritage et de template, pour pouvoir gérer avec le même set de classes des polices, des textures, des sons, des musiques, des scripts ...

L'idée pour l'utilisation ici, ce serait simplement d'avoir un manager qui centralise le chargement des textures et des masques, et qui s'occupe de fournir des handle sur tout ce beau monde: ça réduit drastiquement les temps de chargement!

Quant à la définition du handle, c'est le seul truc compliqué et ça dépend assez fort de l'usage que vous avez de la chose, et de la souplesse que vous voulez y donner. Ça peut être un pointeur sur la ressource possédée par le manager, ça peut être une instance de classe qui possède toutes les infos, copiées depuis la ressource, ça peut être une référence ...

Commentaire de Insomniakk le 18/09/2005 12:45:55

J'ai fait ça pour tester la classe:

     sprit.SetPos(1, xsouris, ysouris);
     sprit.affich(screen, -1);

Mais ça plante... Il me dit que c'est une erreur de segemntation...

Commentaire de Insomniakk le 18/09/2005 17:18:43

Bon, c'est bon, ça ne bug plus... (étrange...)

Ce qu'il manque dans ta classe, c'est un systeme de frame !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[SDL] Rotation de sprite [ par kojiro2 ] Coucou tout le monde, je veux faire tourner un sprite sur lui meme c'est a dire que ce sprite tourne entre 0° et 360°.Le pb c'est que j'utilise une co probleme SDL et POO [ par darmoor ] voila je suis encore qu'un d&#233;butant dans la mati&#232;re avec la POO et j'apprend a utiliser SDL j'ai fait un essai en affichant un image et ave utilisation SDL Sprite [ par peter1789 ] Bonjour à tous,Je débute dans le language C et je voudrais savoir comment utiliser la librairie "SpriteWorldX" (extension de SDL) et s'il existe des t Message d'erreur avec SL [ par Maximi ] Bonjour je débute avec C++ et SDL, je travaille avec VC++ 6.J'ai fait un tout petit programme et mon problème, est le suivant :je compile le code et c android sprite collision [ par sokotanic ] Bonjour à tous; je m'excuse si je me trompe dans la categorie(là ou je dois poster ma question), mais je suis sûr que je suis dans le bon site. Andr Tetris game [ par hindou11 ] Bonjour, je viens de me lancer dans la SDL, mais il se trouve que je plante un peu......je suis entrain de programmer le jeu du tetris mais je m'emb Programmation en Visual C++ : avec la bibliothéque QT et SDL [ par controlleur ] Bonjour j'ai rencontrer un problème l'or du debugging de mon projet , même si mon projet compile avec succès , et aussi j'ai ajouté dans PROPERTIES Question sur SDL_Surface [ par greycats ] Bonjour, Je suis actuellement en train de faire un jeu en C avec la librairie SDL. J'aurai voulu savoir si il était possible de comparer 2 tableaux [jeu 2d] Snake ,petit bug jeu [ par zakuza ] Bonjour à tous , je suis entrain de m'amuser à programmer un petit snake histoire de pratiquer,bon il ne fonctionne pas trop mal mais j'ai quelques bu comment recuperer et afficher d'un texte lu en sdl [ par cherif2009 ] bonsoir je developpe actuellement une application en sdl et j'ai besoin d'aide à propos de comment recuperer et afficher un texte en sdl. merci pour v


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales