Differences

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


fr:wmebook:ch6 2011/10/20 13:03 fr:wmebook:ch6 2011/10/20 15:00 current
Line 1: Line 1:
====== 6. L'inventaire ====== ====== 6. L'inventaire ======
-Dans ce cahpitre nous allons nous focaliser sur le fonctionnement de l'inventaire. Comme il va y avoir beaucoup de problème à couvrir, nous devrions aller directement à eux+Dans ce chapitre nous allons nous focaliser sur le fonctionnement de l'inventaire. Comme il va y avoir beaucoup de problème à couvrir, nous devrions aller directement à eux.
- +
-D'abord clarifions ce qu'est l'inventaire. Un des aspect typique du jeu d'aventure est la possibilités de collecter diverses ordures qui trainent dans le monde du jeu et de les utiliser avec une autre afin que le joueur atteigne son ultime but, comme sauvez le monde, etc... Aussi parfois vous pourriez vouloir vous venger et utiliser de ces détritus (en parlant des articles de l'inventaire) sur quelque chose dans le monde virtuel. +
 +D'abord clarifions ce qu'est un inventaire. Un des aspect typique du jeu d'aventure est la possibilités de collecter divers saloperies qui trainent dans le monde virtuel et de les utiliser avec une autre afin que le joueur atteigne son but ultime, Sauvez le monde, etc... Aussi parfois vous pourriez vouloir vous venger et utiliser un de ces détritus (en parlant des articles de l'inventaire) sur quelque chose dans ce monde virtuel.
WME a un excellent support pour l'inventaire incluant les articles combinés et l'article stocké. WME supporte aussi plusieurs inventaires, au cas où vous auriez plus d'un acteur principal ou que vous vouliez intégrer du commerce dans votre jeu. WME a un excellent support pour l'inventaire incluant les articles combinés et l'article stocké. WME supporte aussi plusieurs inventaires, au cas où vous auriez plus d'un acteur principal ou que vous vouliez intégrer du commerce dans votre jeu.
Line 227: Line 226:
Testez le jeu et vous pouvez voir, que si nous sélectionnons le livre dans l'inventaire, nous pouvons l'utiliser ailleurs, mais nous devons nous débarrasser de lui. Comme nous allons maintenant construire l'action générique, nous allons décidé que si nous faisons un clic droit avec l'article sélectionné, nous remettons cet article dans la boîte de l'inventaire. Testez le jeu et vous pouvez voir, que si nous sélectionnons le livre dans l'inventaire, nous pouvons l'utiliser ailleurs, mais nous devons nous débarrasser de lui. Comme nous allons maintenant construire l'action générique, nous allons décidé que si nous faisons un clic droit avec l'article sélectionné, nous remettons cet article dans la boîte de l'inventaire.
-Alors comme c'est une action génériques pour l'ensemble du jeu, ouvrez scripts/game.script et ajouter un événement RightClick, qui va s'occuper de ce problème.+Alors comme c'est une action génériques pour l'ensemble du jeu, ouvrez scripts/game.script et ajouter la gestion RightClick, qui va s'occuper de ce problème.
<code script> <code script>
Line 299: Line 298:
</code> </code>
-Now what we’ve done is that we’ve created another actor named Sally which uses the same graphics as a Molly, but it’s entirely different person. We have her reference stored in the global variable //actor2// and we’ve placed her in our Room scene. Next thing we’re going to do is that we’re going to implement a neat character switching.+Ce que nous venons de faire est que nous avons créé un autre acteur nommé Sally qui utilise les mêmes graphiques que Molly, mais c'est une personne entièrement différente. Nous avons sa référence stocké dans la variable globale //sally// et nous l'avons placé dans la salle. La chose suivante que nous allons faire est que nous allons mettre en œuvre un super changement personnage.
-If player clicks on Molly or Sally (without an inventory item selected) game gives control to the second actor.+Si le joueur clic sur Molly ou sur Sally (sans avoir d'article de l'inventaire sélectionné) le jeu donne le contrôle au second acteur.
-Now remember that everything in our scripts is set to use the global variable “actor”. So if we want to implement character switching, we simply set this variable to character of our liking. Also we have to change the **Game.MainObject** because it drives the screen scrolling and we want to maintain this functionality as well. So let’s open the file **molly.script** in the actor folder and add here the LeftClick handler:+souvenez vous que tout ce qui est dans vos scripts est configurer pour utilisé la variable globale "actor". donc si nous voulons faire un changement de personnage, nous réglons tout simplement cette variable sur le personnage de notre souhait. Nous devons aussi changer **Game.MainObject** parce il gère les défilement d'écran et on veut qui maintienne bien cette fonctionnalité. Donc ouvrez le fichier **molly.script** dans le dossier acteur et ajouter y la gestion LeftClick:
<code script> <code script>
on "LeftClick" on "LeftClick"
{ {
- if (Game.MainObject == molly) actor.Talk("I am already selected!");+ if (Game.MainObject == molly) actor.Talk("Je suis déjà sélectionnée!");
else else
{ {
Line 317: Line 316:
</code> </code>
-Analogically we’ll modify the sally.script to read:+Par analogie nous allons modifier **sally.script** :
<code script> <code script>
on "LeftClick" on "LeftClick"
{ {
- if (Game.MainObject == sally) actor.Talk("I am already selected!");+ if (Game.MainObject == sally) actor.Talk("e suis déjà sélectionnée!");
else else
{ {
Line 331: Line 330:
</code> </code>
-Although we could use single file for this, later on it pays off to have those separated when we want to perform different tasks with each actor.+Bien que nous aurions pu utiliser pour cela qu'un seul fichier, plus tard ça sera payant de les avoir séparé quand nous voulons effectuer des tâches différentes à chaque acteur.
-Now run the game and note that we can switch between actors by simple Left Click on them. +Maintenant lancer le jeu et remarquez que nous pouvons intervertir entre les acteurs par un simple clic gauche dessus.
-Having this done, we’ll return to our inventory and we try some interactions. First thing what we need to do is open our trusty **game.script** and actually code in the generic logic of inventory item interaction. What we want to achieve is that whenever we left click with a selected item on a hotspot, we try to call the corresponding method named by an item name. So if we click with a book, we’d try to call a method “Book” of the target entity.+Ayant fait cela, nous allons revenir à notre inventaire et nous essayons quelques interactions. La première chose que nous devons faire est d'ouvrir notre fidèle **game.script** et réelement coder dans la logique de base des interactions d'article de l'inventaire. Ce que nous voulons réaliser, c'est que chaque fois que nous avons faisons un clic gauche avec un article sélectionné sur un hot-spot, nous essayons d'appeler la méthode correspondante nommé par un nom d'article. Donc, si on clique avec un livre, on essayait d'appeler une méthode de l'entité cible "Livre".
-This can be easily done by modifying the Left Click event to read:+Ceci peut être facilement fait en modifiant l'événement Clic gauche pour avoir:
<code script> <code script>
Line 360: Line 359:
</code> </code>
-What are we programming here is the fact, that if we have selected inventory item and we’re not clicking with this item on itself (which would be applicable if we didn’t “hide” the inventory item upon selecting), then we test if the target hotspot can handle the event by the name of our item and if so, this event is fired.+Ce que nous avons programmé là est en fait, que si nous avons un article d'inventaire sélectionné et que nous ne cliquons pas avec cet article sur lui-même (Ce qui serait faisable si nous n'avions pas "cacher" l'article de l'inventaire lors de sa sélection), puis on test si le hot-spot cible peut gérer l’événement par le nom de notre article et si oui, l’événement est déclenché.
-Take some time to think about this concept and when you’re sure you understand it, read up.+Prenez du temps pour réfléchir au sujet de ce concept et quand vous êtes sur de le comprendre, continuez.
-Now in our case we have two active objects on the screen (provided that you already picked up the book) - Molly and Sally. So our goal is to make them react to the book usage.   +A présent, dans notre cas nous avons deux objets actifs sur l'écran (à condition que vous ayez déjà pris le livre) - Molly et Sally. Donc, notre objectif est de les faire réagir à l'usage livre.
-  +
-Let’s start with the concept. We want the following: if Molly is active and reads a book, she should be able to read the book. If however you try to read a book with Sally while Molly is active, Sally refuses. The same applies vice versa.+
-Let’s open **molly.script** first and add the following code:+Commençons avec ce concept. Nous voulons ce qui suit: si Molly est active et lit un livre, elle devrait être capable de lire le livre. Si toutefois vous essayez de lire un livre avec Sally tandis que Molly est actif, Sally refuse. La même chose s'applique vice et versa. 
 + 
 +Ouvrons **molly.script** d'abord et ajoutez le code suivant:
<code script> <code script>
on "book" on "book"
{ {
- if (actor == molly) actor.Talk("It's always important to read WME documentation! I'll do it now!");+ if (actor == molly) actor.Talk("C'est toujours important de lire la doc de WME! Je vais le faire maintenant!");
else else
- molly.Talk("Read it yourself Sally!");+ molly.Talk("Lit le toi même Sally!");
} }
</code> </code>
-Then open the sally.script and write there the following:+Puis ouvrez sally.script et ecrivez ce qui suit:
<code script> <code script>
on "book" on "book"
{ {
- if (actor == sally) actor.Talk("It's always important to read WME documentation! I'll do it now!");+ if (actor == sally) actor.Talk("C'est toujours important de lire la doc de WME! Je vais le faire maintenant!");
else else
- sally.Talk("Read it yourself Molly!");+ sally.Talk("Lit le toi même Molly!");
} }
</code> </code>
-Again it’s very simple logic. If actor variable containing the active actor is set to the clicked actor, we read the documentation or we say the other line. The event “book” is called because we modified the **game.script** to do this. Clear as mud?+Là encore c'est une logique très simple. Si la variable actor contenant l'acteur actif est défini sur l'acteur qui est cliqué, nous liront la doc sinon nous diront l'autre ligne. L’événement "book" est appelé parce que nous avons modifié le **game.script** pour faire cela. Clair comme du jus de boudin?
-Now we have one illogical thing. It doesn’t matter who picks up the book, both have the book in the inventory. This is the global inventory approach and it’s ok if we have one actor on the stage. But as we’ve introduced two actors, we should separate their inventories.+Nous avons maintenant un chose pas logique. Ça ne se soucis pas de qui a pris le livre, les deux ont le livre dans leur inventaire. C'est une approche d'inventaire globale et c'est bon si nous avons qu'un acteur en scène. Mais comme nous avons introduit deux acteurs, nous devrions séparer leurs inventaires.
-We’re going to try the following scenario. Whoever picks up the book will get it in his personal inventory. If this person use the book on the other character, she gives the book to the other.+Nous allons essayer le scenario suivant. Quiconque prendra le livre le mettra dans son inventaire personnel. Si cette personne utilise le livre sur l'autre personnage, elle donne le livre à l'autre.
-We’re going to introduce new Game attribute called **InventoryObject**. This attribute accepts the actor variable and we’re going to modify the actor scripts that together with the actor switching also the inventory object gets switched.+Nous allons introduire un nouvel attribut de Game qui s’appelle **InventoryObject**. Cet attribut accepte la variable acteur et nous allons modifier les scripts de l'acteur qui avec la permutation des acteur va aussi permuter les objets de inventaire.
-But it’s not enough. We also no longer use Game.TakeItem (Game.DropItem, Game.DeleteItem etc.) but we’ll use **actor.TakeItem** (**actor.DropItem**, **actor.DeleteItem**). +Mais ce n'est pas assez. Nous n'allons plus utiliser Game.TakeItem (Game.DropItem, Game.DeleteItem, etc...)mais nous allons utiliser **actor.TakeItem** (**actor.DropItem**, **actor.DeleteItem**).
-So our first stop is in game.script in our too familiar place:+Donc notre premier arrêt est dans game.script à notre emplacement trop familier:
<code script> <code script>
Line 409: Line 408:
</code> </code>
-Next stop is in data\scenes\Room\scr\book.script:+ 
 +Prochain arrêt est dans data\scenes\Room\scr\book.script:
<code script> <code script>
Line 419: Line 419:
</code> </code>
-And our last stop for now is molly and sally script adding in the Left Click handler of both this line: +Et notre dernier arrêt pour le moment est le script de Molly et de Sally en ajoutant dans le gestionnaire de clic gauche des deux ces lignes :
<code script> <code script>
Line 426: Line 426:
</code> </code>
-Now when you test the game, you see, that those girls have separate inventories and moreover who grabs the book, has it.+Maintenant quand vous testez le jeu, vous voyez que ces filles ont des inventaires séparés et d’ailleurs qui saisit le livre, l'a.
-Now let’s handle the book giving:+Maintenant occupons nous de donner le livre:
**sally.script** **sally.script**
Line 435: Line 435:
on "book" on "book"
{ {
- if (actor == sally) actor.Talk("It's always important to read WME documentation! I'll do it now!");+ if (actor == sally) actor.Talk("C'est toujours important de lire la doc de WME! Je vais le faire maintenant!");
else else
{ {
Line 441: Line 441:
molly.DropItem("book"); molly.DropItem("book");
sally.TakeItem("book"); sally.TakeItem("book");
- sally.Talk("Thank you");+ sally.Talk("Merci");
} }
} }
</code> </code>
-If we clicked by Molly with a book on Sally, we first put away the item (SelectedItem = null), then Molly drops the book and Sally takes it. This way the item gets transferred. At the end Sally thanks Molly for the book. If we didn’t call the DropItem method, both girls would have the book in their inventories.+Si nous cliquons avec Molly et le livre sur Sally, nous mettons d'abord l'article de coté (SelectedItem = null), puis Molly lâche le livre et Sally le prend. C'est la façon dont les items sont transférés. A la fin Sally remercie Molly pour le livre. Si nous n'avions pas appelé la méthode DropItem, les deux filles aurait eu le livre dans leurs inventaires.
-Molly script is almost the same:+le script de Molly est aussi le même:
<code script> <code script>
on "book" on "book"
{ {
- if (actor == molly) actor.Talk("It's always important to read WME documentation! I'll do it now!");+ if (actor == molly) actor.Talk("C'est toujours important de lire la doc de WME! Je vais le faire maintenant!");
else else
{ {
Line 459: Line 459:
sally.DropItem("book"); sally.DropItem("book");
molly.TakeItem("book"); molly.TakeItem("book");
- molly.Talk("Thank you");+ molly.Talk("Merci");
} }
} }
</code> </code>
-Last couple of methods closing this chapter are dealing with the additional item methods.+Le dernier couple de méthodes, pour clore ce chapitre, sont des méthodes supplémentaires pour les articles.
-**Game.IsItemTaken([item name]);** returns true if anyone has an item in his/her inventory. +**Game.IsItemTaken([item name]);** retourne TRUE si n'importe qui a un article dans son inventaire.
-If we want to check specific inventory for item, we’d query it through **sally.HasItem([item name]);** and again this method returns true or false. +Si nous voulons contrôler si un article est dans un inventaire spécifique, nous l'interrogeons grâce à **sally.HasItem([item name]);** et là encore cette méthode répond TRUE or FALSE 
-//(So in praxis Game.IsItemTaken("book"); or sally.HasItem("book");)//+//(Donc, en pratique Game.IsItemTaken("book"); ou sally.HasItem("book");)//
-That’s enough for the items apart from the important tip. Sometimes you don’t need an actor for a NPC as it can be for example only a shadow or a head mounted on the wall. WME doesn’t limit you by that and so even entities can have their inventories!+C'est assez pour les articles sauf ce conseil important. Quelques fois vous n'avez pas besoin d'un acteur pour un NPC comme ça peut être, par exemple, seulement un ombre ou une tête accroché au mur. WME ne vous limite pas à cela et même des entités peuvent avoir leurs inventaire!
-**Documentation link:** +**Liens vers la Documentation:** 
-//Contents-> Inside a game-> Working with the inventory// - for the general description of the inventory work+//Contents-> Inside a game-> Working with the inventory// - pour la description générale du fonctionnement de l'inventaire
 
fr/wmebook/ch6.1319108584.txt.gz · Last modified: 2011/10/20 13:03 by Anto0085
Recent changes RSS feed Creative Commons License Driven by DokuWiki