2017-09-02 5 views
1

Je cherche à tracer une ligne entre deux instances différentes de la même classe de sprite, la classe sprite étant codé dans comme indiqué ici (ce qui est tout simplement la fonction __init__):Comment utiliser les côtés d'un sprite rect dans pygame?

class Atom(pygame.sprite.Sprite): 
"""Creates an atom of an element. 
The element can be specified using the element parameter. 
This will take a dict argument, contained in a constants file of some sort.""" 
def __init__(self, element, centre_loc): 
    pygame.sprite.Sprite.__init__(self) 

    self.image = pygame.Surface((30, 30), pygame.SRCALPHA) 
    pygame.gfxdraw.aacircle(self.image, 15, 15, 14, (0, 255, 0)) 
    pygame.gfxdraw.filled_circle(self.image, 15, 15, 14, (0, 255, 0)) 


    self.rect = self.image.get_rect() 
    self.rect.center = centre_loc 
    self.element = element 
    self.show_text(element) 
    self.print_properties(self.element) 

J'ai essayé de le faire en utilisant le code ici:

pygame.draw.line(screen, color, sprite.rect.right. sprite.rect.left) 

J'ai simplifié le code ci-dessus, pour mettre en évidence ce que j'ai réellement fait. Le code actuel pour ce qui précède est trouvé here, il est commenté sur la ligne 25. Le reste du code peut également être trouvé dans ce référentiel pour référence.

J'avais espéré que cela fonctionnerait mais j'eu cette erreur à la place:

TypeError: Invalid start point argument

Alors qu'est-ce que je fais mal ici? Merci d'avance.

Répondre

2

sprite.rect.left et sprite.rect.right et points non valides car ils sont chacun un nombre entier unique. Ce que vous voulez probablement, c'est sprite.rect.topleft et sprite.rect.topright, ou les équivalents du bas ou du milieu.

+0

Ainsi, 'sprite.rect.midleft' ou' sprite.rect.midright' fonctionnerait-il aussi, ou existe-t-il un autre moyen d'obtenir les équivalents mid? – ModoUnreal

+0

Oui, absolument. [Cette] page (https://www.pygame.org/docs/ref/rect.html) fournit une liste complète des méthodes et des attributs disponibles pour les objets rect. –

+0

Je viens de tester 'midleft' et' midright' et ça marche! Merci beaucoup! – ModoUnreal