AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Inventaire HUD

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Inventaire HUD   Dim 17 Aoû 2014 - 19:02

Bonjour,

J'ai commencer à créer un inventaire pour mon jeu ( juste une barre de 9 slot pour l'instant, un vrai je sais pas si j'y arriverais )
Donc j'ai d'abord fais le système pour afficher les slots :
Code:
for (i = 0; i < 9; i += 1)
{
draw_rectangle_colour(scr_get_screen_x(5+5*i+slot_width*i,5+5*i+slot_width*i),scr_get_screen_y(425,425),scr_get_screen_x(5+5*i+slot_width*i+slot_width,5+5*i+slot_width*i+slot_width),scr_get_screen_y(475,475),c_blue,c_blue,c_blue,c_blue,false);
}

Mais maintenant je coince, jusqu'à maintenant quand je ramassais des items dans le jeu, il ne se passait rien,  mais maintenant je veux afficher l'item ramasser dans la barre des slot et c'est la que je bloque, je voudrais afficher l'item le plus à gauche possible, si le slot est libre, et si le slot 1 est occupé alors occupé le slot 2, etc.. et mettre une limite
J'ai pensé aussi à utiliser une boucle for, mais je viens seulement de commencer à l'utiliser et déjà rien que pour afficher les slot j'ai bugué pendant 10 mins ouh 

J'ai trouvé ce tutoriel http://gmc.yoyogames.com/index.php?showtopic=613378 mais pareil je bloque aussi au niveau des tableaux qu'il crée ( global.items[0,0] ) et il n'affiche que tu texte, or moi je voudrais afficher le sprite de l'item en question

Quelqu'un peut me donner une piste ou bien m'expliquer le fonctionnement ?  sweat 

Merci

EDIT: Ok j'ai réussi à faire "marcher" l'inventaire jusqu'à maintenant, mais maintenant j'aimerais afficher des sprites eu lieu du texte, et avec son système je sais pas comment faire ça, le basique draw_sprite marche pas uU
J'ai essayé draw_sprite(global.inventory[j,1]....) mais ça me fait une erreur out of range [10,1]
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Dim 17 Aoû 2014 - 20:32

Bon, j'ai à peine survolé son topic, mais t'as juste à faire un switch. Si c'est l'item de bois, bah tu fous le sprite de bois, etc...

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Dim 17 Aoû 2014 - 20:49

Comment ça ? ouh
PArce que j'ai déjà essayé de faire
draw_sprite_ext(global.inventory[j,1],0,scr_get_screen_x(5,5)+( 4*j*i ),scr_get_screen_y(425,425),1,1,0,c_white,0.7)

Avec global.items[0,1] = spr_log
Dans le create de mon obj inventory mais quand je lance le jeu ça me fait une erreur :
Code:

___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Draw Event
for object obj_hud_controller:

Push :: Execution Error - Variable Index [0,1] out of range [10,1] - -5.inventory(100015,1)
 at gml_Object_obj_hud_controller_DrawEvent_1 (line 72) - draw_sprite_ext(global.inventory[j,1],0,scr_get_screen_x(5,5)+( 4*j*i ),scr_get_screen_y(425,425),1,1,0,c_white,0.7)
############################################################################################
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 6:45

Déjà l'erreur c'est parce que t'as pas initialisé le [0,0] avant le [0,1].
Comme ca ca devrait marcher, j'ai compris pourquoi ia deux index à ton tableau maintenant.
Mais si tu veux pas mettre l'id du sprite dans une case, tu peux faire un switch avec le nom de l'item et en fonction de ca récupérer le bon sprite. Regarde dans la doc si t'as jamais utilisé de switch.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 8:16

Ah oui l'erreur était vraiment bête  smack 
Mais maintenant je bloque aussi, je voudrais que les items puissent se stacker, au lieu de les afficher à la chaine ( avec une limite )
Et aussi les afficher au milieu du slot ( j'essaye de bidouiller les valeurs depuis tout à l'heure sans y parvenir )

Pour afficher le nombre d'item stacker faudrait utiliser un draw_text mais je vois pas comment faire enfaites  snif 
( ça me gêne un peu de demander autant d'aide, je sais quel fonctions faudrait utiliser, mais je sais pas comment  sad )
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 8:25

Bah tu rajoute une case à ton tableau 2D qui contient le nombre d'items, et quand tu ramasse un nouvel item tu vérifie qu'il y en a pas un déjà dans l'inventaire.
Pour afficher un nombre faut caster ton double en string : string(nbIyems)

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 8:55

Ok donc déjà je rajoute une ligne à mon tableau pour dire le nombre de base d'item de ce type, et encore une autre pour dire si l'item est ramassé ou pas
Code:

   //Item LOG//
    global.items[0,0] = "Log" //Name
    global.items[0,1] = spr_log // sprite
    global.items[0,2] = 0 // Nombre de base
    global.items[0,3] = false; // Déjà ramassé
    
    //Item ROCK//
    global.items[1,0] = "Rock" //Name
    global.items[1,1] = spr_rock //sprite
    global.items[1,2] = 0 // Nombre de base
    global.items[1,3] = false; // Déjà ramassé
    
    //Item HEALTH POT//
    global.items[2,0] = "Health Pot" //Name
    global.items[2,1] = spr_pot_health //sprite
    global.items[2,2] = 0 // Nombre de base
    global.items[1,3] = false; // Déjà ramassé

Mais après je bloque encore, comment je fais pour vérifier si l'item est déjà dans l'inventaire ?

Pour incrémenter le nombre de base je pense avoir trouver comment faire :
Item log :
Code:
scr_itempickup(global.items[0,1],global.items[0,2]); // Log
global.items[0,2] += 1 // Incrémente de 1 l'item ramassé
Item rock :
Code:
scr_itempickup(global.items[1,1],global.items[1,2]); // Rock
global.items[1,2] += 1 // Incrémente de 1 l'item ramassé
Item health pot :
Code:
scr_itempickup(global.items[2,1],global.items[2,2]); // Health pot
global.items[2,2] += 1 // Incrémente de 1 l'item ramassé

Je me suis trompé pour l'incrémentation ?

Puis encore pour afficher le nombre d'item je bloque la, car vu que je sais pas comment vérifier si l'item est déjà dans l'inventaire bah quand j'ajoute le même item ça me fait 0,1,2....   snif

Edit:
J'ai changé le script aussi:
Code:
    for(j=0;j<=maxInvSlots;j+=1)
    {
        if ( global.inventory[j,1] == spr_inventory_empty )
        {
        global.inventory[j,1] = argument0;
        global.inventory[j,2] = argument1;   
        j = maxInvSlots
        }
    }
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 9:07

Pour incrémenter c'est bon.
Ensuite pas besoin d'une nouvelle ligne pour savoir si il est déjà ramassé, suffit juste de parcourir tout l'inventaire et vérifier si il contient déjà l'item, si oui tu incrémente, autrement tu l'ajoute.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 9:19

Je vois pas trop comment faire ça, comment le parcourir ? Faut utiliser une boucle for ?

Edit: Ah aussi pour dessiner les items j'ai fais :
Code:
for(j=0;j<=maxInvSlots;j+=1) // Dessine les items
{
draw_sprite_ext(global.inventory[j,1],0,scr_get_screen_x(30,30)+(50*j),scr_get_screen_y(450,450),1,1,0,c_white,0.7)
draw_text(scr_get_screen_x(30,30)+(50*j),scr_get_screen_y(460,460),global.inventory[j,2]);
}

Mais je pense pas que le draw_text soit correct, même si maintenant l'item est en double dans la barre d'inventaire ça va me faire 0,1,2... alors que normalement si ya deux fois le même item bah ça devrait être partout 2 non ?

Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 10:13

Ouais, avec une boucle for. Tu devrais faire quelques exos sur les boucles et les tableaux, tu comprendrais sans doute mieux.
Par contre je comprend pas ton histoire de dessins là oO

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 10:36

Bah en reprenant son tutoriel, dans l'event draw ça dessine les items
Sinon, tu aurais un lien pour ces fameux exos ?

Edit: J'ai un peu chercher, le seul lien que j'a trouvé est mort  neutre http://cbna.forumactif.com/t3117-tutoriel-for
Et les ateliers propose pas d'exercices pour la boucle for Sad
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 11:13

Bah c'est surtout ca que je captais pas : "si maintenant l'item est en double dans la barre d'inventaire ça va me faire 0,1,2... alors que normalement si ya deux fois le même item bah ça devrait être partout 2 non ?"

Sinon, v'là quelques petits exos de mon crû, pour ce que ca vaut Yum!
array[0]=1
array[1]=1
array[2]=3
array[3]=2
array[4]=0
array[5]=4
array[6]=7
array[7]=1
Donc tu mets ca dans le create et dans le draw je veux que tu m'affiche toutes les valeurs du tableau l'une en dessous de l'autre. A noter que tu dois pas utiliser une variable spécifique pour qu'elles s'affichent l'une en dessous de l'autre.

Ensuite, une fois que t'as réussi ca, je veux que tu compare chaque valeur à la suivante, t'affiche les deux valeurs avec un signe de comparaison entre les deux, pour la première ligne ca doit donner "1=1", la deuxième"1<3", etc...

Poste tes codes ici, ca peut paraitre inutile mais ca va te permettre d'acquérir la logique des boucles et des tableaux.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 11:17

ouh

Bon je crée un nouveau projet et je vais essayer de faire ça !  Oups!

A dans 8 ans ! gnii 
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 11:19

awesome Courage, et n'hésite pas si tu bloque trop longtemps Smile

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 11:51

Après de multiples essais j'en suis tombé à
Code:

for ( i=0; i <= 7; i += 1)
{
    for ( j=1; j <=7; j+=1 )
    {
    if array[i] == j then text = array[i] + "=" + j
    if array[i] < j then text = array[i] + "<" + j
    if array[i] > j then text = array[i] + ">" + j
    }
draw_text( x,y+16*i,string(text))
}

Mais bien sur ça fait une belle erreur sur text et je ne sais pas pourquoi  snif 
J'ai essayé plusieurs code mais celui-ci dans ma logique est que i = commence à partir du premier chiffre du tableau et j = commence à partir du second, puis on compare i et j, et selon le résultat le text est différent, mmais bien sur ça marche pas  snif 

Une piste ? La logique est bonne ou bien pas du tout ?  mop 
Le commencement est bon ?
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 11:55

Quand tu concatène des nombres et du texte faut convertir : string(nombre).
J'ai du mal m'exprimer, faut que tu compare les nombres à chaque nombre qui suit dans le tableau, tu dois pas avoir deux boucles imbriquées. Mais commence d'abord par le premier exo, il est plus simple. Dans le deuxième ia un piège Wink

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 11:59

Bah pour le premier exercice un simple for
Code:
( i=0; i <= 7; i += 1)
{
draw_text( x,y+16*i,array[i] )
}

Suffit, mais pour le deuxième je bloque vraiment  snif

Edit: Et sinon pour le duexième je bloque encore, pour comparer la ligne à la suivante, j'ai essayer array[i] == array[i+1] mais bien sur ça fait une erreur ( vu que le tableau est pas infini )

Edit 2: Hmm jpense que y a une histoire avec les variables i et j, et elles s'incrémentent toutes deux à chaque itérations, je me trompe ?

EDIT 3: BENEDICTION BOR*** DE ***** ** *** *** ** J'ai réussis  money money money   rire2 rire2 gha ouh rire2
Le code :
Code:

for ( { i=0; j=1; } i <= 7; { i+=1 j+=1;} )
{
if j >= 7 then j = 7

if array[i] == array[j] then text = string(array[i]) + " == " + string(array[j])
if array[i] > array[j] then text = string(array[i]) + " > " + string(array[j])
if array[i] < array[j] then text = string(array[i]) + " < " + string(array[j])
draw_text( x,y+16*i,text )
}
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 12:40

Ok, j'étais pas sûr que tu savais le faire c'est pour ca ^^'
Ok, bien joué, mais tu peux optimiser ca  gnii 
T'as pas besoin de j, et petit indice, pour un tableau de n éléments, il faut parcourir de 0 à n-1.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 12:53

Ok donc je supprime le j (  snif ) et je suis perdu, mais je pense qu'il y a une piste avec abs() non ?
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 13:02

Nop, fais une simple boucle et compare array[i] et array[i+1]. Comme dit ia un piège, mais c'est tout con  gnii Lis bien les rapports d'erreur et tu comprendra !

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 13:19

L'erreur
Code:
__________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Draw Event
for object object0:

Push :: Execution Error - Variable Index [0,8] out of range [1,8] - -1.array(100000,8)
 at gml_Object_object0_DrawEvent_1 (line 5) - if array[i] == array[i+1] then text = string(array[i]) + " = " + string(array[i])
############################################################################################

La solution : i <= 7-1 ._.

Code:
for ( i=0; i <= 7-1; i+=1 )
{
if array[i] == array[i+1] then text = string(array[i]) + " = " + string(array[i+1])
if array[i] > array[i+1] then text = string(array[i]) + " > " + string(array[i+1])
if array[i] < array[i+1] then text = string(array[i]) + " < " + string(array[i+1])
draw_text( x,y+16*i,text )
}

Effectivement ça marche ! Surprised
Mais je comprend pas la logique derrière, normalement 7-1 ça ferait 6 et la boucle ne se répète que donc 6 fois ?
JE comprend pas trop la scratch

edit : Ah si, enfaites la boucle s'arrête juste avant d'atteindre la fin du tableau c'est ça ?

Mais sinon je bloque toujours pour le problème de départ, je sais comparer array[i] à array[i+1] mais comment je fais pour le faire sur tout une boucle ( pour vérifier si j'ai l'item ou pas )
Je bloque encore à ce niveau, un indice ?


Dernière édition par Mamie Wawa le Lun 18 Aoû 2014 - 13:29, édité 1 fois
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 13:28

Ouais bah voilà, c'est ca, GG Smile
Bah c'était justement le piège, vu que tu compare l'actuel avec le suivant, bah faut pas que t'aille jusqu'au dernier, sinon ia pas de suivant, donc faut que t'aille jusqu'à l'avant dernier  awesome 
Je pense que tu pourrais faire toi même ton propre système d'inventaire, sans prendre celui de quelqu'un d'autre. Tu devrais tout reprendre à zéro, quitte à avoir un truc pratiquement identique à la fin, mais au moins tu comprendrais tout.

Si j'étais toi j'utiliserais une structure de type clé/valeur : http://gamemaker.info/fr/manual/411_04_maps C'est comme un tableau mais en plus évolué (et plus rapide je crois). Pour chacun de tes items tu lui attribue un id, ce sera la clé de ta structure (mais tu peux aussi utiliser le nom, à toi de voir), et la valeur c'est tout simplement le nombre d'items que tu possède. Quand tu récupère un item tu parcours toute ta structure, si tu y trouve le même item, t'incrémente de un la valeur, autrement tu rajoute une entrée avec comme valeur 1 et comme clé le nom/id de ton item. Ensuite si tu eux récupérer des données complémentaires pour tes items, genre le prix ou la description, tu fais une fonction avec comme entrée l'id/le nom de ton item et qui te retourne ce que tu veux grâce à un gros switch.

Je sais pas exactement quel style de jeu tu veux faire, mais fais gaffe, GM est pas franchement adapté pour un gros RPG :/ Quoi qu'il en soit bonne chance !

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 13:32

Bah enfaites la je fais un sandbox de type rpg ( avec génération de map aléatoire ) donc le plus gros c'est surtout coté génération map, arès le coté RPG c'est surtout inventaire, quelques potions, craft, etc..
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 14:09

Mais sinon pour faire un inventaire soi-même, même en relisant celui du tutoriel j'arrive pas à ajouter une condition de vérification, donc en refaire un , laisse tomber  snif 
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 14:23

Bah c'est possible je dis pas, mais c'est sans doute pas la meilleure solution... :/

bah c'est simple, mets ca dans une fonction addItem() :
Code:
item=argument0;
if(ds_map_exists(item)){
  ds_map_replace(inventaire,item,ds_map_find_value(inventaire,item)+1);
}else{
  ds_amp_add(inventaire,item,1);
}

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 14:28

Nan nan, je te parlais que j'arrivais pas à le faire dans l'inventaire du tutoriel, donc en re-créer un complet j'imagine même pas Sad
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 14:32

Bah justement, au moins là tu comprend tout, je t'ai expliqué plus haut la marche à suivre, t'as juste à coder le truc.
Je viens de te faire la fonction pour ajouter un item, pour l'enlever suffit de faire ds_map_replace(inventaire,item,ds_map_find_value(inventaire,item)-1) et de vérifier qu'il en reste au moins un 8sinon on le vire de la structure), et pour récupérer le nombre d'items tu check qu'il y en a au moins un avec ds_map_exists(item) puis le nombre exact avec ds_map_find_value(inventaire,item). Bref, t'as tout ce qu'il faut Smile

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Mamie Wawa
Très bonne participation


Messages : 112

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 14:39

Ok je vais essayer de faire ça ^^
Revenir en haut Aller en bas
Batito
Débutant


Messages : 12

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 18:28

Bonjour,

Ce sujet m’intéresse mais pour l'instant j'y comprends pas grand chose.
Vous pouvez me dire ou je peux trouver de bons tuto sur les boucles, switch et tableaux pour game maker?

Merci.
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
avatar

Messages : 2213
Localisation : Oui

MessageSujet: Re: Inventaire HUD   Lun 18 Aoû 2014 - 18:52


_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Inventaire HUD   

Revenir en haut Aller en bas
 
Inventaire HUD
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Archives départementales - Inventaire après décès
» Meules ? sur inventaire après décès
» récolement ou inventaire : quel matériel ?
» Contrat de Mariage - Inventaire après Décès - Déclaration de Grossesse
» "Droit d'inventaire" sur de Gaulle

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: