Speng
Membro
Messaggi: 166
Iscritto il: 27/04/2006, 22:10
Uso: GM:Studio 2
Località: Aprilia (LT)
Contatta:

leggere variabili in altre istanze... si può?

Messaggio da Speng »

saaaaaalve ragassuoli, ho un problemino (che novità, eh? :P )

Non riesco a far in modo che una determinata istanza vada a leggere la variabile di un altra istanza. Il problema risiede nel fatto che utilizzo sempre lo stesso oggetto, mi spiego meglio:

Ho un oggetto chiamato "oggetto1" e la variabile di questo è "var1".
Quando creo 2 di questi oggetti e li metto vicini, il primo deve leggere la variabile del secondo x vedere se è giusta, nel caso che l'oggetto1 si ritrova in mezzo a 2 oggetto1 dovrà leggere le var1 di entrambi.

Visto che l'oggetto è sempre lo stesso non posso utilizzare oggetto1.var1 in quanto ce ne sono parecchi di oggetto1, avevo pensato di usare il comando "with" ma questo non funzionerebbe in quanto semplicemente si interfaccia su un diverso oggetto e lavora su quello. Mi ci sono scervellato x giorni, ma ancora non trovo una risposta... mi potreste aiutare x favore? :)
bOOh studios >> http://boohstudios.altervista.org/ <<
Immagine
GIOCHI IN LAVORAZIONE: Space Star (new version)
sggsoftware
Membro
Messaggi: 178
Iscritto il: 01/07/2007, 15:09
Uso: GM:Studio 2
Località: Sicilia
Contatta:

Re: leggere variabili in altre istanze... si può?

Messaggio da sggsoftware »

Speng ha scritto:saaaaaalve ragassuoli, ho un problemino (che novità, eh? :P )

Non riesco a far in modo che una determinata istanza vada a leggere la variabile di un altra istanza. Il problema risiede nel fatto che utilizzo sempre lo stesso oggetto, mi spiego meglio:

Ho un oggetto chiamato "oggetto1" e la variabile di questo è "var1".
Quando creo 2 di questi oggetti e li metto vicini, il primo deve leggere la variabile del secondo x vedere se è giusta, nel caso che l'oggetto1 si ritrova in mezzo a 2 oggetto1 dovrà leggere le var1 di entrambi.

Visto che l'oggetto è sempre lo stesso non posso utilizzare oggetto1.var1 in quanto ce ne sono parecchi di oggetto1, avevo pensato di usare il comando "with" ma questo non funzionerebbe in quanto semplicemente si interfaccia su un diverso oggetto e lavora su quello. Mi ci sono scervellato x giorni, ma ancora non trovo una risposta... mi potreste aiutare x favore? :)
Sì, il problema si può risolvere con le due funzioni instance_number(obj) e instance_find(obj, n).

instance_number(obj) ritorna il conteggio degli oggetti di tipo obj
instance_find(obj, n) restituisce l'id dell'istanza numero n di tipo obj

Per esempio: se hai 2 oggetti oggetto1 nella room, instance_number(oggetto1) torna 2 come risultato (conteggio), mentre instance_find(oggetto1,0) e instance_find(oggetto1,1) restituiscono gli id rispettivamente del primo e del secondo oggetto1.

Nel tuo caso, qualcosa del genere dovrebbe andar bene:

Codice: Seleziona tutto

var conteggio,i,ret_id;
conteggio=instance_number(oggetto1); // calcola il numero di oggetti di tipo oggetto1
for (i=0;i<conteggio;i++) // esamina uno per uno i vari oggetti di tipo oggetto1
{
    ret_id=instance_find(oggetto1,i); // ottiene l'id dell'oggetto numero i di tipo oggetto1
    if (ret_id==id) continue; // se l'id trovato coincide con l'oggetto dal quale viene eseguito il codice, passa all'oggetto successivo
    [qui dovrai fare i vari controlli di posizione]
}
Questo è solo un esempio generale, per illustrarti un possibile modo di come utilizzare queste due funzioni. Nello specifico, dovrai scrivere codice opportuno.
Speng
Membro
Messaggi: 166
Iscritto il: 27/04/2006, 22:10
Uso: GM:Studio 2
Località: Aprilia (LT)
Contatta:

Re: leggere variabili in altre istanze... si può?

Messaggio da Speng »

uhm... credo di aver dimenticato un dettaglio. L'oggetto che uso è sempre lo stesso perciò con quel codice andrebbe a riconoscere solo se stesso, mentre a me serve che l'oggetto controlli solamente gli oggetti vicini a lui (sopra,sotto,des e sin) e non tutti quelli della room... Il fatto è che conteggia tutti gli oggetti (anche quelli lontani) ma ci sono oggetti con la var1 diversa e quelli non devono essere controllati. In pratica il gioco ricorda jewel (qualcuno lo conosce sicuramente) e questo codice mi serve quando l'oggetto si posiziona e deve vedere se ottiene dei tris in modo da cancellare i 3 mattoni che hanno in comune il simbolo (cioè la var1) altrimenti rimangono lì. (spero di essere stato chiaro ;) )

Non ci sarebbe invece un metodo per il quale dando x e y di un oggetto, mi venga restituita l'id? sarebbe perfetto x il mio problema!
Mi basterebbe dirgli di cotrollare prima la posizione, poi controllo l'id.var1==var1 e il gioco è fatto. (faccio un salto sul manuale... :P )

NOTA: cmq il tuo codice mi ha fatto venire in mente un bella ideona, ne farò buon uso! thx! :D
bOOh studios >> http://boohstudios.altervista.org/ <<
Immagine
GIOCHI IN LAVORAZIONE: Space Star (new version)
sggsoftware
Membro
Messaggi: 178
Iscritto il: 01/07/2007, 15:09
Uso: GM:Studio 2
Località: Sicilia
Contatta:

Re: leggere variabili in altre istanze... si può?

Messaggio da sggsoftware »

Speng ha scritto:uhm... credo di aver dimenticato un dettaglio. L'oggetto che uso è sempre lo stesso perciò con quel codice andrebbe a riconoscere solo se stesso
Forse mi sono spiegato male.

Codice: Seleziona tutto

var conteggio,i,ret_id;
conteggio=instance_number(oggetto1); // calcola il numero di oggetti di tipo oggetto1
for (i=0;i<conteggio;i++) // esamina uno per uno i vari oggetti di tipo oggetto1
{
    ret_id=instance_find(oggetto1,i); // ottiene l'id dell'oggetto numero i di tipo oggetto1
    if (ret_id==id) continue; // se l'id trovato coincide con l'oggetto dal quale viene eseguito il codice, passa all'oggetto successivo
    [...]
}
Il codice che ho scritto serve ad analizzare uno ad uno oggetti dello stesso tipo (in questo caso oggetti di tipo oggetto1, volendo è possibile cambiare il tipo di oggetto da esaminare) presenti nella room, escluso l'oggetto dal quale viene eseguito il codice (quindi non può riconoscere sé stesso). Per ogni iterazione del for, la variabile ret_id punterà di volta in volta a un oggetto diverso, e sarà possibile accedere ai vari campi di quest'oggetto nel modo seguente:

Codice: Seleziona tutto

ret_id.x=2;
if (ret_id.var1==2) [...]
Per un gioco del genere comunque non ha senso fare una ricerca di quel tipo: usa invece le potenti funzioni instance_place e instance_position (cercale sulla guida!). Posta se hai altre domande. ;)
Speng
Membro
Messaggi: 166
Iscritto il: 27/04/2006, 22:10
Uso: GM:Studio 2
Località: Aprilia (LT)
Contatta:

Re: leggere variabili in altre istanze... si può?

Messaggio da Speng »

Si si, infatti proprio mentre rispondevo ho notato quete 2 stringhe. Di solito non lavoro molto con le id perciò non mi venivano in mente, ma ora ne farò buon uso, thx! :)
bOOh studios >> http://boohstudios.altervista.org/ <<
Immagine
GIOCHI IN LAVORAZIONE: Space Star (new version)