Comment faire des boutons en python/pygame?
Je suis en train de faire un jeu dans pygame et sur le premier écran, je veux qu'il y ait des boutons que vous pouvez appuyer sur (i) lancez le jeu, (ii) de la charge d'un nouvel écran avec les instructions, et (iii) de quitter le programme.
J'ai trouvé cette ligne de code pour la fabrication des boutons, mais je ne comprends pas vraiment (je ne suis pas bon à la programmation orientée objet). Si je pouvais obtenir quelques explications sur ce qu'il fait, ce serait super. Aussi, lorsque je l'utilise et essayez d'ouvrir un fichier sur mon ordinateur à l'aide du chemin d'accès au fichier, j'obtiens l'erreur sh: filepath :Permission denied, qui je ne sais pas comment le résoudre.
#load_image is used in most pygame programs for loading images
def load_image(name, colorkey=None):
fullname = os.path.join('data', name)
try:
image = pygame.image.load(fullname)
except pygame.error, message:
print 'Cannot load image:', fullname
raise SystemExit, message
image = image.convert()
if colorkey is not None:
if colorkey is -1:
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)
return image, image.get_rect()
class Button(pygame.sprite.Sprite):
"""Class used to create a button, use setCords to set
position of topleft corner. Method pressed() returns
a boolean and should be called inside the input loop."""
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('button.png', -1)
def setCords(self,x,y):
self.rect.topleft = x,y
def pressed(self,mouse):
if mouse[0] > self.rect.topleft[0]:
if mouse[1] > self.rect.topleft[1]:
if mouse[0] < self.rect.bottomright[0]:
if mouse[1] < self.rect.bottomright[1]:
return True
else: return False
else: return False
else: return False
else: return False
def main():
button = Button() #Button class is created
button.setCords(200,200) #Button is displayed at 200,200
while 1:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
mouse = pygame.mouse.get_pos()
if button.pressed(mouse): #Button's pressed method is called
print ('button hit')
if __name__ == '__main__': main()
Merci à tous ceux qui peuvent m'aider.
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas un exemple de code pour vous, mais comment je pourrais faire c'est:
Qui est similaire à ce que votre exemple est en train de faire, bien différentes encore.
Le "code" que vous avez trouvé en ligne n'est pas bonne. Tout ce que vous devez faire un bouton est présent. Mettre ce proche du début de votre code:
Placez la ligne suivante dans votre boucle de jeu. Aussi quelque part dans votre boucle de jeu:
Aussi mettre ceci dans votre boucle de jeu là où vous l'avez fait
for event in pygame.event.get
Donc, buttonify charges de l'image qui sera sur le bouton. Cette image doit être un .fichier jpg ou tout autre fichier IMAGE dans le même répertoire que le code. L'image est son nom. Le nom se doit de posséder .jpg ou quoi que ce soit d'autre après, ainsi que le nom doit être entre guillemets. Les coords paramètre dans Buttonify est en haut à droite de coordonnées sur votre écran ou de la fenêtre qui s'ouvre à partir de pygame. La surface est cette chose:
Donc la fonction de quelque chose appelé "image" qui est une pygame surface, il met un rectangle autour de sa "imagerect" (pour le mettre à un endroit et pour la deuxième paramètre lors de blitting,) et puis il définit son emplacement, et blits sur l'avant-dernière dernière ligne.
Le bit suivant de code d '"Image" d'un tuple de deux 'image' et 'imagerect.'
Le dernier code a
if event.type == MOUSEBUTTONDOWN and event.button == 1:
, ce qui signifie que si le bouton gauche de la souris est enfoncé. Ce code DOIT être dansfor event in pygame.event.get
. La ligne suivante permet de souris un tuple de la position de la souris. La dernière ligne vérifie si la souris est entré en collision avec l'Image[1] qui, comme nous le savons, est 'imagerect.' Le code qui suit.Me dire si j'ai besoin de plus d'explications.
De sorte que vous avez à faire une fonction nommée bouton qui reçoit 8 paramètres. 1)Message de bouton
2)position X du coin supérieur gauche de la touche
3)la position Y du coin supérieur gauche de la touche
4)Largeur de la touche
5)la Hauteur de bouton
6)Inactif couleur(couleur de fond)
7)couleur(la couleur quand vous passez la souris)
8)le Nom de l'action que vous souhaitez vérifier
Ainsi, lorsque vous créez votre boucle de jeu et que vous appelez la fonction du bouton:
bouton ("Start", 600, 120, 120, 25, BLEU, CYAN, "Start" )
Ici est une classe pour un bouton que j'ai fait il ya longtemps:
https://www.dropbox.com/s/iq5djllnz0tncc1/button.py?dl=0
Le bouton est windows 7 style aussi loin que je me souvienne, et je n'ai pas pu tester récemment car je n'ai pas pygame sur l'ordinateur que j'utilise. Espérons que cette aide!