2009-04-09 6 views
1

Je viens de commencer à apprendre à utiliser pygame hier. J'ai lu ce livre qui était super utile et suivi tous ses tutoriels et des exemples et d'autres choses. Je voulais essayer de faire un jeu de plateforme/jeu de plateforme très simple, mais le livre sortait assez vite dans la modélisation 3D sans m'enseigner comment faire des sprites changeants pour le mouvement de gauche à droite et comment faire défiler les images animées.Pygame: Sprite changeant en raison de la direction du mouvement

J'ai passé tout aujourd'hui à essayer d'obtenir un sprite à afficher et être en mesure de se déplacer avec haut en bas à gauche et à droite. Mais à cause du script simple, il utilise une image statique et refuse de changer. Est-ce que quelqu'un peut me donner quelques connaissances sur la façon de changer les sprites? Ou envoyez-moi un tutoriel qui fait?

Chaque référence et personne qui l'expérimente a toujours utilisé des formes générées, donc je ne suis jamais capable de travailler avec elles.

Toute aide est très appréciée.

Ajouté: avant de trouver comment placer des animations complexes dans ma scène, j'aimerais savoir comment je peux faire passer mon «joueur» à des images immobiles en ce qui concerne mon appui vers le bas à gauche ou à droite. peut-être diagonale si les gens connaissent son quelque chose de vraiment compliqué.

Ajouter: C'est ce que j'ai mis ensemble jusqu'à présent. http://animania1.ca/ShowFriends/dev/dirmove.rar Serait-il possible de faire la direction/action définir la colonne de l'action et avoir le petit code de réglage de la colonne aussi le faire descendre dans une boucle pour faire l'animation? (ou serait-ce une mauvaise utilisation de l'efficacité?)

+0

Cela fait longtemps que j'ai utilisé pygame, mais j'ai eu un peu de chance avec ce tutoriel: [Hulk veut animation!] (http: // choosetheforce. blogspot.com/2008/04/third-pygame-hulk-want-animation.html) et cette classe: [animsprite.py] (http://static.raumkraut.net/libs/animsprite.py) Par curiosité, quel livre utilisez-vous? J'ai finalement abandonné par manque de temps et de bons matériaux. –

+0

C'est drôle. J'ai trouvé cette chose de l'expérience de hulk aussi. J'ai essayé de l'utiliser en haut, en bas, à gauche, à droite pour bouger mais je ne l'ai jamais eu. Livre: McGugan - Début du développement du jeu avec Python et Pygame J'ai fait ceci avec: http://animania1.ca/ShowFriends/antgame.rar images inclus – RamonLion

Répondre

1

Voici un exemple stupide qui alernates entre deux premières images du spritesheet lorsque vous appuyez sur gauche/droite:

import pygame 

quit = False 
pygame.init() 
display = pygame.display.set_mode((640,480)) 
sprite_sheet = pygame.image.load('sprite.bmp').convert() 

# by default, display the first sprite 
image_number = 0 

while quit == False: 
    event = pygame.event.poll() 
    no_more_events = True if event == pygame.NOEVENT else False 

    # handle events (update game state) 
    while no_more_events == False: 
     if event.type == pygame.QUIT: 
      quit = True 
      break 
     elif event.type == pygame.NOEVENT: 
      no_more_events = True 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       image_number = 0 
      elif event.key == pygame.K_RIGHT: 
       image_number = 1 

     event = pygame.event.poll() 

    if quit == False: 
     # redraw the screen 
     display.fill(pygame.Color('white')) 
     area = pygame.Rect(image_number * 100, 0, 100, 150) 
     display.blit(sprite_sheet, (0,0), area) 
     pygame.display.flip() 

Je ne l'ai jamais vraiment utilisé Pygame avant peut-être que ce code shoudln't vraiment être pris par exemple. J'espère que cela montre les bases cependant.

Pour être plus complet, je devrais attendre un certain temps avant la mise à jour, par ex. contrôle que je mets à jour seulement 60 fois par seconde.

Il serait également pratique d'écrire une classe d'image-objet qui simplifierait votre travail. Vous passeriez la taille d'un cadre d'image-objet dans le constructeur, et vous auriez des méthodes comme update() et draw() qui ferait automatiquement le travail de sélection de l'image suivante, en mélangeant l'image-objet et ainsi de suite.

Pygame semble fournir une classe de base à cette fin: link text.

+0

fantastique. Cela a fonctionné parfaitement. à présent. Je pensais. si c'était le cas. Est-ce que je l'aurais donc il fonctionne essentiellement comme un système de type grille. gauche et droite sur la feuille est l'action spécifique, puis il boucle une certaine quantité de cadres vers le bas? Je définirais manuellement le nombre d'images par action. – RamonLion

+0

Désolé mais je n'ai pas compris votre question. –

+0

Eh bien, le code dit simplement que chaque changement dans le nombre est de savoir combien d'espaces sprite de plus. et donc dans mon code (lié ci-dessus) je l'ai pour les cadres de course et d'action. mais ils ne sont pas animés. Serait-il possible d'avoir un autre cycle de code vers le bas après que le numéro d'image-objet a été défini. ... – RamonLion

0

Je ne connais pas beaucoup Pygame, mais j'ai utilisé SDL (sur lequel est basé Pygame).

Si vous utilisez Surface.blit(): link text

Vous pouvez utiliser l'argument area en option pour sélectionner la partie de la surface à dessiner. Donc, si vous mettez toutes les images qui font partie de l'animation dans un seul fichier, vous pouvez sélectionner quelle image sera dessinée. C'est ce qu'on appelle "écrêtage".

Je suppose que vous aurez une boucle de jeu qui mettra à jour l'état du jeu (en changeant l'image actuelle de l'image-objet si nécessaire), puis dessinez les sprites en utilisant leur état.

+0

donc vous dites que j'utiliserais 1 image avec le feuille de sprite entière et l'a-t-il blit une section sprite sur chaque tique? A quoi ressemblerait le code si le sprite avait 150p de hauteur et 100px de largeur? – RamonLion

0

mec la seule chose que vous avez à faire est biensur

pygame importation

et toutes les autres choses nécessaires code de type et d'autres choses .......... alors quand il vient à vous faire une spri

class .your class nam here. (pygame.sprite.Sprite): 
    def __init__(self): 
      pygame.sprite.Sprite.init(self) 
      self.image=pygame.image.load(your image and path) 
      self.rect=self.image.get_rect() 
      x=0 
      y=0 

      # any thing else is what you want like posistion and other variables 

    def update(self): 
      self.rect.move_ip((x,y)) 

et c'est tout !!!! mais ce n'est pas la fin. Si vous faites cela, vous n'aurez pas fait le sprite pour le déplacer vous avez besoin

Questions connexes