Partage
  • Partager sur Facebook
  • Partager sur Twitter

[exercice]faux scrolling

starsfield

    21 décembre 2010 à 12:50:44

    hello,
    vu que certain s'interesse au scrolling, je vous propose un petit exercice fastoche.
    il s'agit de faire en faut scrolling vertical un champs d'étoiles sur 3 niveaux (lent, rapide, +rapide) avec une navette se déplaçant dans les 2 directions.

    j'entends par faux scrolling le fait qu'il n'y a pas réellement déplacement de l'environement de la navette mais juste une modification de l'arrière-plan qui donne cette illusion.

    si ça vous tente ... :p


    from pygame import *
    from random import randrange
    
    screen = display.set_mode((400,600))
       
    class Starsfield(Surface,object):
        """
        """
        def __init__(self):
            scrsize = self.w,self.h = display.get_surface().get_size()
            Surface.__init__(self,scrsize)
            self.void = Surface(scrsize)
            self.void.set_alpha(100) # modifie la longueur de la trainee
            self.foo = 0
            self.l0 = []
            self.l1 = []
            self.l2 = []
        
        def update(self):
            self.foo += 1
            self.blit(self.void,(0,0))
            
            if not self.foo&3:
                for _ in range(len(self.l0)):
                    s = self.l0.pop(0)
                    if s[0][1] < self.h:
                        s[0][1] += 1
                        self.l0.append(s)
            
            if self.foo&1:
                for _ in range(len(self.l1)):
                    s = self.l1.pop(0)
                    if s[0][1] < self.h:
                        s[0][1] += 1
                        self.l1.append(s)
            
            for _ in range(len(self.l2)):
                s = self.l2.pop(0)
                if s[0][1] < self.h:
                    s[0][1] += 1
                    self.l2.append(s)
            
            x = randrange(100)
            if x<10: self.l0.append([[randrange(self.w),0],(randrange(0x33),)*3])
            if x<5: self.l1.append([[randrange(self.w),0],(randrange(0x33,0x99),)*3])
            if not x: self.l2.append([[randrange(self.w),0],(randrange(0x99,0xff),)*3])
            
            for s,c in self.l0: self.set_at(s,c if randrange(500) else 0x9999ff)
            for s,c in self.l1: self.set_at(s,c)
            for s,c in self.l2: self.set_at(s,c)
            
    class Xwing(Surface,object):
        """
        """
        def __init__(self):
            w,h = display.get_surface().get_size()
            img = image.load('xwing.png')
            Surface.__init__(self,img.get_size(),SRCALPHA)
            self.blit(img,(0,0))
            self.pos = [w/2-32,h-64]
        
        def update(self):
            k = key.get_pressed()
            if k[K_LEFT]: self.pos[0]-=2
            elif k[K_RIGHT]: self.pos[0]+=2
            if k[K_UP]: self.pos[1]-=2
            elif k[K_DOWN]: self.pos[1]+=2
        
    
    st = Starsfield()
    xw = Xwing()
    t = time.Clock()
    while True:
        ev = event.poll()
        if ev.type == KEYDOWN and ev.key == K_ESCAPE: break
        st.update()
        screen.blit(st,(0,0))
        xw.update()
        screen.blit(xw,xw.pos)
        display.flip()
        t.tick(80)
        #print t.get_fps()
    


    Image utilisateur
    • Partager sur Facebook
    • Partager sur Twitter

    Python c'est bon, mangez-en. 

      27 décembre 2010 à 18:41:01

      apparement ça n'intéresse personne ... :p
      bha, j'ai ajouté des lasers pour faire zouli. Appuyez sur 'f' ou 't'.
      http://joel-murielle.perso.sfr.fr/xwing.zip
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        27 décembre 2010 à 21:50:04

        Salut Josmiley, :)

        Si si, ton exercice à l'air pas mal, mais euh, par exemple moi je débute en pygame, et bah si j'ai pas un minimum la marche à suivre, je vais jamais me lancer dans un tel exo ( que tu dis fastoche mais parle pour toi :p ca me paraît déjà hors de portée pour moi :-° ).

        Je dis pas de mâcher le travail hein, mais des conseils du style:
        1/ definir telle classe
        2/ gérer ceci
        3/ penser à inclure ça
        4/ une boucle sur telle type de structure

        J'ai vu, en parcourant le web pour faire des recherches sur pygame, que t'avais posté dans d'autres forums pour parler de pygame. Vu que t'as l'air vachement doué et bien calé, tu voudrais pas écrire des tutos pour le sdz par hasard? ;)
        En tout cas moi je serai preneur direct! ^^
        • Partager sur Facebook
        • Partager sur Twitter
          28 décembre 2010 à 12:56:50

          Citation : Fort en pommes

          Si si, ton exercice à l'air pas mal, mais euh, par exemple moi je débute en pygame, et bah si j'ai pas un minimum la marche à suivre, je vais jamais me lancer dans un tel exo ( que tu dis fastoche mais parle pour toi :p ca me paraît déjà hors de portée pour moi :-° ).



          c'est un exo que tu as déjà fait, tu l'as même proposé ...
          mais au lieu d'avoir une planète qui rebondit, tu as des étoiles(pixels) qui défilent de haut en bas.

          en gros tu as une liste d'étoiles à afficher.
          tu parcours la liste pour déplacer ces étoiles; celles qui sortent du cadre en sont retirées tandis que d'autres y apparaisent au hasard du temps.
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            30 décembre 2010 à 9:43:13

            Je vais essayer de commenter ton code pour voir si j'arrive à piger la démarche.
            C'est le seul moyen que j'ai trouvé pour comprendre le code des autres (dès qu'il y a plus de 20 lignes de codes :-° ).
            Et puis je suis pas encore super à l'aise avec les classes mais ça va venir... :p
            • Partager sur Facebook
            • Partager sur Twitter
              31 décembre 2010 à 13:04:09

              Citation

              Je vais essayer de commenter ton code pour voir si j'arrive à piger la démarche.

              from pygame import *
              from random import randint
              
              screen = display.set_mode((300,600))
              stars = [] # liste d'etoile
              clk = time.Clock() # temporisation
              
              while True:
                  if event.peek(QUIT): break # pour sortir de la boucle
                  event.clear() # ...
                  screen.fill(0) # efface le screen
                  for star in stars[:]: # parse une copie de la liste
                      screen.set_at(star,0xffffff) # affiche une etoile
                      star[1] += 1 # fait avancer l'etoile
                      if star[1]>600: stars.remove(star) # si l'etoile sort du screen on la retire de la liste
                  display.flip() # refresh
                  if not randint(0,5): stars.append([randint(0,300),1]) # ajoute au pif une etoile dans le liste (en 1er ligne evidement)
                  clk.tick(40) # temporisation
              

              • Partager sur Facebook
              • Partager sur Twitter

              Python c'est bon, mangez-en. 

              [exercice]faux scrolling

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown