Tutoriaux (Cliquez ici pour afficher la liste avec les descriptions)
Tutoriaux GameMaker

       Débutant

Tutoriel : Débuter avec Game Maker
Mark Overmars Glog:Accélérer le Temps de Chargement
L'appellation des ressources dans Game Maker.
Tutorial: Convertir un .gmk en .gm6!
Tutorial Intégral Débutant, Intermédiaire et Confirmé: Partie I:Débutant
Tutorial : Les variables de déplacement
Tutorial sur sa Boîte de Dialogue et des Astuces pour qu'elle soit plus Esthétique
Comment faire? Les Textes à la STARWARS
Dessiner des Graphismes pour un Jeu Vidéo, conseils & connaissances de bases
Initiation à la création de Jeux Vidéos avec GameMaker
Pong
Aide GameMaker 6.1 en Français
Tutoriel: GameMaker 5.3a en Français
Explication du D&D
Tuto mise en main: Casse Brique
       Intermédiaire

Tutorial Intégral Débutant, Intermédiaire et Confirmé: Partie II:Intermédiaire
Les collisions en gml
Mark Overmars Glog: Astuces sur Game Maker - Une aide plus jolie
Tutoriel Game Maker - Les Primitives
Tutoriel Game Maker - Les Couleurs en GML
Compressez un .wav tout en gardant son format
Tutorial: Les ressources externes
Créer ses propres extensions sous Game Maker 7
Tutoriel GameMaker : Les fichiers ini
Tutorial d'apprentissage des timelines et des paths
Alléger son jeu avec Game Maker
Collisions Nettes pour le mapping
Création d'un programme de dessin basique
Les variables et les constantes
FTP DLL
Créer une Variable
       Avancé

Utilisation de 'Ombres et lumières'
Je vais dans ce tutorial vous expliquer comment marche mon moteur de lumière. Il n'y a pas d'images, que du texte et des choses à retenir, mais ce n'est pas si compliqué que ça, et au final, cela vaut le coup ^^
Il y a tout ce qu'il faut pour comprendre le contionnement et les différentes fonctions, je suis entrain de rédiger un deuxième tutorial sur l'optimisation de vos jeux en relations avec ce moteur. Il viendra d'ici la mi-décembre.


Fonctionnement :

Il y a trois choses à avoir :
  • un objet qui s'occupe de l'affichage générale des lumières : le
    buffer.
  • Un objet qui fait de la lumière.
  • Un objet qui fait de l'ombre à la lumière (un occluder)


En fait, chaque lumière calcule (si elle est rafraichie) les ombres des
objets à portée du rayon de la lumière, puis le résultat est stocké dans le
buffer, avec toutes les autres lumières.

Il faut savoir que le moteur est prévu pour calculer la lumière
apparraissant dans la view0, et ce n'est pas modifiable. Il faut donc
obligatoirement utiliser la view0.


Pas à pas :

1) Création du buffer.
Il s'agit donc de l'objet qui va stocker les lumières/ombres et qui
va faire l'affichage final. Il est préférable de faire un objet qui
s'occupera uniquement du buffer du système de lumière. Lors de la création
du buffer (pas forcément au début de la room, mais c'est mieux et ça
consomme pas grand chose), il faut appeler l'instruction :

("code"):
scr_oel_buffer_create()

il faut ensuite mettre le script scr_oel_buffer_end_step.. dans end step.
Ce script n' pas d'arguments, mais il faut en changer le contenu. Vous
trouverez des lignes du type :

    with(obj_light...)
    {if ....}


Il faut rajouter votre propre couple de lignes pour chaque objet lumière!
par exemple, si une de vos lumières s'appelle obj_lumiere_rose, il faudra
avoir ces lignes :

    with(obj_lumiere_rose)
    {...}


Seul le nom change, le reste est pareil. Il faut bien entendu supprimer les
lignes mises par défaut, elles correspondent aux objets lumière de
l'exemple, mais si vous n'avez pas d'objets de ce nom faisant de la
lumière, il faut les supprimer.

Il reste la dernière fonction du buffer, et la plus importante :
l'affichage avec la fonction

("code"):
scr_oel_buffer_draw(shadow,alpha)


On le met bien sur dans l'event draw du buffer, et les arguments sont les
suivants :
shadow : si vous mettez 0, la pièce est éclairée par défaut, et les
lumières éblouiront par dessus. Mis à 1, la pièce est noire et seul les
lumières éclaireront. Il n'est donc par défaut pas possible d'éblouir
lorsque vous êtes en mode 'nuit'. On pourra, mais on vera ça plus tard.

Le second argument, est la transparence des lumières, et des lumières
seulement : pas de l'ombre! Cela permet de régler l'intensité des lumières,
c'est toujours pratique.


2) Création d'une lumière

Deuxième élément : la lumière. Il est possible d'utiliser bien sûr la
lumière dans un objet déjà prévu pour autre chose, mais pour se simplifier
la vie et pour une meilleure clarté, il vaut là encore mieux prendre un
objet rien que pour votre lumière.

Dans le create event, il faut mettre :
("code"):
scr_oel_light_create(radius,color,sat,OLD,spot,spot_angle)

radius : rayon (et pas diamètre!) de la lumière : à la distance radius du centre, il

n'y a plus de lumière.
color : simplement la couleur de votre lumière. Si elle est noire, elle n'est pas

affichée.
sat : nombre de surimpression de la lumière dans le buffer. laisser ce paramètre à 0.
OLD : ancien paramètre obsolète, laisser à 0 ou false.
spot : valeur booléene : true/false : si la lumière est un spot (true) ou une lumière

classique et ronde (false)
spot_angle : à rentre de toute façon, mais si la lumière est un spot, cette valeur

définit la moitié de l'angle : c'est l'angle entre la direction du spot et un rayon extrème.

exemple d'une lumière orange classique de diamètre 100 :
("code"):
scr_oel_light_create(50,c_orange,0,0,0,0);


exemple d'un spot vert de longueur 64 et d'angle total de 25° :
("code"):
scr_oel_light_create(64,c_green,0,0,true,12.5);


Dans le begin step event, il faut mettre :
("code"):
scr_oel_light_begin_step()
Sans se poser de question :p

Autres scripts :
("code"):
scr_oel_light_refresh()
Script ULTRA IMPORTANT : C'est lui qui met la lumière à

jour, par rapport aux différentes ombres à calculer pour cette lumière. par défaut, il faut simplement le mettre

dans begin step, mais plein d'optimisations sont possibles, je le détail plus loin dans ce tutorial.

("code"):
scr_oel_light_draw_sat()

C'est ce script qui permet d'éblouir si on est en 'mode nuit' : il permet de réafficher la lumière, sans tenir compte du buffer, il s'agit d'un affichage de surface classique.



2) Création d'une polygone

Il reste un élément à voir, et pas des moindres : les polygones, c'est à dire des formes quelquonques qui bloquent la lumière.
Tout objet/instance peut posséder son lot de vertices (au moins deux), et c'est le polygone formé par les vertices qui s'occupera de bloquer la lumière. Bref, le sprite n'influe pas sur la lumière : seul le polygone (non visible) qui se trouve sur l'objet définit le passage (ou non) de la lumière.
Point important : tout objet ayant un polygone d'ombre DOIT être parenté à un objet nommé obj_wall, qui lui ne doit qu'exister, c'est tout.
Tout d'abord, il faut initialiser les poygones, dans le create de l'objet. (Regardez le script, c'est risible).
scr_oel_vertex_init();

Puis, toujours dans create, mettre tous les vertices (les sommets du polygones) , l'un après l'autre DANS L'ORDRE OÙ IL SE SUIVENT, avec la commande :
scr_oel_vertex_add(X,Y);
on se place dans le même repère que le sprite : donc un vertex un (0,0) sera sur les coordonnées de l'objet (en x,y quoi). Les coordonnées sont donc relatives à l'objet.
Point important : il faut remettre le premier point à la fin pour fermer le polygone!
Par exemple un carré donnera :

("code"):
scr_oel_vertex_add(0,0);
scr_oel_vertex_add(0,32);
scr_oel_vertex_add(32,32);
scr_oel_vertex_add(32,0);
scr_oel_vertex_add(0,0);


Il existe des scripts déjà faits pour faire des carrés et rectangles :
("code"):
scr_oel_pref_carre(size);
scr_oel_pref_rectangle(width,height);

C'est un raccourci qui peux se révéler pratique.

Les polygones, c'est bien. Mais c'est impossible de faire des polygones corrects pour un cercle. Pour cela, il faut un objet SANS POLYGONES (ou en tout cas ils ne servent à rien), qui est parenté à un obj_circle. Votre objet doit avoir un sprite, dont la largeur correspondra au diamètre du cercle.
Et voilà, vous avez une belle ombre sur un cercle, qui n'utilise qu'une paire de vertices, soit pas grand chose.

Il existe des fonctions auxilliaires sur les polygones :
("code"):
scr_oel_vertex_projection();

Je ne vous conseille pas d'y toucher, il est utilisé par les autres scripts mais ne sert strictement à rien sinon.

("code"):
scr_oel_vertex_draw(x,y,col);

Permet de dessiner le contour du polygone de l'objet en x,y avec la couleur col. Cela permet surtout de faire des tests et de débugger votre jeu, rien de plus.

("code"):
scr_oel_vertex_rotate(rotation_type,angle,x,y);

Cette fonction est un peu spéciale, et est à utiliser avec précaution.

type de rotation :
0 : le centre de rotation sera l'origine du sprite_index
1 : le centre de rotation sera le centre du sprite
2 : le centre de rotation sera (0,0)
3 : le centre de rotation sera ce que vous avez précisez en arguments x et y

Les angles DOIVENT etres positifs, ils sont en direction directe, et en degrés (0-360)
Donc pour faire -15, il faut faire +(360-15) soit +345
/! La rotation modifie DEFINITIVEMENT les vertices, ce n'est pas temporaire, il faut donc retenir précieusement où l'on en est dans la rotation si on veut revenir en place.

Soyez prudents, cette fonction est un peu buggée : le polygone se déplace doucement, car la rotation n'est pas parfaite. N'utilisez la rotation que si nécessaire.


("code"):
scr_oel_ask_inview(view);

Ce script retourne si la lumière executant le script est dans la room sélectionnée ou non. La fonction prend en compte le radius de la lumière.

("code"):
scr_oel_view_get_speed();

Suite à des problèmes de décallages, il est nécessaire de se soucier de la vitesse de la view pour afficher le buffer au bon endroit. C'est cette fonction qui s' occupe de retourner la vitesse de la view. Ce script est utilisé par le système, vous n'en avez normalement pas l'utilité.

Voilà, nous sommes arrivés au bout du tutoriel. gnii
21/11/2008 par M@d_Doc
10 Commentaires

par daminetreg @ 22/11/2008 06:10 pm
Nickel chrome, ça a l'air génial à utiliser et super easy!
Par contre je t'enjoins à mettre le moteur dans les Moteurs, et de mettre un lien sur cette page, je le fais après demain. Et rajoutes peut être une screen ou deux dans le tuto^^ happy1

par mad_doc @ 22/11/2008 09:45 pm
pour les screens, je suis entrain de voir quoi mettre.
Le moteur sera là pour la fin de la compétition. Je met déjà le tuto pour que ceux qui veulent déjà l'utiliser apprenent à s'en servir avant ^^

par Topaze22 @ 24/11/2008 07:11 pm
Bon, comme je suis le seul à l'avoir déjà intégrer et fonctionnel, je me permets d'anoncer que les lumières fixes ne pompes quasiment rien, que les lumières mobillent bouffent, mais que globalement, on s'en sort très très bien. Le moteur parfait. Juste parfait. Ca ne pourrait pas être mieux (sauf il y avait une accélération matérielle, mais bon, vous savez que sur GM, DirectX...)

par nicoulas @ 25/11/2008 03:45 pm
J'ai hâte de pouvoir tester toutes ces fonctions ange
Ça a vraiment l'air d'être un moteur super puissant :)

par bibi675 @ 25/11/2008 04:35 pm
Ça à l'air d'être bien fun tout ça mais c'est pas sympa de nous narguer en nos donnant les noms des supers fonctions alors qu'on ne peux pas tester le moteur ! rire2

par mad_doc @ 04/12/2008 01:03 pm
le moteur sera disponnible le jour de la fin de la compétition.
Et l'accelleration matérielle....
J'y réfléchit pour une version future, direct en asm.

par Max @ 11/12/2008 05:17 pm
Cool, je vais pouvoir intégrer le moteur à mon rts... j'imagine bien pour les phares des tanks, par exemple fier

par Magi @ 26/04/2009 02:24 pm
C'est quand que tu mets des images ?

par pecno @ 03/03/2011 05:55 pm
rien super

par pecno @ 03/03/2011 05:55 pm
toujours rien rire

Nom:
Mail: (optionel)
Êtes vous Humain? (Entrez oui si c'est le cas)

smile:

fleche_dfleche_gbehgniihappy1questionrirerire2rougesupertristeangeclincoeurcoleredodofierghagniahhaphehehhontenonnon3ouhouisnif

| M'oublier
       Expérimenté

Tutoriel:Rendre son jeu compatible avec l'explorateur de jeux de Vista
Modifier la base de registre avec Game Maker

Tutoriaux Graphismes

       Paint

Le graphisme facile n°2
Le graphisme facile n°1
Tutoriel Paint: Le desert pour les nuls
Tutoriel Paint: Comment faire un ciel étoilé
Tutorial Paint: Tutorial d’utilisation avancée de paint
Tutoriel Paint: Comment faire un décor de vaisseau spacial
Tutorial Paint: Dessin d'un Paysage
       Paint shop pro 7

Tutoriel: Effets spéciaux à la Star Wars !
       The Gimp

Tutoriel - The Gimp - Texte métallique
Tutoriel - The Gimp : Effet de Reflet Realiste
       PhotoShop

Tutoriel - PhotoShop : Soleil

Tutoriaux Mods de Jeux Vidéos

       UnrealEd 3

Tutoriaux Unreal Ed 3 - Débuter