icosist
Newbie
Messaggi: 12
Iscritto il: 21/06/2011, 18:09
Specialità: Programmazione
Contatta:

Problema con instance_position

Messaggio da icosist »

Salve! Pensavo di utilizzare la funzione instance_position per selezionare oggetti col mouse. Il problema si pone nel caso di oggetti sovrapposti: la funzione restituisce l'id dell'oggetto che sta sotto gli altri, mentre invece l'utente dovrebbe poter selezionare quello in primo piano. Consigli?

Ringrazio in anticipo!
Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: Problema con instance_position

Messaggio da gameplay_extreme »

non so rispondere alla domanda, però tempo fa avevo provato a fare un esperimento riguardo al selezionare e trascinare. Gia che ci sono posto il gmk (anzi il gm6).
http://giochi2.webatu.com/animazioni/Ca ... nimato.gm6
ps: spero si capisca bene (anche se ho i miei dubbi...).

edit: nuovo link http://giochi3.altervista.org/animazion ... nimato.gm6
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)
Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: Problema con instance_position

Messaggio da Homunculus »

Purtroppo una soluzione semplice non esiste perché le funzioni integrate non ti permettono di ottenere una lista di istanze in un punto preciso.
Sappiamo però due cose:

- Gli oggetti con depth minore vengono disegnati sopra ad oggetti con depth maggiore
- Nel caso la depth sia uguale, vengono presi in considerazione gli id (se non sbaglio le istanze con id maggiore vengono disegnate sopra a istanze con id minore, sarebbe da provare)

La soluzione quindi é passare in rassegna con un ciclo tutte le istanze e verificare (sempre con instance_position) quali si trovano alle coordinate del mouse. In seguito prendere tra quelle l'istanza con depth minore e eventualmente id maggiore nel caso di depth uguali.
icosist
Newbie
Messaggi: 12
Iscritto il: 21/06/2011, 18:09
Specialità: Programmazione
Contatta:

Re: Problema con instance_position

Messaggio da icosist »

Buona l'idea del ciclo! Ho risolto facendo una semplice ricerca all'inverso:

Codice: Seleziona tutto

c=instance_number(pezzo);
for (i=c-1;i>=0;i-=1) {
    ref=instance_find(pezzo,i);
    if (position_meeting(mouse_x,mouse_y,ref)) {
        [...]
    }
}
Nel mio caso la soluzione era più semplice, in quanto gli oggetti vengono creati dinamicamente durante il gioco e hanno la stessa depth (quindi quelli che stanno davanti sono gli ultimi).