[Tutorial Blitz3D] : Un fond étoilé de couleur avec scroll
| Crystal Noir |
Posté le 12 Fév 2008 à 22:45
|
|
![]() Messages : 46 GCPoints : 15655 |
Il s'agit un peu de l'adaptation de mon tuto purebasic sur le sujet mais fais un peu différemment. De la 2D avec Blitz3D formidable non ? :D Destiné au débutant :) Nous allons apprendre à faire un fond étoilé avec des étoiles de couleur, scrolling vertical et en plus sans sprite. Ce tutorial vous permettra de comprendre les bases élémentaires de blitz, de comprendre ce que sont les Type (que j'appelle aussi liste chaînée). A vos marques ? prêt ? Codezzzzzzzzzzzz ! on est parti Commencez par lancer Blitz et faites un nouveau projet vierge, sauvegardez le directement. C'est fait ? Parfait, commençons donc. Pour pratique ce tuto reprendra les bases en rappel. Attachez vos mousquetons, on y go (merci pour le jeu de mot débile) : Commencez par écrire ce code : Citation :
Ici rien de compliqué, avec Graphics on crée la fenêtre avec pour résolution 800 X 600 une profondeur de couleur de 16 bits et en mode fenêtré. La commande SetBuffer BackBuffer est primordiale. Pour faire un jeu il faut bien comprendre son principe. Pour bien comprendre on va shématiser un peu. En fait lorsque vous créez un jeu, vous devais rafraichir l'écran, c'est à dire que admettons dans le cas d'un shoot'em up, votre vaisseau bouge, il y a des tirs, les ennemis aussi. Toutes ces opérations doivent être mis à jour sur l'écran. C'est un petit peu comme si vous dessiniez sur une feuille de papier votre scène puis que au verso vous dessiniez la même scène mais après que chaque élément (vaisseau, tir, ennemis, bonus....) aient changé de place, été détruit etc... et pour mettre à jour et bien vous tournez la feuille de papier, et ainsi de suite. En clair nous pouvons dire qu'il y a deux buffers, le BackBuffer et le FrontBuffer, pendant que blitz utilise l'un l'autre est utilisé pour dessiner tous les changements (déplacements, gestion des tirs etc..), une fois les changements effectués, il tourne : Il rafraichit. J'espère avoir été assez clair la dessus. Bon celui du fond là bas, répètes ce que je viens de dire ? Hein quoi ? t'as oublié ta bière et tes paninis ???? Non mais c'est quoi ces bandes de cancres ! vous savez très bien qu'à mes cours il faut emmener obligatoirement une bière et un panini on ne programme JAMAIS sans bière et panini ! bon c pas grave pour cette fois, continuons.... Donc nous avons dit à blitz grâce à SetBuffer Backbuffer() qu'il devrai utilisé le backbuffer pour dessiner. Sautez quelques lignes et ajoutez ce code : Citation :
Ici nous avons défini un Type, mais késako ça encore ? Bien nous allons prendre un exemple simple. Dans un shoot'em up, le joueur tire. Il faut pouvoir gérer ces tirs (déplacements, disparition etc...). On pourrait dans ce cas utiliser un tableau. Cependant notre tir a une position en x, en y et un etat (disparition). Je vous dis pas le nombre de dimension que devrait avoir le tableau même si dans ce cas là ce n'est pas bien compliqué. Ce n'est pas très pratique. Autre problème vous ne savez pas à l'avance combien de fois le joueur va tirer. Si c'est un bourrin, il va vous exploser le tableau et cela va prendre beaucoup de ressources. De plus une fois un tableau créé pour le redimensionner, c pas le plus simple. Alors pour palier à tous ces problèmes, nous utilsons les Types. Je les appelle aussi Liste. En fait si on prend l'exemple du tir de tout à l'heure, chaque tir est un "objet" qui a ses propriétés (position en x, y et etat), et tous les tirs sont regroupés dans une liste. La liste de tirs peut alors s'agrandir, ou au contraire rapetisser, sans importance. La gestion devient alors plus simple. De plus un tir a ses propres propriétés un peu comme un objet. On peut prendre aussi l'exemple d'un carnet d'adresse : Type Personne Field nom Field prenom Field adresse End Type Ici une personne aura son nom, prénom et adresse tout ca d'un coup, pratique non ? Dans notre exemple de fond étoile, nous avons créé un Type Etoile ce qui signifie que chaque étoile aura ses propriétés qui sont : posx : position en x posy : position en y CoulRouge : Valeur qui donnera la nuance de rouge pour la couleur CoulVert : idem mais pour le vert CoulBleu : Idem mais pour le bleu Ben oui hein, quitte à faire des étoiles, autant les faire de couleur. Donc chaque "objet" etoile (etoile n°1, etoile n°2....) aura ces propres propriétés. Ajoutez maintenant ceci : Citation :
Bien , c'est chouette d'avoir des Type, mais maintenant il faut les créer physiquement. Ici dans une boucle For Next on créé une étoile et on lui assigne ses valeurs pour chacune de ses propriétés. La boucle tournera 500 fois, ce qui va créer au final 500 étoiles différente. La commande Star.Etoile = New Etoile créé une étoile ensuite la suite assigne les valeurs des propriétés. La coordonnée x et y sera définie aléatoirement. Idem pour les variations de couleurs. Résultat : une étoile aura une position précise et une couleur précise. Cool, ca prend forme. Ajoutez ceci : Citation :
Et voici la boucle principale, c'est à dire que le programme va tourner en boucle jusqu'à ce que l'utilisateur lui dise d'arrêter. Vous voyez qu'il n'y a pas grand chose, regardons de plus près. La commande CLS permet d'effacer l'écran rien de bien compliqué. Et vient ensuite UpdateScreen() c'est quoi ca ? Et bien il s'agit d'une fonction que nous allons créer. Il faut savoir que moins il y a de chose dans la boucle principale du programme, plus le code est clair. Quand il s'agit d'effectuer des opérations plus complexes il est bien d'intégrer ces opérations dans une fonction qui sera ensuite appelé dans le programme principal, cela évite d'avoir une boucle principale énorme et la lecture du code s'en trouve plus simple. La fonction UpdateScreen() nous allons la créer de suite. Après ce bout de code insérez en dessous : Citation :
Voilà notre fonction, vous devez l'insérer après la ligne Until Keyhit(1). On commence par lui donner un nom ici UpdateScreen ensuite dedans il y a une boucle. Nous avons vu tout à l'heure les Types. Maintenant c chouette un fond étoilé mais il faut que ca bouge et il faut le dessiner. La boucle For Star.Etoile = Each Etoile signifie en fait "Pour chaque étoile, faire ceci" et on fait quoi ? Lisez la suite : Color StarCoulRouge,StarCoulVert,StarCoulBleu : Nous avons dit que nous ferions un fond étoilé sans sprite et avec des points, cette commande définit la couleur que va avoir notre étoile. Nous avons tout à l'heure pour chaque étoile donné des valeurs pour le rouge, vert et bleu, voici son application. Color est en fait la couleur de la mine de crayon qui va servir à faitre notre point ou notre étoile. Plot Starposx, Starposy : Et bien on trace le point à l'écran avec les coordonnées définit aussi tout à l'heure. Starposy = Starposy + 1 : il faut que ca bouge non ? donc pour chaque étoile on change la position y pour la faire descendre. If Starposy > 600 Starposy = 0 EndIf Là c'est une condition très simple. Lorsque vos étoiles vont se retrouver en bas de l'écran, elles vont sortir et pouf plus d'étoile en vu, ici on teste ce problème : "Si mon étoile sort de l'écran (et donc que ca position en y est supérieur à 600) alors, on fixe sa position y à 0 (et donc en haut de l'écran). Vous voyez c'est pas dur :) Bien la fonction est créé et donc on l'appelle dans le programme principal. A chaque tour de programme blitz va lancer la fonction UpdateScreen() et hop les étoiles vont bouger ! Derrière tout ca se trouve Flip qui sert justement à gérer le buffer, chose que je vous ai expliqué au début, il tourne le buffer et rafraichit l'écran, c'est obligatoire et c'est ce qui permet de voir vos étoiles bouger ! Until Keyhit(1) dit au programme que si l'utilisateur appuie sur la touche Echap, il doit s'arrêter. Et voilà ! vous avez un fond étoilé en mouvement, et sans sprite, elle n'est pas belle la vie ;) Je vous donne ici le programme complet après avoir fait le tuto : Citation :
|
|
| Mod |
Posté le 29 Juin 2008 à 11:40
|
|
![]() Messages : 4954 GCPoints : 2100823 |
[Tutoriel ajouté au site] : Un fond étoilé avec scroll
Dernière édition le 29 Juin 2008 à 11:59
|
|

