[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.