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 :

[pygame] Je ne comprends pas la mécanique des Mask [Débutant(e)]


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut [pygame] Je ne comprends pas la mécanique des Mask
    Salut les python programmeur de multimédia/jeu,
    j'étudie pygame et ma rencontre avec les Mask me rend perplexe...
    Mes essaies ne m'ont pas mener bien loin: j'ai essayer de simuler une collision de deux balles a partir de deux Mask fait a partir d'image dont le résultat du script de test m'a mené a la conclusion que les masks que j'ai créer se superpose (si je met l'offset de collision a 0 ou < get_size() j'ai un résultat mais rien pour la position prévu) alors que les deux images (balles) ne sont pas inséré au même endroit et je n'ai rien vu dans le doc pour placer les mask avec des coordonnées donc ceux ci ne correspondent pas a l'objet image qu'il sont censer bitmapper et
    le script d'exemples (mask.py fournis avec la doc) est trop complexe pour moi ou du moins pas assez verbeux sur le sujet et n'est pas riche en commentaires.

    Mon code de test qui consiste a déplacer 1 balle vers la droit jusqu'a qu'elle arrive a la deuxième ne donne rien..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    import pygame
    from pygame.locals import *
    from sys import exit
    screen=pygame.display.set_mode((800,600))
    ball_1=pygame.image.load('/home/mon_nom/Bureau/ball.png').convert_alpha()
    screen.blit(ball_1,(0,0))
    mask_1=pygame.mask.from_surface(ball_1,127)
    print ball_1.get_size()  
    print mask_1.get_size()
    i=0
    seted_bits=[]
    while i < 32 :
      ii=0
      while ii < 32 :  
        seted_bits.append(mask_1.get_at((i,ii)))
        ii += 1
      i += 1
     
    print seted_bits.count(1) #vérification des bits du mask.  
     
    ball_2=pygame.image.load('/home/mon_nom/Bureau/ball.png').convert_alpha() # image d'une balle 
    screen.blit(ball_2,(300,0)) # je blit avant de créer le mask espérant que ca correspondent avec le mask de la ligne suivante.
    mask_2=pygame.mask.from_surface(ball_2,127)
    print ball_2.get_size()
    print mask_2.get_size()
    x,y=0,0
    while True :
      screen.fill((0))
      screen.blit(ball_1,(x,y)) # j'update le blit espérant updater le mask de la ligne suivante.
      mask_1=pygame.mask.from_surface(ball_1,127)
      screen.blit(ball_2,(300,0))
      mask_2=pygame.mask.from_surface(ball_2,127)
      for event in pygame.event.get() :
        if event.type == QUIT :
          exit()
        if event.type == KEYDOWN :
          if event.key == K_RIGHT :
    	x += 8
     
      if mask_2.overlap(mask_1, (300,0)) : # En mettant le offset a (0,0) le programme écrit en boucle 'here we are' donc la position de la balle ne correspont pas a la position du mask ???
        print 'here we are'
     
      pygame.display.update()
    Alors est ce que un mask est statique ? Mais alors comment le placé sur le display ?
    Bref je ne comprend pas comment ca fonctionne, je n'ai pas terminer mon étude de pygame et cela me rend perplexe.
    Merci de bien vouloir éclairé mon ignorance ou du moins me mettre sur la voie.

    Merci pour vos réponses éclairés.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  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
    les mask n'ont pas de position ... avec certaines méthodes(celles qui travaillent avec 2 masks) tu peux spécifier un offset; notamment Mask.overlap(othermask,offset).

    c'est comme mysurface.blit(othersurface,position) où position est un offset par rapport à mysurface ...


    si ball1 se trouve à (10,10) et ball2 à (12,15), tu testes l'overlap ainsi:
    maskball1.overlap(maskball2,(12-10,15-10)) ... ou (10-12,10-15) j'ai un doute, mais le principe est là.

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Merci pour l'explication qui était claire
    et j'ai compris d'ailleurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     #en remplacant
    if mask_2.overlap(mask_1, (300,0)) : 
        print 'here we are'
    #par    
    if mask_2.overlap(mask_1, (x-300,y-0)) : 
        print 'here we are'
    Mon test code marche et fait de lui ce que j'attends. je n'ai juste pas compris le fonctionnement des méhodes d'overlapping, (pour la création des bitmask pas de problème )
    Merci pour ton aide éclairé et précieuse josmiley, je vais essayer de créer des collisions maintenant pour approfondir le sujet.

    PS: Je me répète, peut-être mais je trouve que le fonctionnement de pygame n'est pas toujours facile a comprendre, qu'en pensez vous ?
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  4. #4
    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
    Citation Envoyé par Luke spywoker Voir le message
    PS: Je me répète, peut-être mais je trouve que le fonctionnement de pygame n'est pas toujours facile a comprendre, qu'en pensez vous ?
    disons que lorsque l'on vient de Tk par exemple, on est habitué à ce que ce soit "automagique"; le débutant pense souvent qu'il y a un lien magique entre les objets pygame.
    Par exemple mon_image.get_rect() retournerait un Rect lié à mon_image; hors il n'y a aucun lien entre les différents outils de pygame.

    on peut voir les Surfaces comme le système de calques dans un logiciel comme GIMP, et les Rects comme le système de sélection. Déplacer un calque ne déplace pas la sélection et inversement, Display étant la planche de base.

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    En plein dans le mille j'ai développer une application (jeu de foot) ou je mets systématiquement a chaque mouvement (les l'objets Rect a jours) représentant les joueurs et le ballon a jours:
    Le programme fonctionne mais il y a des bugs dû sûrement a la surcharge de travail et a un mauvais timing ...???
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  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
    on peut télécharger l'archive de ce jeu ?

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

Discussions similaires

  1. [WS 2003] [TSE] Ne comprends pas la Gestion des licence
    Par alex_m94 dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 13/10/2009, 17h57
  2. Réponses: 6
    Dernier message: 12/08/2007, 13h29
  3. [MySQL] Php, je ne comprends pas comment faire pour introduire des données dans une table
    Par Liondd dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 14/12/2006, 12h53
  4. Réponses: 18
    Dernier message: 08/12/2006, 02h30
  5. sql ne comprend pas mon where!et me demande des parametres
    Par marie10 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2004, 11h08

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