| | Inventaire HUD | |
| | Auteur | Message |
---|
Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Inventaire HUD Dim 17 Aoû 2014 - 21: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 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 ? 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] |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Dim 17 Aoû 2014 - 22: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... |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Dim 17 Aoû 2014 - 22:49 | |
| Comment ça ? 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) ############################################################################################
|
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 8: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. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 10:16 | |
| Ah oui l'erreur était vraiment bête 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 ( ça me gêne un peu de demander autant d'aide, je sais quel fonctions faudrait utiliser, mais je sais pas comment ) |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 10: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) |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 10: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.... 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 } } |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 11: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. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 11: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 ? |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 12: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 |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 12: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 https://cbna.forumactif.com/t3117-tutoriel-for Et les ateliers propose pas d'exercices pour la boucle for |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 13: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 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. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| | | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| | | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 13: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 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 Une piste ? La logique est bonne ou bien pas du tout ? Le commencement est bon ? |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 13: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 |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 13: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 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 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 ) } |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 14:40 | |
| Ok, j'étais pas sûr que tu savais le faire c'est pour ca ^^' Ok, bien joué, mais tu peux optimiser ca T'as pas besoin de j, et petit indice, pour un tableau de n éléments, il faut parcourir de 0 à n-1. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 14:53 | |
| Ok donc je supprime le j ( ) et je suis perdu, mais je pense qu'il y a une piste avec abs() non ? |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 15: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 Lis bien les rapports d'erreur et tu comprendra ! |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 15: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 ! 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 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 - 15:29, édité 1 fois |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 15:28 | |
| Ouais bah voilà, c'est ca, GG 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 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 ! |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 15: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.. |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 16: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 |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 16: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); } |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 16: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 |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 16: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 |
| | | Mamie Wawa Très bonne participation
Messages : 112
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 16:39 | |
| Ok je vais essayer de faire ça ^^ |
| | | Batito Débutant
Messages : 12
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 20: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. |
| | | Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Inventaire HUD Lun 18 Aoû 2014 - 20:52 | |
| |
| | | Contenu sponsorisé
| Sujet: Re: Inventaire HUD | |
| |
| | | | Inventaire HUD | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |