Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Programmation multimédia/Jeux
Programmation multimédia/Jeux Forum d'entraide sur la 2D, 3D, video, son, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/10/2011, 18h25   #1
Bénarès77
Candidat au titre de Membre du Club
 
Homme
Inscription : décembre 2008
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations forums :
Inscription : décembre 2008
Messages : 30
Points : 12
Points : 12
Par défaut Enlever des sprites à un groupe et formes complexes

Bonjour à tous,
J'ai deux questions, à propos de pygame et des sprites.

- La première est purement technique : si j'ai un "group" de sprites, y'a-t-il une manière facile d'enlever le premier/dernier élément ajouté ? J'ai lu quelque part que group.remove() acceptait un entier en entrée pour l'index de l'élément à enlever. Mais quand j'essaye, même si ça ne plante pas, il n'enlève aucun élément au group. La seule façon que j'ai trouvé est d'avoir une deuxième liste, une bête liste, avec les même objets que dans le group, comme ça pour enlever un sprite dans la première, je fais appel à la seconde avec un truc du style group.remove(liste(-1)). Mais évidemment, du coup j'ai deux listes au lieu d'une, ce n'est pas très pratique...
Je suis sûr qu'il y a un meilleur moyen de faire ça, quelqu'un a une idée ?

- La seconde est plus générale. Bon, les sprites, rect et tout, c'est super... mais c'est rectangulaire. Que me conseilleriez-vous pour détecter des collisions entre un point et un objet (que je cherche donc à construire) ayant une forme plus complexe ? Ma première idée était de faire un ensemble de rect assez petits pour approximer la forme en question, mais je ne sais pas trop comment faire ça bien (disons en partant d'une image de l'objet en question, qui a des contours évidemment bien définis).Une idée ?

Merci d'avance de vos lumières !
Bénarès77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 19h33   #2
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 675
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 675
Points : 728
Points : 728
pour la 1, je me suis toujours passé de la class sprite ...
mais:
Citation:
Group.remove(*sprites): return None

Remove any number of Sprites from the Group. This will only remove Sprites that are already members of the Group.

Each sprite argument can also be a iterator containing Sprites.
c'est donc genre:
mongroup.remove([unsprite, unautresprite,[foosprite,barsripte,...],...])
et non pas un int ...

pour la 2 je dirai: lire le niveau alpha directement ou à partir d'un mask.
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 22h02   #3
VV33D
Membre expérimenté
 
Inscription : août 2010
Messages : 516
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 516
Points : 522
Points : 522
1/ si tu n'as qu'un groupe, sprite.kill() (personnellement je n'utilise plus les classes group non plus)

2/ Tout dépend si tu as besoin d'une collision exacte des pixels, ou d'approximations géométriques (chaque objet est alors une réunion de formes -rect,circle-)
VV33D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 08h23   #4
pfeuh
Membre Expert
 
Développeur en systèmes embarqués
Inscription : mars 2006
Messages : 763
Détails du profil
Informations personnelles :
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Développeur en systèmes embarqués
Secteur : Industrie

Informations forums :
Inscription : mars 2006
Messages : 763
Points : 1 031
Points : 1 031
Salut,

Citation:
Envoyé par Bénarès77 Voir le message
Bon, les sprites, rect et tout, c'est super... mais c'est rectangulaire. Que me conseilleriez-vous pour détecter des collisions entre un point et un objet (que je cherche donc à construire) ayant une forme plus complexe ? Ma première idée était de faire un ensemble de rect assez petits pour approximer la forme en question, mais je ne sais pas trop comment faire ça bien (disons en partant d'une image de l'objet en question, qui a des contours évidemment bien définis).Une idée ?
Le plus petit rectangle c'est le pixel. Le moyen le plus utilisé à l'époque des jeux 2D était le registre de collision, En gros on bascule un flag quand on pose un pixel de sprite alors que l'emplacement est déjà occupé par un pixel d'un autre sprite ou du décor. C'était souvent fait en hardware. Pour le faire par soft, il faut descendre à un niveau beaucoup plus bas que celui de pygame, il faudrait idéalement utiliser la SDL et coder cette détection en utilisant plusieurs calques (sprite1 .... sprite x, décor...). Bon courage.

A+

Pfeuh
pfeuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 15h42   #5
Bénarès77
Candidat au titre de Membre du Club
 
Homme
Inscription : décembre 2008
Messages : 30
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Italie

Informations forums :
Inscription : décembre 2008
Messages : 30
Points : 12
Points : 12
Bonjour à tous,

Désolé du temps de réponse imprévu. Je vous remercie de vos réponses. Pour la 1, je vais effectivement laisser tomber les groupes de sprites (à VV33D ; précisément, je ne peux pas faire sprite.kill(), puisque l'objet sprite est ce que je veux retrouver, je ne sais pas si tu vois ce que je veux dire), en attendant de peut-être laisser tomber les sprites eux-mêmes. Pour la 2, je vais utiliser une méthode intermédiaire je pense : je vais "paver" la forme avec des rectangles de différentes tailles (une dizaine, ou une vingtaine), mais sans descendre jusqu'au pixel. Je n'ai pas besoin que ça soit ultra précis dans tous les cas, et les formes en question ne sont pas ultra tordues.

Merci !
Bénarès77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 22h58   #6
josmiley
Membre chevronné
 
Homme
Inscription : avril 2004
Messages : 675
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 675
Points : 728
Points : 728
"Que me conseilleriez-vous pour détecter des collisions entre un point et un objet"

Mais pourquoi ne veux-tu pas lire la valeur du point en question ? Ca prendra moins de temps que de collidelist() une vingtaine de Rects ...
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h10.


 
 
 
 
Partenaires

Hébergement Web