Inventario crea slot infinite

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
sfigatto
Membro
Messaggi: 227
Iscritto il: 18/04/2014, 23:20
Uso: GM:Studio 1.4 Pro
Contatta:

Inventario crea slot infinite

Messaggio da sfigatto »

Ho un inventario che funziona abbastanza bene, se non fosse per un "piccolo "problema.Crea slot vuote all'infinito.
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);


step

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;

Draw Guy

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();
}

obj_button

Create

Codice: Seleziona tutto

//quando si crea la tabella deve essere sopra tutto
depth =-1005

Step

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;
}

draw

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 :)

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: Inventario crea slot infinite

Messaggio da civic71 »

Ma l'oggetto "obj_menu" è stato inserito nella room prima dell oggetto "obj_player" ?

Avatar utente
sfigatto
Membro
Messaggi: 227
Iscritto il: 18/04/2014, 23:20
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Inventario crea slot infinite

Messaggio da sfigatto »

civic71 ha scritto:Ma l'oggetto "obj_menu" è stato inserito nella room prima dell oggetto "obj_player" ?
si certamente, l'"obj_menu" è inserito nella room prima dell'oggettp "obj_player"

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: Inventario crea slot infinite

Messaggio da civic71 »

E quindi non dovrebbe essere l' oggetto "obj_menu" ad avere nel create :

Codice: Seleziona tutto

globalvar inv;
inv = ds_list_create();

Avatar utente
sfigatto
Membro
Messaggi: 227
Iscritto il: 18/04/2014, 23:20
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Inventario crea slot infinite

Messaggio da sfigatto »

Si, hai ragione.
In realtà credo che cambi poco perchè sia l'"obj_menu e "obj_player" sono presenti sin da subito nella stanza,
ma per non creare confusione è meglio metterlo nell'"obj_menu".

Rispondi

Chi c’è in linea

Visitano il forum: Google [Bot] e 43 ospiti