Differences

This shows you the differences between the selected revision and the current
version of the page.


fr:wmebook:ch3 2011/10/18 16:37 fr:wmebook:ch3 2011/10/25 13:49 current
Line 1: Line 1:
-====== 3. Premier tour dans les entrailles de WME ======+====== 3. Premier pas dans les entrailles de WME ======
Nous avons découvert les outils et nous avons appris les bases du script, il maintenant temps de voir comment ces connaissances s'applique à la conception d'un jeu. Avant de commencer ce tour nous allons d'abord faire un bref survol des types de fichiers que vous allez utiliser dans WME (et je recommande fortement d'utiliser cette convention de nomination): Nous avons découvert les outils et nous avons appris les bases du script, il maintenant temps de voir comment ces connaissances s'applique à la conception d'un jeu. Avant de commencer ce tour nous allons d'abord faire un bref survol des types de fichiers que vous allez utiliser dans WME (et je recommande fortement d'utiliser cette convention de nomination):
Line 165: Line 165:
</code> </code>
 +Nous avons égratigné en surface deux objets jusqu'ici. L'objet acteur et l'objet élément Région, que nous avons référencé par mot-clé **this** et caché en réglant son attribut **Active** sur false.
-We’ve scratched surface of two objects so far. Actor object and Region Entity object, which we referenced by keyword **this** and hid it through setting its attribute **Active** to false. +Laissez-moi revenir sur l'image que nous avons vu au début et regarder cette même image d'un point de vue des développeurs.
- +
-Let me return back to the image we’ve seen at the beginning and look at this very image from a developers point of view.+
{{wmebook:ch1diag.jpg|}} {{wmebook:ch1diag.jpg|}}
-Now it won’t probably surprise you that the main game object is called **Game**. You can also see that everything in this diagram is derived from the Game object. If we look at our door entity from this point of view to see where it’s hidden, we’d go this way:+Maintenant, ça ne vous surprendra probablement pas que l'objet principal du jeu soit appelé **Game**(jeu). Vous pouvez aussi voir que tout dans ce schéma est dérivé de l'objet du jeu. Si nous regardons notre entité door (porte) de ce point de vue pour voir où elle est cachée, nous devrions aller par ce chemin:
Game -> Scene -> Door. Game -> Scene -> Door.
-We know, that we can reference Scene as Scene, but don’t let this fool you.((Remember that nested notation problem?)) The scene is in demo actually defined in the **game.script** which is the master brain of the game as follows:+Nous savons que nous pouvons référencer un Scène comme Scène, mais ne vous laissez pas tromper.((Rappelez-vous ce problème de notation imbriqué?))La scène est, dans la démo, en réalité définie dans le **game.script** qui est le cerveau maitre du jeu comme cela:
<code script>Scene = Game.Scene;</code> <code script>Scene = Game.Scene;</code>
-In the base.inc our Scene is defined as **global Scene;** and because we include **base.inc** into all our files, we can readily reference Scene object from everywhere. +Dans base.inc notre scène est définie comme la **global Scene;** et parce que nous incluons **base.inc** dans tous nos fichiers, nous pouvons facilement faire référence un objet Scène de partout.
-As we can guess, Game object would serve for the global purposes of the game while Scene object would be useful for per Scene operations. Let me introduce you to the most used functions which represent very well each object.+Comme on peut le deviner, l'objet jeu servirait pour des besoins globale du jeu tandis que l'objet Scene serait utile pour les opérations par scène. Laissez-moi vous présenter les fonctions les plus utilisées qui représentent très bien chaque objet.
-**Game.ChangeScene(filename);** is a function which changes the scene. It takes as an argument path to the .scene file  +**Game.ChangeScene(filename);** est une fonction qui change la scène. Il prend comme arguments un chemin vers le fichier. Scène 
-**Scene.GetNode(NodeName);** is a function which returns the object named NodeName from the scene. +**Scene.GetNode(NodeName);** est une fonction qui retourne l'objet nommé NodeName de la scène.
-We’ll do something, which would demonstrate the power of WME now. Return to your warehouse scene in scene edit and let’s tweak it a bit. First we should create a new region and call it Exit. Position it to the left bottom corner as on the following image (you should immediately discover by now that it’s the red shape). Also note the position in the scene tree. If you put it above the floor, the mechanism presented wouldn’t work because the floor region would cover the Exit region and this way the Exit region would never get his voice. Last thing which remains to do is to attach a script to this region. Use an empty template and save the scene. +Nous allons voir maintenant, quelque-chose qui va démontrer la puissance de WME. Retournez à votre scène de l’entrepôt (warehouse) dans l’éditeur de scène et apportons-y quelques modifications. Premièrement nous devrions créer une nouvelle région et l’appeler Exit. La positionner dans le coin inférieur gauche comme sur l'image suivante (vous devriez immédiatement découvrir à présent que c'est la forme rouge). Notez aussi la position dans l'arborescence de la scène. Si vous la placé au dessus le sol (floor), le mécanisme présenté ne fonctionnera pas parce que la région floor recouvrirai la région Exit et de cette façon la région Exit ne serais jamais vue. La dernière chose qui reste à faire est d'attacher un script à cette région. Utilisez un modèle vierge et enregistrer la scène.
{{wmebook:c5_3.jpg|}} {{wmebook:c5_3.jpg|}}
-Before we go on, let’s discuss two more events (we already know Mouse related events).  +Avant de poursuivre, nous allons discuter de deux autres événements(Nous connaissons déjà les événements en lien avec la souris). 
-**on "ActorEntry"** occurs when actor enters the current region. This is the basic logic behind so called trap regions. Trap regions mean that actor triggers an event upon entering certain portion of the screen.+**on "ActorEntry"** survient lorsque l'acteur entre dans la région courante. Ceci est la logique de base derrière ce qu'on appelle les régions pièges. Région piège signifie que l'acteur déclenche un événement en entrant dans certaine zone de l'écran. 
 +**on "ActorLeave"** survient lorsque l'acteur quitte la région courante.
-**on "ActorLeave"** occurs when actor leaves the current region.+La dernière chose qui nous aurions besoin pour cet exemple est de prendre au joueur le contrôle du jeu.Ceci est la partie vitale d'une conception de jeu réussie. Nous voulons déclencher une scène et en plein milieu le joueur clique ailleurs, le personnage n'a pas fini toute la séquence et vous êtes coincé dans une boucle interminable.C'est le genre de cauchemar qu'ont rencontrés de nombreux créateurs nous allons donc l'éviter tant que c'est encore possible.
-Last thing we’d need for this example is taking the game out of player’s control. This is the vital part of successful game design. We want to trigger a scene and in the middle player clicks somewhere else, character didn’t finish the whole sequence and you’re stuck in an unsolvable loop. This kind of nightmare met many designers so let’s avoid it while we still can.+**Game.Interactive = true / false;** Prend le contrôle du jeu au joueur ou lui rend. Toujours se rappeler de remettre le jeu en mode interactif ou votre jeu va bloquer et les joueurs vont se fâcher. Il faut donc toujours penser au mode non-interactif comme un bloc.(avec un début et une fin)
-**Game.Interactive = true / false;** Takes the game out of players control or returns it back. Always remember to return the game back to Interactive mode or your game will be stuck and players will get angry. So always think of the noninteractive mode as of a block.+Nous allons essayer de combiner ces idées dans notre premier jeu à logique complexe.
-We’ll try to combine those ideas into our first more complex game logic. +D'abord nous allons modifier le **door.script** pour qu'il ressemble à ça:
- +
-First we’ll adapt the **door.script** to look like this:+
<code script> <code script>
on "LeftClick"  on "LeftClick" 
{ {
- Game.Interactive = false;    // We want our player to make more things at once and we don't want to be interrupted.+ Game.Interactive = false;    // Nous voulons que notre joueur fasse plusieurs choses à la fois et nous ne voulons pas être interrompu.
actor.GoToObject(this); actor.GoToObject(this);
- this.Active = false;  // We disable the door so the hotspot is not visible or active anymore+ this.Active = false;  // Nous désactivons la porte afin que le hot-spot ne soit plus visible ou active du tout
- actor.Talk("Oh no. The door is welded shut.");  + actor.Talk("Oh non. La porte est soudé.");  
- Game.Interactive = true; // Allow player to play some more.+ Game.Interactive = true; // Permet au joueur de jouer de nouveau.
} }
</code> </code>
-Then we open the **exit.script** and add a new event there. The file should look like this:+Ensuite nous ouvrons le  **exit.script** et ajoutons un nouvel événement dedans. Le fichier devrait ressembler à ça:
<code script> <code script>
#include "scripts\base.inc" #include "scripts\base.inc"
-on "ActorEntry"  //Actor entered the Exit region+on "ActorEntry"  //L'acteur entre dans la région Exit
{ {
Game.Interactive  = false; Game.Interactive  = false;
- var door = Scene.GetNode("Door"); //We get the object corresponding to the scene name door into a variable named door+ var door = Scene.GetNode("Door"); // Nous mettons dans la variable nommé door un objet correspondant au nom de porte de la scène
- if (door.Active) // If door was not clicked, it was not disabled, so this path will be used+ if (door.Active) // Si la porte n'a pas été cliqué, elle n'a pas été désactivé, ce voie sera utilisé
{ {
- actor.Talk("I don't want to return to my flat before I am sure I can't enter the warehouse!");+ actor.Talk("Je ne veux pas retourner à mon appart avant d’être sûr que je ne peux pas entrer dans l'entrepôt!");
} }
- else //we know that the door is welded shut so we can leave the scene+ else //nous savons que la porte est soudée donc nous pouvons quitter la scène
{ {
- actor.Talk("Oh well, there really is no way how could I enter that damn warehouse");+ actor.Talk("Eh bien, il n'y a vraiment aucun moyen d'entrer dans ce foutu entrepôt");
Game.ChangeScene("scenes\room\room.scene"); Game.ChangeScene("scenes\room\room.scene");
} }
Line 238: Line 236:
</code> </code>
-Okay. Time to explain what’s going on in here. Our thought process as a game designer was that player needs to enter the warehouse but the warehouse is welded shut. We for some reason need our player to discover the fact that the door is welded shut so the game could proceed. So we decided to allow him to change the scene only after he discovered that the warehouse was welded shut. +Okay. Il est temps de vous expliquer ce qui se passe là. Notre processus de réflexion comme un concepteur de jeu que le joueur est besoin d'entrer dans l’entrepôt mais la porte est soudée. Pour une raison quelconque, nous avons besoin que notre joueur découvre le fait que la porte est soudée de sorte que le jeu puisse continuer. Nous décidons donc de l'autoriser à changer de scène seulement après qu'il n'ai découvert que la porte de l’entrepôt est soudée.
-Code-wise we have the region which would be normally used as an exit region, but we’ve added the condition that until the door region was active (which means that player didn’t click on it because if he did, the door region turns inactive), player can’t leave the screen.+Explication du code, nous avons la région qui devrait normalement être utilisé comme une région de sortie, mais nous avons ajouté la condition que tant que la région de la porte (door) était active (Ce qui veut dire que le joueur n'as pas cliqué dessus, parce que s'il l'avait fait la région de la porte serais passée inactive), le joueur ne peut pas quitter l'écran.
-Save all scripts and run the game. Test the game thoroughly so you’re sure that you really understand the coding behind this logic. It’s one of the critical aspects of adventure game designing and if you get this right, you’ll be in no time creating your own adventures.+Sauvegarder tous les scripts et lancer le jeu. Testez le jeu à fond de sorte que vous soyez sûr que vous comprenez vraiment le codage derrière cette logique. C'est l'un des aspects essentiels de la conception de jeu d'aventure et si vous y arrivé bien, vous saurez en un rien de temps créer vos propres aventures.
**Important:** **Important:**
-Critical thing to know is how path in wme works in general. We’ve seen in **Game.ChangeScene("scenes\room\room.scene");** that we didn’t start with the data path. That’s totally correct! Write it thousand times I’ll never include the root package name in the referenced path. Why? Because this would work only in debug mode, and when you compile your game in the packages and send it around, it won’t work. The same applies to all files (images, sounds etc.). Never reference files outside of packages. They’ll work in debug mode, but they won’t get compiled and you’ll be in it for the worst nightmares. Think of package as of a virtual root directory and all references should be starting from that point. More about that in the chapter about packages.+Chose essentielle à savoir c'est comment fonctionne les chemins dans WME en général. Nous avons vu dans **Game.ChangeScene("scenes\room\room.scene");** que nous n'avons pas commencé par le chemin des données. C'est tout à fait correcte! Écrivez-ça mille fois Je n'inclurais jamais le nom du Package racine dans le chemin référencé. Pourquoi? Parce que cela fonctionnerait uniquement en mode debug, et lorsque vous compilez votre jeu dans les packages et le distribuez, ça ne marchera pas. La même chose s'applique à tous les fichiers (images, sons, etc.) Jamais référencer les fichiers en dehors des packages. Ils fonctionnerons en mode débogage, mais ne serons pas compilé et vous serez dans le pire des cauchemars. Pensez au Packages comme des répertoires racines virtuels et que tout référencement devrait partir de ce point. On en saura plus à ce sujet dans le chapitre sur les Packages.
-Let’s move on to the last part of this chapter, which will cover the daemon issue. We’ll start right off with our first daemon. Before we explain how it works, we’ll have to take a look at a few new methods:+Passons à la dernière partie de ce chapitre, qui couvrira les problèmes de Daemon (programme fonctionnant en tache de fond). Nous allons commencer tout de suite avec notre premier démon(Daemon). Avant d'expliquer comment ca marche, nous allons jeter un œil sur quelques nouvelles méthodes:
-**Game.AttachScript(filename);** - Attaches a new script file to the Game object, making it global for the whole game. This script is attached until it’s detached or ends+**Game.AttachScript(filename);** - Attache un nouveau fichier de script à l'objet jeu (Game), ce qui le rend global pour le jeu entier. Ce script est attaché jusqu'à ce qu'il soit détaché ou se termine
-**Game.DetachScript(filename);** - Detaches script from the Game object.+**Game.DetachScript(filename);** - Détache un script de l'objet jeu (Game).
-**Scene.AttachScript(filename);** - Attaches a new script file to the current scene, making it active until player doesn’t change the current scene, or script is detached or ends+**Scene.AttachScript(filename);** - Attache un nouveau fichier de script à la scène courante, le rendant actif tant que le joueur ne change pas de scène courante, ou qu'il soit détaché ou se termine
-**Scene.DetachScript(filename);** - Detaches script from the Scene object.+**Scene.DetachScript(filename);** - Détache un script de l'objet Scène.
-We can of course attach script to the scene object in the Scene Editor or script to Game object in the Project Manager, but we want our script to be attached in the middle of the gameplay. +Nous pouvons évidemment attacher un script à l'objet Scène dans l'éditeur de scènes ou un script à l'objet Jeu (Game) dans le gestionnaire de projets, mais nous voulons que notre script soit attaché au milieu du jeu.
-Next command we’d learn is totally necessary for the daemon writing. It’s command Sleep+La commande suivante que nous allons apprendre est absolument nécessaire pour écrire les Daemons. C'est la commande Sleep.
-**Sleep(time);** - Pauses the script for certain amount of milliseconds. +
-Sleep serves two purposes. First - it lets the script wait for certain amount of time and second - it hands the program flow to other threads. Here’s the typical daemon pitfall:+**Sleep(time);** - Met en pause le script pendant un certain nombre de millisecondes.  
 + 
 +Sleep a deux fonctions. Première - il permet au script d'attendre certaine quantité de temps, et la deuxième - elle donne la main au flux du programme pour d'autre tâches. Là c'est le piège typique des Daemon:
<code script> <code script>
var a = 0; var a = 0;
-while (1) // infinite loop, the same as while(true)+while (1) // Boucle sans fin, c'est pareil que while(true)
{ {
  a = a + 1;   a = a + 1;
Line 271: Line 270:
</code> </code>
-**Never do this. It’ll halt your computer. Script takes over the whole processing power and the rest of the game never get control back. This way also Windows never gets control back which results in hung up computer.** So how to fix this?+**Ne jamais faire cela. Ça va stopper votre ordinateur.Le Script prend toute la puissance de traitement et le reste du jeu ne peu plus reprendre le contrôle. En faisant cela, Windows non plus ne pourra recuperer la main ce qui entraine une extinction de l'ordinateur.** Alors comment résoudre ce problème?
<code script> <code script>
Line 283: Line 282:
</code> </code>
-This daemon is correct (remember our previous chapter), because it hands over the control from the script. One millisecond is here only formally. The important fact is that you DO hand over the control.+Ce Daemon est correcte (Souvenez vous du chapitre précédent), parce que ca peut reprend la main sur le script. Une milliseconde c'est ici symbolique. Le fait important est que vous donner la main.
-So enough theory and let’s make some daemon fun with the commands, we’ve just learned. Oh wait. We’d need one more command:+Bon assez de théorie et façon quelques Daemon marrants avec les commandes que nous venons juste de voir. Oh attendez. Nous aurions besoin d'une commande supplémentaire:
-**Game.Msg(text);** - although we’ve seen it before let’s recap that it displays an onscreen debug message. Very useful command.+**Game.Msg(text);** - Bien que nous l'ayons vu auparavant rappelons qu'elle affiche un message de débogage à l'écran.
-What we’re going to do is a funny little timed sequence, which occurs in our warehouse scene. The scenario is as follows. Player examines the door to discover that there’s a time bomb attached to it. If he can’t exit quickly enough, the Scene is reloaded (it’s the hardcore-adventure-fan-way how to tell the player, that he has died).+Ce que nous allons faire est un drôle de petite séquence chronométrée, qui va se passer dans notre scène de l'entrepôt. Le scenario est le suivant. Le joueur examine la porte et découvre qu'il y a une bombe attachée dessus. S'il ne sort pas assez rapidement, la scène est rechargée (c'est la façon "fan d'aventures hardcore" de dire au joueur, qu'il est mort).
-First we’ll create the new script in the scr folder (from the empty template) and name it **bomb.script**.+Premièrement nous allons créer le nouveau script dans le répertoire scr (à partir d'un modèle vierge (Empty template) ) et le nommer **bomb.script**.
-Tip: if you get more skilled, you can add the new files manually by creating a text file with a script extension created in the corresponding folder+Astuce : si vous êtes plus expérimenté, vous pouvez ajouter les nouveaux fichiers manuellement en créant un fichier texte avec une extension script créé dans le dossier correspondant
-Then we modify the **door.script** so it’ll read the following:+ 
 +Ensuite modifiez **door.script** pour avoir cela:
<code script> <code script>
Line 301: Line 301:
on "LeftClick"  on "LeftClick" 
{ {
- Game.Interactive = false;    // We want our player to make more things at once and we don't want to be interrupted.+ Game.Interactive = false;    // Nous voulons que notre joueur fasse plusieurs choses à la fois et nous ne voulons pas être interrompu.
actor.GoToObject(this); actor.GoToObject(this);
- this.Active = false;  // We disable the door so the hotspot is not visible or active anymore+ this.Active = false;  // Nous désactivons la porte afin que le hot-spot ne soit plus visible ou active du tout
- actor.Talk("Oh no. There's a timed bomb attached to the door! I have to find an exit before it explodes."); + actor.Talk("Oh non. Il y a une bombe à retardement attachée à la porte! Je doit m’échapper avant qu'elle n'explose.");
Scene.AttachScript("scenes\warehouse\scr\bomb.script"); Scene.AttachScript("scenes\warehouse\scr\bomb.script");
- Game.Interactive = true; // Allow player to play some more.+ Game.Interactive = true; // Permet au joueur de jouer de nouveau.
} }
</code> </code>
-I’ve hilighted the line which attaches our new script and thus starting the countdown+J'ai ajouté la ligne qui attache notre nouveau script et donc démarre le compte à rebours
-Now let’s look at the **bomb.script** contents.+Maintenant regardons le contenu de **bomb.script**.
<code script> <code script>
#include "scripts\base.inc" #include "scripts\base.inc"
-for (var timer=6;timer>-1;timer = timer -1)  // let's set up a loop which would go down from 6 to 0.+for (var timer=6;timer>-1;timer = timer -1)  // Mettons en place une boucle qui passerait de 6 à 0.
{ {
- Game.Msg("Countdown: " + timer); //Let's display how much time do we have left. + Game.Msg("compte à rebours: " + timer); //Affichons combien de temps il nous reste 
- Sleep(1000); // Sleep one second (and also hand the game over to other threads)+ Sleep(1000); // Pause une seconde (et laisse aussi la main au jeu pour d'autres tâches)
} }
-Game.Interactive = false; //Death cutsene +Game.Interactive = false; //Scène de la mort 
-actor.Talk("I've just died. Let's try again");+actor.Talk("J'suis mort. Essayez encore.");
Game.ChangeScene("scenes\warehouse\warehouse.scene"); Game.ChangeScene("scenes\warehouse\warehouse.scene");
var door = Scene.GetNode("Door"); var door = Scene.GetNode("Door");
-door.Active = true; // If we die, we need to return the door to its active state or we'll never discover the bomb again.+door.Active = true; // Si nous mourons, nous avons besoin de remettre la porte à son état actif ou nous ne pourrons pas découvrir la bombe de nouveau.
Game.Interactive = true; Game.Interactive = true;
</code> </code>
-And the last change we’ll make is to the **exit.script**. If we found an exit in time, actor will be able to escape, but what if he arrives there in the nick of time and while talking his line, the time runs away and he dies? So let’s prevent this from happening by detaching the bomb script and letting him say something more reasonable.+Et le dernier changement que nous allons faire est dans **exit.script**. Si vous trouvez la sortie à temps, l'acteur doit pouvoir s’échapper, mais s'il y arrive juste à temps et tout en disant sa ligne, le temps passe et qu'il meurt? Alors nous allons éviter cela en détachant le script de la bombe et le laisser parler ça serait quelque chose de plus raisonnable.
-So the contents of the **exit.script** would look like this:+Donc le contenu de **exit.script** devrait ressembler à ça:
<code script> <code script>
Line 343: Line 343:
if (door.Active) if (door.Active)
{ {
- actor.Talk("I don't want to return to my flat before I am sure I can't enter the warehouse!");+ actor.Talk("Je ne veux pas retourner à mon appart avant d’être sûr que je ne peux pas entrer dans l'entrepôt!");
} }
else else
{ {
Scene.DetachScript("scenes\warehouse\scr\bomb.script"); Scene.DetachScript("scenes\warehouse\scr\bomb.script");
- actor.Talk("Phew. That was close");+ actor.Talk("Ouf. C'était juste");
Game.ChangeScene("scenes\room\room.scene"); Game.ChangeScene("scenes\room\room.scene");
} }
Line 355: Line 355:
</code> </code>
-Save everything and test our little scheme to see some more of the effects.+Sauvegardez tout et testez notre petit système pour voir un peu plus sur les effets. 
 + 
 +Pour clore ce chapitre je vais ajouter un petit changement à notre système. Ce changement n'est pas nécessaire dans notre exemple, mais il le serais dans d'autres cas. Pour le moment nous avons testé, si l'entité région door est active pour prendre une décision. Mais que faire si nous avons besoin d'appliquer cette même logique sur plus d'une scène? Si nous nous tenons dans une scène différentes, logiquement nous ne pouvons pas utiliser une entité de cette façon parce qu'elle ne fait plus partie de la scène courante.
-On closing of this chapter I’ll introduce a little change to our scheme. This change is not necessary in our example, but it will be necessary in different case. For now we’re testing, if the entity region Door is Active for another decision. But what if we need to apply the similar logic to more than one scene? If we stand in different scene, we logically can’t use entity this way because it’s not anymore part of the current scene.+Donc ce que nous pouvons faire c'est d'utiliser une variable globale. Faisons un changement dans nos scripts alors!
-So what we can do is using a global variable. Let’s make a change to our scripts then! +Ainsi la derniere liste de code de ce triplet de script sera :
-Last code listing for this script triplet is then (changes in bold):+
**bomb.script** **bomb.script**
Line 366: Line 367:
#include "scripts\base.inc" #include "scripts\base.inc"
-for (var timer=6;timer>-1;timer = timer -1)  // let's set up a loop which would go down from 6 to 0.+for (var timer=6;timer>-1;timer = timer -1)  // Mettons en place une boucle qui passerait de 6 à 0.
{ {
- Game.Msg("Countdown: " + timer); //Let's display how much time do we have left. + Game.Msg("compte à rebours: " + timer); //Affichons combien de temps il nous reste 
- Sleep(1000); // Sleep one second (and also hand the game over to other threads)+ Sleep(1000); // Pause une seconde (et laisse aussi la main au jeu pour d'autres tâches)
} }
-Game.Interactive = false; //Death cutsene +Game.Interactive = false; //Scène de la mort 
-actor.Talk("I've just died. Let's try again");+actor.Talk("J'suis mort. Essayez encore.");
var door = Scene.GetNode("Door"); var door = Scene.GetNode("Door");
-door.Active = true; // If we die, we need to return the door to its active state or we'll never discover the bomb again.+door.Active = true; // Si nous mourons, nous avons besoin de remettre la porte à son état actif ou nous ne pourrons pas découvrir la bombe de nouveau.
global doorClicked = false; global doorClicked = false;
Game.ChangeScene("scenes\warehouse\warehouse.scene"); Game.ChangeScene("scenes\warehouse\warehouse.scene");
Line 387: Line 388:
on "LeftClick"  on "LeftClick" 
{ {
- Game.Interactive = false;    // We want our player to make more things at once and we don't want to be interrupted.+ Game.Interactive = false;    // Nous voulons que notre joueur fasse plusieurs choses à la fois et nous ne voulons pas être interrompu.
global doorClicked = true; global doorClicked = true;
actor.GoToObject(this); actor.GoToObject(this);
- this.Active = false;  // We disable the door so the hotspot is not visible or active anymore+ this.Active = false;  // Nous désactivons la porte afin que le hot-spot ne soit plus visible ou active du tout
- actor.Talk("Oh no. There's a timed bomb attached to the door! I have to find an exit before it explodes."); + actor.Talk("Oh non. Il y a une bombe à retardement attachée à la porte! Je doit m’échapper avant qu'elle n'explose.");
Scene.AttachScript("scenes\warehouse\scr\bomb.script"); Scene.AttachScript("scenes\warehouse\scr\bomb.script");
- Game.Interactive = true; // Allow player to play some more.+ Game.Interactive = true; // Permet au joueur de jouer de nouveau.
} }
</code> </code>
Line 408: Line 409:
if (!doorClicked) if (!doorClicked)
{ {
- actor.Talk("I don't want to return to my flat before I am sure I can't enter the warehouse!");+ actor.Talk("Je ne veux pas retourner à mon appart avant d’être sûr que je ne peux pas entrer dans l'entrepôt!");
} }
else else
{ {
Scene.DetachScript("scenes\warehouse\scr\bomb.script"); Scene.DetachScript("scenes\warehouse\scr\bomb.script");
- actor.Talk("Phew. That was close");+ actor.Talk("Ouf. C'était juste");
Game.ChangeScene("scenes\room\room.scene"); Game.ChangeScene("scenes\room\room.scene");
} }
Line 420: Line 421:
</code> </code>
-We’ve seen in this chapter some neat tricks with the way how we can handle the game logic. We’ve also learned some of the important concepts for the tying scene to the code and we are able to use a couple of very basic commands and object methods. But for now we all the time used a lot of prebuilt demo code. Next chapter is all about starting the project from scratch. We’ll build upon this blank project until we create a little feature packed game. So stay tuned, we’re getting into it.+Nous avons vu dans ce chapitre quelques astuces intéressantes avec la façon dont on peut gérer la logique du jeu. Nous avons aussi appris quelques notions importantes pour lier les scène au code et nous sommes capable d'utiliser un certain nombre de commandes et de méthodes objet très basiques. Mais pour le moment nous avons tout le temps utilisé un grand nombre de codes d'une démo pré-compilés. Le prochain chapitre est au sujet du démarrage d'un projet à partir de zéro. Nous allons partir d'un projet vierge jusqu'à créer un jeu tout simple compilé. Alors restez à l'écoute, on y va.
 
fr/wmebook/ch3.1318948627.txt.gz · Last modified: 2011/10/18 16:37 by Anto0085
Recent changes RSS feed Creative Commons License Driven by DokuWiki