IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Enlever des sprites à un groupe et formes complexes


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 30
    Points : 29
    Points
    29
    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 !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    pour la 1, je me suis toujours passé de la class sprite ...
    mais:
    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.

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    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-)

  4. #4
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 30
    Points : 29
    Points
    29
    Par défaut
    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 !

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    "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 ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Théorie des collisions : formes complexes
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 13/12/2013, 14h02
  2. Intersection de sprite et forme complexes
    Par dnd888 dans le forum 2D
    Réponses: 2
    Dernier message: 22/06/2010, 19h18
  3. Réponses: 28
    Dernier message: 09/01/2007, 16h30
  4. Group BY qui m'enleve des valeurs
    Par EpOnYmE187 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/03/2006, 16h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo