Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
SSD interne Crucial BX500 2,5″ SATA – 500 ...
Voir le deal
29.99 €

 

 BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?

Aller en bas 
2 participants
AuteurMessage
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty
MessageSujet: BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?   BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? EmptyJeu 28 Fév 2019 - 16:27

Bonjour les amis,

Voici mon idée, dans le jeu on peut récupérer plusieurs fois le même objets dans l'inventaire.
La fonction player.InventoryQuantity[iInvItem_object.ID] permet justement de stocker le nombre d'objet que l'on possède.
De là, j'aimerais bien indiquer au joueur le nombre d'objet qu'il a en sa possession et cela directement dans l'inventaire.

J'avais donc pensé utilisé les DynamicSprite
Voilà ce que j'avais plus ou moins tenté... Et ça me fait crasher le jeu, qui pourtant c'était correctement compilé.


Code:

if(player.InventoryQuantity[iInvItem_tomate.ID]>1){
  
   String Text_nbr;
   Text_nbr = String.Format("%d",player.InventoryQuantity[iInvItem_tomate.ID]); // ici, j'indique la quantité
   DynamicSprite* vignette = DynamicSprite.CreateFromExistingSprite(12, true); //12 c'est le sprite, j'aurais pu écrire iInvItem_tomate.Graphic
   DrawingSurface*surf = vignette.GetDrawingSurface();
   surf.DrawingColor = 14;
   surf.DrawString(10, 20, 1, Text_nbr);
   surf.Release();
  
   iInvItem_tomate.Graphic = vignette.Graphic; // C'est cette ligne qui semble causer des problèmes !
  
  vignette.Delete(); // j'ai essayé avec et sans cette fonction, ça ne change rien


Avez vous des astuces ?

bibiz
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty
MessageSujet: Re: BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?   BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? EmptyJeu 28 Fév 2019 - 17:16

Salut filoulefilou,

Je soupçonne que le problème vient du fait que tu crées la DynamicSprite localement, laquelle est (il me semble) automatiquement détruite lorsque la routine a fini d'être exécutée. Résultat : ton objet d'inventaire n'a plus aucune image associée après coup (en gros, c'est comme si ta commande Delete à la ligne 14 était toujours là, même si tu l'enlèves).

Essaye de créer des DynamicSprite globales. Pour que ta solution soit générale, je te conseille d'utiliser des tableaux dynamiques. En haut de ton global script :
Code:
DynamicSprite* vignettes[];

function game_start() {
    vignettes = new DynamicSprite[Game.InventoryItemCount];
}

Ensuite, au lieu de créer une nouvelle variable-pointeur DynamicSprite (ligne 6 de ton bloc de code par exemple), tu fais directement référence au tableau vignettes (utilise la propriété ID de l'objet d'inventaire pour pointer sur la bonne case). Évidemment tu fais pareil pour toute référence à vignette dans ton bloc de code : tu remplaces par vignettes[...]

Note : tu peux parcourir tous les objets d'inventaire en utilisant le tableau pré-défini inventory, comme ça
Code:
int i = 0;
while (i < Game.InventoryItemCount) {
    if (player.InventoryQuantity[i]>1){
        String Text_nbr;
        Text_nbr = String.Format("%d", player.InventoryQuantity[i]);
        vignettes[i] =  DynamicSprite.CreateFromExistingSprite(inventory[i].Graphic, true);
        DrawingSurface*surf = vignettes[i].GetDrawingSurface();
        surf.DrawingColor = 14;
        surf.DrawString(10, 20, 1, Text_nbr);
        surf.Release();
        inventory[i].Graphic = vignettes[i].Graphic;
    }
    i++;
}

Note 2 : tu devrais aussi probablement garder un backup des images que les objets d'inventaire ont au début du jeu, parce qu'à mesure que tu changes la propriété Graphic pour écrire du texte par-dessus (le nombre) ça va devenir tout crade. C'est facile, tu crées un tableau dynamique de type int, exactement comme tu le fais pour vignettes (sauf que les int sont pas des pointeurs, donc pas d'astérisque), mais en plus tu remplis chaque case de ce tableau avec Graphic de l'objet d'inventaire correspondant (en utilisant une while dans game_start). Ensuite tu fais références à ce tableau dans CreateFromExistingSprite plutôt qu'à inventory[n].Graphic.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty
MessageSujet: Re: BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?   BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? EmptyJeu 28 Fév 2019 - 17:34

Merci sourire

Alors pour le backup des images, j'ajoute :

je déclare //
int Sprite_BackUp[];

Puis je mets , dans Game_Start()

Sprite_BackUp = inventory[Game.InventoryItemCount].Graphic; ???
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty
MessageSujet: Re: BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?   BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? EmptyJeu 28 Fév 2019 - 17:41

C'est presque ça.

Tu as bon pour int Sprite_BackUp[]; (tu peux mettre ça juste en-dessous de DynamicSprite* vignettes[]; par exemple).

Ensuite dans game_start, juste en-dessous de vignettes = new DynamicSprite[Game.InventoryItemCount]; tu peux mettre :
Code:
Sprite_BackUp = new int[Game.InventoryItemCount]; // Exactement le même format que la ligne précédente
int n = 0;
while (n < Game.InventoryItemCount) {
    Sprite_BackUp[n] = inventory[n].Graphic;
    n++;
}

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
filoulefilou


Nombre de messages : 359

Date d'inscription : 24/05/2010


BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty
MessageSujet: Re: BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?   BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? EmptyJeu 28 Fév 2019 - 18:02

Je vois où je bloquais, j'ignorais qu'il y avait un autoDelete

Parfait ton code !!


Il y avait juste un petit bug avec le int i = 0; que j'ai remplacé par int i = 1;  

Car le comptage des objets de l'inventaire commence avec la valeur 1 visiblement.
Merci beaucoup sinon.


Petite question au passage, aurais-je pu remplacer le while (i< n) par   for (int i = 0 ; iCa change sûrement rien, mais dernièrement j'utilisais cette formulation avec un autre soft et je la trouvais plus visuelle...
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty
MessageSujet: Re: BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?   BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? EmptyJeu 28 Fév 2019 - 20:04

Oui, tu aurais pu utiliser une boucle for à la place si tu utilises une version 3.4 alpha ou supérieure d'AGS. J'ai utilisé while dans un souci de compatibilité maximale.

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Contenu sponsorisé





BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty
MessageSujet: Re: BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?   BUG !! Comment ajouter un DrawString sur un objet de l'inventaire  ? Empty

Revenir en haut Aller en bas
 
BUG !! Comment ajouter un DrawString sur un objet de l'inventaire ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment savoir si un objet est accessible
» Comment savoir si un objet fait partie de l'inventaire ?
» Ajouter du grain ?
» Les jeux à ajouter au site
» Ajouter un axe X sur un walk off top edge

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: