Collisioni e controllo variabili

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Gmdiscover
Newbie
Messaggi: 3
Iscritto il: 30/04/2019, 6:31
Specialità: Grafico
Contatta:

Collisioni e controllo variabili

Messaggio da Gmdiscover »

Buon giorno a tutti

Da non molto sto cercando di imparare ad usare questo fantastico programma e mi trovo di fronte ad un problema che da giorni non riesco a risolvere :furioso: :furioso:

In una room ho 3 oggetti :

2 istanze : obj0, 1 istanza : obj1, 1 istanza : obj 2

In sostanza la questione e' questa, obj0 ha una variabile busy = 0 ,quando obj1 collide controlla il valore della variabile busy , se = 0 non fa nulla , se = ad 1 avvia un loop di sprites. e questo funziona .....

Il problema si pone con la collisione tra obj2 ed obj0, in teoria vorrei fargli cambiare la variabile solo all'obj0 che entra in collisione ma me li cambia in automatico tutti e due .

So che basterebbe che spostassi il controllo di collisione su obj0 per farlo ma vorrei capire come funziona questa funzione ( scusate il gioco di parole ) ... mi sono un po intestardito

obj0 ha questi valori :
CREATE : image_speed = 0
busy = 0



obj1 ha questi valori :
CREATE : image_speed = 0
global.moove = 0

STEP : if global.moove = 1
{x +=2}
if place_meeting(x,y,object0)
{ instance_place(x,y,object0) }
if object0.busy == 1 && place_meeting(x,y,object0)
{ image_speed = 1 }
else
{image_speed = 0 }

MOUSE LEAVE : global.moove = 1

obj2 ha questi valori :
CREATE : global.start = 1

STEP : if global.start = 1
{y -=1}
if place_meeting(x,y,object0)
{ object0.busy =1 }

MOUSE LEAVE : global.start = 1

Dove sbaglio :piagne: :piagne: :piagne: :piagne: :piagne:

Avatar utente
doom13
Moderatore
Messaggi: 2093
Iscritto il: 31/08/2012, 15:40
Specialità: Programmazione
Uso: GM:Studio 2
Contatta:

Re: Collisioni e controllo variabili

Messaggio da doom13 »

Ciao, quando fai object0.busy = 0 stai settando a 0 la variabile busy di tutte le istanze di object0.
Per risolvere come vorresti fare tu, devi ottenere l'id dell'istanza con cui collidi e quindi settare la variabile di quella precisa istanza.

Per farlo ti conviene sostituire place_meeting (quello che sta in step di obj2) con instance_place, il valore ritornato da questa funzione è -4 (noone) se non ha rilevato collisioni, altrimenti ritorna proprio l'id dell'istanza. Quindi ti salvi il valore ritornato, controlli che non sia uguale a -4 e fai variabile_col_valore_ritornato.busy = 1.

Spero di essere stato abbastanza chiaro, se hai altri dubbi ovviamente scrivi qua oppure fai un salto sul discord che è anche più immediato :cappa:
Immagine
Spoiler
Maze [sospeso]
Isom (titolo provvisorio) (Windows & Android) [sospeso]
Keep Calm & Jump (Android) [In corso]
The Graywall (Windows) [Completo]
DTB (Windows & Android) [Completo]
The Last Spell (Windows) [Completo]
Dukenstein: Return to the house (Windows) [Completo]
DMSystem (Windows) [Completo]
"Things get hard sometimes guys... But remember, dicks get hard too, but they don't stay hard forever. Don't give up!"

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 35 ospiti