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 ...
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()
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 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!
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 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.
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...
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
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.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.