Prise en main

Commençons par le début

Avant de pouvoir commencer à utiliser Ultimate 3D, vous avez besoin des fichiers Game Maker sur lesquels travailler. Il est évident que vous ne pourrez pas le faire avec un projet vide. Vous avez besoin des scripts et des objets de base d'Ultimate 3D. Si vous avez vu la démo qui accompagne Ultimate 3D, vous pouvez l'utiliser comme une base pour vos jeux. Mais je ne le recommande pas. Si vous voulez vraiment faire votre propre jeu, vous devrez commencer à partir de zéro, dans ce cas les éléments de la démo ne seront pas d'une grande utilité pour vous. Si vous voulez juste modifier la démo d'une certaine manière, vous pouvez l'utiliser. Mais les gens le remarqueront et cela risque d'être mal perçu lorsque vous publierez votre jeu.

Vous devriez commencer à faire vos premiers projets Ultimate 3D en créant un nouveau dossier et en copiant le fichier BasicGM5.gmd (cf. BasicGM6.gm6 ou BasicGM7.gmk). Ce fichier est présent dans le Ultimate 3D Software Development Kit (U3D SDK) qui peut être téléchargé sur Ultimate3D.org, sur FKTECH ou sur Le CBNA. Ce fichier Game Maker contient tout ce dont vous avez besoin pour démarrer avec Ultimate 3D (à l'exception des connaissances de base qui se trouve dans la documentation que vous lisez actuellement). Il y a par exemple, un exemple de chaque type d'objet 3D Ultimate, ainsi que l'objet control qui est nécessaire pour utiliser Ultimate 3D. Une seule room contient une combinaison indéfinie de ces objets. Lorsque vous commencez à faire un jeu, vous devez supprimer tous les objets, sauf l'objet de contrôle et l'objet caméra.

Il y a un certain nombre de choses que vous allez remarquer au sujet de cette room. Si vous créez une nouvelle room qui est destinée à être utilisé avec Ultimate 3D, elle doit satisfaire à ces exigences:
-  La room utilise les vues (views) et la première vue (view) doit être activée.
-  La couleur de fond (background) est désactivée. Ce n'est pas nécessaire mais c'est une perte de temps de calcul, si vous laissez Game Maker afficher la couleur du background.
-  La room ne doit pas contenir plus d'un objet de contrôle et plus d'un objet de caméra.

Je vous recommande de créer deux sous-dossiers dans le dossier de votre projet. Appelez le premier "gfx" et utilisez le pour stocker les textures de votre jeu. Appelez le second "models", j'imagine que ce qu'il est censé contenir vous paraît évident. Mais c'est à vous de décider.

Le système de view

Il y a une chose au sujet de l'utilisation d'une extension 3D pour Game Maker que vous n'apprécierez pas. Lorsque vous utilisez Ultimate 3D, le résultat des traitements, s'affichera dans la première view de Game Maker. Tant qu'Ultimate 3D utilise la view, vous ne pourrez plus utiliser Game Maker pour dessiner sur cette même view. En effet, il n'est tout simplement pas possible pour deux programmes totalement différents, d'afficher leur rendu sur la même partie de l'écran simultanément. C'est pour cette raison qu'Ultimate 3D ne possède pas que des fonctions pour dessiner des scènes 3D, il y a aussi des fonctions de dessin 2D et de texte. Toutefois, la première view ne doit pas couvrir l'ensemble de la fenêtre de jeu. Vous pouvez utiliser plusieurs views, et aussi longtemps qu'elles ne couvriront pas la view d'Ultimate 3D, il n'y aura aucun problème pour les utiliser avec les fonctions de Game Maker. Une autre chose à savoir est que vous ne pourrez pas passer en mode plein écran en utilisant Ultimate 3D. Si vous désirez passer en mode plein écran, il vous faudra l'activer dans les options de GameMaker, ou dans le script Ultimate3DOptions ().

L'object Caméra

Bon, passons au premier élément du côté pratique : l'objet caméra. Par défaut, l'objet caméra possède un morceau de code pour le contrôle de la vue par la souris et fait plusieurs appels à la fonction move d'Ultimate 3D dans les évènements du clavier (keyboard events). Si vous ne les aimez pas, vous êtes libres de les enlever. Mais comme un impoli je ne vous ai pas présenté la fonction move. Jetez-y un coup d'oeil:

Cette fonction déplace dans un environnement en 3d l'objet qui l'appelle.

Move(
Longitude,
Latitude,
Speed
)

Longitude, Latitude

Ces deux paramètres décrivent la direction que l'objet doit emprunter. Cela fonctionne de la même façon que sur un globe. Longitude décrit de quelle façon l'objet se déplace vers le haut ou vers le bas. 0 signifie que cela ne change pas sa hauteur, 90 signifie qu'il se déplace en ligne droite vers le bas et -90 signifie qu'il se déplace en ligne droite vers le haut. Latitude donne la direction horizontale à l'objet de la même façon. Notez que celle-ci diffère de la variable direction de Game Maker. Pour convertir une valeur de direction Game Maker en une valeur de latitude Ultimate 3D, sans en changer le sens, il vous suffit d'utiliser cette petite formule: Latitude=direction+90.

Vitesse
Ce paramètre définit la vitesse de l'objet que vous souhaitez déplacer. Notez que vous devez appeler la fonction à chaque step afin que l'objet se déplace à cette vitesse.

A partir de maintenant, toutes les fonctions avec des paramètres seront décrites comme ceci. Si vous voulez seulement une information rapide tout en programmant, vous pouvez également ouvrir le script du même nom. Chaque script contient une brève description de la fonction et de ses paramètres.

Cette fonction déplace un objet appellé dans un espace 3D.

Move(
Longitude,
Latitude,
Speed
)

Longitude, Latitude

Ces deux paramètres décrivent la direction de l'objet devrait emprunter. Il fonctionne de la même façon que sur un globe. Longitude décrit comment l'objet se déplace vers le haut ou vers le bas. 0 signifie que cela ne change pas sa hauteur, 90 signifie qu'il se déplace en ligne droite vers le bas et -90 signifie qu'il se déplace en ligne droite vers le haut. Latitude donne la direction hrizontale à l'objet de la même façon. Notez que celle-ci diffère de la variable direction de Game Maker. Pour convertir une valeur de direction Game Maker en une valeur de latitude Ultimate 3D sans en changer le sens, vous avez juste à utiliser cette petite formule:Latitude=direction+90.

Vitesse

Ce paramètre donne la vitesse de l'objet que vous souhaitez déplacer. Notez que vous devez appeler cette fonction à chaque étape (step) pour faire se déplacer l'objet à cette vitesse.

A partir de maintenant, toutes les fonctions avec ces paramètres seront décrites comme ceci. Si vous voulez juste une information rapide tout en programmant, vous pouvez également ouvrir un script. Chaque script contient une brève description de la fonction et ses paramètres.

En passant, vous avez peut-être remarqué que Move(...) est écrit avec une majuscule toutes les autres fonctions d'Ultimate 3D. Cela a deux raisons. La première, je suis habitué à appeler mes fonctions comme ça en C++. La seconde, cela vous aide à voir si une fonction appartient à Game Maker ou à Ultimate 3D; c'est plus facile de cette façon. S'il n'y avait pas cette différence là, il y aurait eu un préfixe. Donc Move ne serait pas appelé Move mais u3d_move. À mon avis, il est beaucoup plus facile d'appuyer sur la touche Shift parfois que d'écrire u3d_blablabla... tout le temps. En plus, c'est mieux visuellement.

Mais revenons-en à notre sujet... l'objet caméra. Dans Ultimate 3D, tout objet 3D dans une scène doit être représenté par une instance d'objet de Game Maker. Vous pouvez alors modifier les propriétés des objets de la scène en changeant simplement les variables de leurs objets Game Maker. Une fonction Ultimate 3D telle que MoveCamera() les transmettra à Ultimate 3D automatiquement. Les objets caméras possèdent les variables suivantes:

x, y, z
Ces variables donnent la position de la caméra. Puisque nous sommes dans un espace 3D désormais, il n'y a plus que x et y seulement. Ils ont maintenant un nouvel ami qui s'appelle z. Il définit la hauteur de l'objet. Donc, si vous augmentez z, l'objet se déplacera vers le haut, si vous diminuez z, l'objet se déplacera vers le bas. On appelle coordonnée la combinaison de x, y et z. Vous devez retenir cette expression. Elle apparaîtra à nouveau.

height
Dans un jeu à la première personne, la caméra a habituellement une hauteur particulière au-dessus du sol. Cette hauteur peut être implémentée en utilisant cette variable. La coordonnée z de la caméra (celle avec laquelle travaille Ultimate 3D) n'est pas z, mais z+height.

rotx, roty, rotz
Ces variables définissent l'angle de rotation de la caméra. En bref, rotx décrit le "pitch" de l'objet, roty décrit le "yaw" et rotz décrit le "roll". Une description plus détaillée de ce que signifient ces variables est donnée dans la seconde partie du tutoriel "Utilisation des objets primitifs».

view
Cette variable définit le double angle de vue vertical de la caméra. Comme avec n'importe quel angle dans Ultimate 3D, il doit être en degré.

min_range, max_range
La caméra affichera uniquement les objets qui sont plus loin que min_range et plus proche que max_range. Tous les autres objets seront invisibles. Vous devrez utiliser des valeurs raisonnables pour ces variables. Si min_range est trop petit ou max_range trop grand, vous obtiendrez d'étranges erreurs d'affichage, telles que des objets se mettant à couvrir d'autres objets qui sont normalement devant eux.

falling, falling_speed (optionnel)
Si falling est égale à true, la coordonnée z de la caméra, sera augmentée par falling_speed à chaque step et falling_speed sera diminué par global.gravitation (en diminuant, je veux dire qu'à chaque step falling_speed deviendra plus petit. Les nombres négatifs baissent la vitesse et ceux positifs augmente la vitesse). Ces variables sont destinées à être utilisées en combinaison avec les fonctions de collisions prédéfinies: CollisionH(), CollisionV(), CollisionZ() et CollisionTerrainModel().

follow, perspective, rotatex, rotatey, distance (optionnel)
follow peut prendre l'ID d'une instance d'un objet GameMaker, afin que la caméra suive cet objet. L'objet suivi peut avoir une variable height, dans l'idée que la caméra suive un point au dessus ou en dessous de la position réelle de l'objet. perspective définit la façon dont la caméra suit l'objet. Cela peut être 0 pour une caméra à la première personne, 1 pour une caméra fixe à la troisième personne, 2 pour une caméra flexible à la troisième personne. Si perspective est égale à 1 ou 2, vous pouvez changer rotatex et rotatey pour compenser le centre de rotation. distance définit à quelle distance de l'objet doit se trouver la caméra pour le suivre.

Pour le moment, c'est tout ce que vous avez besoin de savoir sur l'objet caméra. En fait, il y a un peu plus de variables et de fonctions pour les caméras, mais ces dernières sont décrites dans les chapitres pour les utilisateurs avancés.

Maintenant vous savez comment créer un objet caméra. Malheureusement, il n'y a rien qui s'affichera pour le moment (du moins si vous avez nettoyé la room). Mais ne vous inquiétez pas, cela va changer très bientôt.

Charger des textures

Avant de créer les premiers objets visibles, il y a une chose que vous devez savoir à propos du chargement des textures. Pour ceux qui ne connaissent pas, voici une courte explication de ce qu'est une texture: Une texture est (généralement) une image en deux dimensions qui est créé par une application utilisant des graphismes 3d. Ensuite, cette image peut être appliquée à un objet. Sans textures, tous les objets graphiques 3D seraient constitués d'une seule couleur, ce serait vraiment ennuyeux. Pour cette raison, il est très important d'avoir de bonnes et de belles textures. Cela rend vos jeux beaucoup plus réalistes.

Pour charger une texture en mémoire vous avez seulement besoin d'une fonction très simple:

LoadTexture(
TextureFile,
TextureIndex,
Width, Height
)

TextureFile
Etant donné que depuis Ultimate 3D on ne peut pas accéder aux ressources de Game Maker, la texture doit être sauvegardé dans un fichier externe. Ce fichier peut être un bmp, jpg, tga, png, dds, ppm ou fichier dib (PAS .gif). Je vous recommande d'enregistrer les textures dans un sous dossier appelé "gfx". Mais si vous voulez cacher vos textures aux gens qui jouent à votre jeu, vous pouvez aussi les joindre à votre exécutable en utilisant les data file de Game Maker, et les charger à partir de son répertoire temporaire (Variable GameMaker: temp_directory).

TextureIndex

L'indice de la texture, que vous souhaitez associer à cette dernière. Cela peut être un nombre arbitraire dans la fourchette de 0 à 998. Un indice est semblable à un id. Si vous voulez utiliser la texture plus tard, vous devez connaître l'indice associé avec celle-ci.

Width, Height
D'usage, vous pourrez tout simplement ignorer ces deux paramètres. Si vous entrez 0 ou rien pour chacun d'eux, Ultimate 3D obtiendra la hauteur et la largeur des dimensions de la texture. Mais si vous entrez des valeurs qui diffèrent de la taille réelle de la texture, elle sera réduite à cette taille. Notez que seules les puissances de deux ou zéro peuvent être passées pour ces paramètres. Pour plus d'informations, lisez ce qui suit.

Il y a encore une chose importante que vous devez savoir à propos des textures. La plupart des périphériques graphiques fonctionnent uniquement avec des textures qui ont des dimensions composées de puissances de deux. En outre, certains périphériques graphiques ne peuvent fonctionner qu'avec des textures du second degré, mais c'est un cas rare. Quoi qu'il en soit, vos textures seront étendues si elles n'ont pas les dimensions composées de puissances de deux, afin de leur donner des dimensions valides. Pour éviter cette perte inutile de qualité, vous devez utiliser ces dimensions pour toutes vos textures. Quelques exemples valables pour les dimensions sont 256*256, 128*512 et 1024*64. Une texture d'une taille de 257*257 qui serait étendue jusqu'à 512*512 serait un véritable gaspillage de mémoire.

Une autre chose que vous avez besoin de savoir c'est comment faire des textures transparentes. Il y a deux façons de le faire. Le mieux est d'utiliser un format de fichier qui est favorable à la transparence, tels que le tga ou png. The Gimp (GNU Image Manipulation Program) accepte ces formats de fichier. C'est un superbe programme d'édition d'image Open Source. Si vous préférez utiliser d'autres formats de fichiers, vous pouvez obtenir la transparence de toutes façon. Il suffit d'utiliser la couleur de transparence qui est (r = 0, g = 128, b = 64). Tous les pixels qui auront exactement cette couleur seront définis comme transparents par Ultimate 3D.

Je vous conseille de charger toutes les textures dans l'évènement "create" de l'objet control. De cette façon, vous pouvez obtenir une liste de toutes les textures chargées et de leurs indices. Mais ça, c'est encore à vous de décider.

Voici un tout petit exemple de code qui montre comment utiliser cette fonction correctement :

LoadTexture("gfx/WallTexture.png",1);



© Christoph Peters. Certains droits réservés. (Traduction FR 04/2008, Franck Vernel / Damien Buhl).

Creative Commons License XHTML 1.0 Transitional