Se richiamo l'inventario con un tasto funziona perfettamente creando gli slot necessari.
Se invece tengo l'inventario fisso, senza possibilità di aprirlo o chiuderlo crea slot all'infinito.
come spesso mi succede credo di essermi person in un bicchiere d'acqua...
Vi posto comunque il codice di tutto l'inventario, magai può essere utile anche ad altre persone.
obj_player
create
Codice: Seleziona tutto
//inizializzo ds_list inventario
globalvar inv;
inv = ds_list_create();
obj_item
create
Codice: Seleziona tutto
///sceglie il tipo di oggetto che deve creare
randomize();
item_name = choose("motore", "volante");
sprite_index = asset_get_index("spr_" + item_name);
Codice: Seleziona tutto
///quanod l'oggetto collide con l'oggetto, finisce nell'inventario
if (place_meeting(x, y, obj_player)){
ds_list_add(inv, item_name);
instance_destroy();
}
obj_menu
Create
Codice: Seleziona tutto
active =false;
Codice: Seleziona tutto
//Diventa attivo su vero / falso se si preme Esc, ma in caso contrario, l'evento è attivo
if (keyboard_check_pressed(vk_escape)) active = !active;
else exit;
//se è attivo:
if (active){
var w=0, h=0;
for(var i=0; i<ds_list_size(inv); i++){
var btn = instance_create_depth(32 + (w*96), 32 + (h*96), 0, obj_button);
btn.item_id = inv[| i];
btn.inv_id = i;
w++;
if (w >= (floor(window_get_width()/96))){
w = 0; h++;
//assegna il valore dell'elemento e l'indice degli elementi dell'elenco al pulsante
//passa alla riga successiva se quella corrente è piena:
}
}
}
else
//rimuove tutti gli oggetti se si rispinge esc
if (instance_exists(obj_button)){
with (obj_button) instance_destroy();
}
Create
Codice: Seleziona tutto
//quando si crea la tabella deve essere sopra tutto
depth =-1005
Codice: Seleziona tutto
//effetto del passaggio del mouse sopra l'oggetto:
if (position_meeting(mouse_x, mouse_y, id)) image_alpha = 0.4;
else image_alpha = 1;
//fai qualcosa se il mouse è sopra l'oggetto e clicchi lo slot:
if (position_meeting(mouse_x, mouse_y, id) && mouse_check_button_pressed(mb_left)){
if (item_id =="motore") { //estrae dell'inventario o fa qualche azione
}
ds_list_delete(inv, inv_id);
//rimuove l'oggetto dalla lista inventario
//disattiva il menù e distrugge i pulasanti:
if (instance_exists(obj_button)) with (obj_button) instance_destroy();
obj_menu.active = false;
}
Codice: Seleziona tutto
draw_self();
draw_sprite(asset_get_index("spr_" + item_id), 0, x + 32, y + 32);
Con questo codice tutto funziona perfettamente spingo esc e mi crea solamente gli slot riempiti rispingo il tasto esc e tutto scompare.
Se invece voglio l'inventario sia presente nella room sin da subito senza la possibilità di attivarlo e disattivarlo con il tasto esc, la stanza inizia a creare slot infiniti.
Il problema è ovviamente nel Draw guy dell'obj_menu , ovviamente devo apportare alcune modifche per fare in maniera che l'inventario sia sempre presente nel gioco. tolgo dal create la variaible che permette di attivare/disattivare l'inventario, nel draw guy tolgo il comando del tasto esc e modifico le dovute parentesi.
in questo modo però rimane il ciclo for che va in loop e crea queste slot vuote infinite.
Come faccio a fermare il ciclo for quando finscono le slot occupate?
Credo sia una cosa semplice, ma sono entrato nel pallone
