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 12/07/2012, 19h31   #1
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
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 :
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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2012, 21h17   #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
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à.
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2012, 14h45   #3
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
Merci pour l'explication qui était claire
et j'ai compris d'ailleurs:
Code :
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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2012, 16h18   #4
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
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.
josmiley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2012, 13h15   #5
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 591
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 591
Points : 370
Points : 370
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...
Blog: http://3dcyberspace.unblog.fr/
Site: Sanctuaire cybernétique
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2012, 23h59   #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
on peut télécharger l'archive de ce jeu ?
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 00h08.


 
 
 
 
Partenaires

Hébergement Web