distruggere tre oggetti differenti contemporaneamente
distruggere tre oggetti differenti contemporaneamente
salve ragazzi,
sto cercando di creare una specie di Tetris con le carte a gioco.
In pratica quando le carte scendono giù, se si forma una scala di minimo 3 carte o con 3 carte dello stesso valore le tre carte devono distruggersi.
Esempio pratico:
Scende giù il quattro, poi scende il cinque che posiziono accanto al quattro, poi scede il sei che piazzo accanto al cinque.
In questo modo le tre carte devono distruggersi.
Non ho idea però in che modo distruggere tre oggetti differenti che collidono tra di essi.
Avete qualche suggerimento su come procedere?
sto cercando di creare una specie di Tetris con le carte a gioco.
In pratica quando le carte scendono giù, se si forma una scala di minimo 3 carte o con 3 carte dello stesso valore le tre carte devono distruggersi.
Esempio pratico:
Scende giù il quattro, poi scende il cinque che posiziono accanto al quattro, poi scede il sei che piazzo accanto al cinque.
In questo modo le tre carte devono distruggersi.
Non ho idea però in che modo distruggere tre oggetti differenti che collidono tra di essi.
Avete qualche suggerimento su come procedere?
- CaptainOlon
- Membro attivo
- Messaggi: 441
- Iscritto il: 30/07/2011, 14:56
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Salerno
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
Un'idea:
Ogni carta posizionata la metti in una grid. Ogni volta che aggiungi una carta in una certa posizione, si controllano le 4 caselle adiacenti ad essa, e per ogni carta che soddisfa determinate condizioni (è uguale alla carta che hai posizionato? è in sequenza alla carta che hai posizionato? e così via..) controlli similmente le 4 caselle adiacenti, tranne ovviamente quella da cui provieni. Potresti fare questo con la ricorsione, ovvero uno script che richiama se stesso. Ovviamente devi salvare in qualche variabile se stai controllando una sequenza o carte uguali, ecc. E salvare di volta in volta la posizione delle caselle che poi alla fine dei controlli dovrai eliminare.
Ogni carta posizionata la metti in una grid. Ogni volta che aggiungi una carta in una certa posizione, si controllano le 4 caselle adiacenti ad essa, e per ogni carta che soddisfa determinate condizioni (è uguale alla carta che hai posizionato? è in sequenza alla carta che hai posizionato? e così via..) controlli similmente le 4 caselle adiacenti, tranne ovviamente quella da cui provieni. Potresti fare questo con la ricorsione, ovvero uno script che richiama se stesso. Ovviamente devi salvare in qualche variabile se stai controllando una sequenza o carte uguali, ecc. E salvare di volta in volta la posizione delle caselle che poi alla fine dei controlli dovrai eliminare.
- SP Games
- Membro
- Messaggi: 241
- Iscritto il: 27/06/2014, 11:21
- Specialità: Programmer
- Uso: GM:Studio 1.4 Pro
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
In un oggetto che fa da controller setti una variabile che verifica lo stato della collisione :
COLLISIONE_SI_NO=0
Negli oggetti che collidono dentro all'evento collisione metti questo pseudocodice :
if COLLISIONE_SI_NO=0 then {
SAVE_ID_1=ID
SAVE_ID_2=OTHER.ID
COLLISIONE_SI_NO=1
}
else {
COLLISIONE_SI_NO=0
DESTROY_OBJ(SAVE_ID_1)
DESTROY_OBJ(SAVE_ID_2)
if ID!=SAVE_ID_1 AND ID!=SAVE_ID_2 then DESTROY_OBJ(ID) else DESTROY_OBJ(OTHER.ID)
}
COLLISIONE_SI_NO=0
Negli oggetti che collidono dentro all'evento collisione metti questo pseudocodice :
if COLLISIONE_SI_NO=0 then {
SAVE_ID_1=ID
SAVE_ID_2=OTHER.ID
COLLISIONE_SI_NO=1
}
else {
COLLISIONE_SI_NO=0
DESTROY_OBJ(SAVE_ID_1)
DESTROY_OBJ(SAVE_ID_2)
if ID!=SAVE_ID_1 AND ID!=SAVE_ID_2 then DESTROY_OBJ(ID) else DESTROY_OBJ(OTHER.ID)
}
I miei giochi :
Super Chef World : https://play.google.com/store/apps/deta ... MarioWorld
Neon Marble : https://play.google.com/store/apps/deta ... NeonMarble
Super Chef World : https://play.google.com/store/apps/deta ... MarioWorld
Neon Marble : https://play.google.com/store/apps/deta ... NeonMarble
Re: distruggere tre oggetti differenti contemporaneamente
è una idea che mi piace. Non ho mai usato le griglie è un buon modo per provare ed imparare grazie per l'idea. Inoltre penso mi permetterà con facilità di distruggere gli oggetti che siano allineati orizzontalmente o verticalmente o obliqui.
Un'idea:
Ogni carta posizionata la metti in una grid. Ogni volta che aggiungi una carta in una certa posizione, si controllano le 4 caselle adiacenti ad essa, e per ogni carta che soddisfa determinate condizioni (è uguale alla carta che hai posizionato? è in sequenza alla carta che hai posizionato? e così via..) controlli similmente le 4 caselle adiacenti, tranne ovviamente quella da cui provieni. Potresti fare questo con la ricorsione, ovvero uno script che richiama se stesso. Ovviamente devi salvare in qualche variabile se stai controllando una sequenza o carte uguali, ecc. E salvare di volta in volta la posizione delle caselle che poi alla fine dei controlli dovrai eliminare.
Quanta grazia il codice già fatto.....però nella mia ignoranza non ho capito il codice...provo a commentare e sostituire i vari id con tre oggetti chiamati rispettivamente due, tre, quattro.
In un oggetto che fa da controller setti una variabile che verifica lo stato della collisione :
COLLISIONE_SI_NO=0
Negli oggetti che collidono dentro all'evento collisione metti questo pseudocodice :
if COLLISIONE_SI_NO=0 then {
SAVE_ID_1=ID
SAVE_ID_2=OTHER.ID
COLLISIONE_SI_NO=1
}
else {
COLLISIONE_SI_NO=0
DESTROY_OBJ(SAVE_ID_1)
DESTROY_OBJ(SAVE_ID_2)
if ID!=SAVE_ID_1 AND ID!=SAVE_ID_2 then DESTROY_OBJ(ID) else DESTROY_OBJ(OTHER.ID)
}
CODICE DELL'OGGETTO TRE:
Codice: Seleziona tutto
COLLISIONE_SI_NO=0 // Perché questa variabile va in un oggetto controllore e non nel create di ogni oggetto?
Codice: Seleziona tutto
if COLLISIONE_SI_NO=0 then { //se l'oggetto ha la variabile collisione 0.....
SAVE_ID_1=tre // save_id_1 è l'oggetto tre
SAVE_ID_2=OTHER.quattro //save_id_1 è l'oggetto quattro
COLLISIONE_SI_NO=1 // la variabile collisone diventa 1
}
else { // se l'oggetto ha la variabile collisione 1....
COLLISIONE_SI_NO=0 //l'oggetto collisione diventa 0
DESTROY_OBJ(SAVE_ID_1) // distruggi l'oggetto tre (devo sostituitre DESTROY_OBJ con instance_destroy() ?)
DESTROY_OBJ(SAVE_ID_2) // distruggi l'oggetto quattro(devo sostituitre DESTROY_OBJ con instance_destroy() ?)
if ID!=SAVE_ID_1 AND ID!=SAVE_ID_2 then DESTROY_OBJ(tre) else DESTROY_OBJ(OTHER.quattro) //non ho capito cosa possa servire questo pezzo
}
Poi fare la stessa cosa con gli altri due oggetti.
Come vedete non ho capito molto.....
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
Evita di chiamare le variabili con nomi tutti in caps, perchè comunemente se è tutto in caps pensi subito che è una costante, e non una variabile, ma sto divagando...
EDIT:
Per instance_destroy() devi fare
EDIT:
Per instance_destroy() devi fare
Codice: Seleziona tutto
with id instance_destroy(); //Sostituisci id con l'id della tua istanza.
- Vallo92
- GMI Advanced
- Messaggi: 1508
- Iscritto il: 15/07/2011, 20:26
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
Forse ho anche io un idea per risolvere il tuo problema. Una domanda però: In che modo distingui e gestisci le carte. Sono il solito obj con soltanto lo sprite diverso o sono obj singoli per ogni carta?
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si
- SP Games
- Membro
- Messaggi: 241
- Iscritto il: 27/06/2014, 11:21
- Specialità: Programmer
- Uso: GM:Studio 1.4 Pro
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
Il mio codice si riferisce alla collisione di 3 oggetti, se serve valutare un numero N di oggetti che possono collidere quel codice ovviamente non va bene
I miei giochi :
Super Chef World : https://play.google.com/store/apps/deta ... MarioWorld
Neon Marble : https://play.google.com/store/apps/deta ... NeonMarble
Super Chef World : https://play.google.com/store/apps/deta ... MarioWorld
Neon Marble : https://play.google.com/store/apps/deta ... NeonMarble
Re: distruggere tre oggetti differenti contemporaneamente
Ho optato per Singoli obj per ogni carta.Forse ho anche io un idea per risolvere il tuo problema. Una domanda però: In che modo distingui e gestisci le carte. Sono il solito obj con soltanto lo sprite diverso o sono obj singoli per ogni carta?
Si, è l'unica cosa che avevo capito del codice
Il mio codice si riferisce alla collisione di 3 oggetti, se serve valutare un numero N di oggetti che possono collidere quel codice ovviamente non va bene
- Vallo92
- GMI Advanced
- Messaggi: 1508
- Iscritto il: 15/07/2011, 20:26
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
Ok, nel caso ti servisse ancora domani sera ti posto il metodo che ho pensato. Nel caso puoi usarlo come base per lavorarci.
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si
Re: distruggere tre oggetti differenti contemporaneamente
Postalo pure grazie.
Ok, nel caso ti servisse ancora domani sera ti posto il metodo che ho pensato. Nel caso puoi usarlo come base per lavorarci.
Mi piacerebbe dargli un'occhiata.
- Vallo92
- GMI Advanced
- Messaggi: 1508
- Iscritto il: 15/07/2011, 20:26
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
Ho avuto qualche problemino, e non sono riuscito a buttare giù nessuna linea di codice.
Posso però dirti che il metodo che avevo pensato utilizzava il sistema della ricorsione (come ti ha suggerito anche Captain.
QUI trovi una discussione che aprii qualche anno fa per risolvere un problema simile al tuo. Tramite il metodo della ricorsione (senza l'utilizza di griglie visto che gli oggetti si disponevano già in una precisa posizione) riuscimmo a risolvere tutto.
Prova a dare un occhiata. Riuscirai sicuramente a capire come e cosa dovrai fare!
Posso però dirti che il metodo che avevo pensato utilizzava il sistema della ricorsione (come ti ha suggerito anche Captain.
QUI trovi una discussione che aprii qualche anno fa per risolvere un problema simile al tuo. Tramite il metodo della ricorsione (senza l'utilizza di griglie visto che gli oggetti si disponevano già in una precisa posizione) riuscimmo a risolvere tutto.
Prova a dare un occhiata. Riuscirai sicuramente a capire come e cosa dovrai fare!
-Questi occhiali da sole le stanno benissimo. Vuole provarli con le lenti più scure?
- Si vede che le sto guardando le tette?
- Si
- Allora si
Re: distruggere tre oggetti differenti contemporaneamente
Grazie.Ho avuto qualche problemino, e non sono riuscito a buttare giù nessuna linea di codice.
Posso però dirti che il metodo che avevo pensato utilizzava il sistema della ricorsione (come ti ha suggerito anche Captain.
QUI trovi una discussione che aprii qualche anno fa per risolvere un problema simile al tuo. Tramite il metodo della ricorsione (senza l'utilizza di griglie visto che gli oggetti si disponevano già in una precisa posizione) riuscimmo a risolvere tutto.
Prova a dare un occhiata. Riuscirai sicuramente a capire come e cosa dovrai fare!
proverò ad adattarlo al mio caso
Re: distruggere tre oggetti differenti contemporaneamente
Vallo, ho dato uno sguardo alla discussione che mi hai suggerito.
Ho preso il tuo link ed ho fatto semplicemente copia ed incolla per vedere se funzionava, poi l'avrei adattato al mio caso.
però non funziona...
in create ho inserito:
Nella collisione dei due oggetti con cui dovrebbe sparire:
lo scirpt:
nello step:
Ho preso il tuo link ed ho fatto semplicemente copia ed incolla per vedere se funzionava, poi l'avrei adattato al mio caso.
però non funziona...
in create ho inserito:
Codice: Seleziona tutto
hp=2
Codice: Seleziona tutto
var list = ds_list_create();
scr_dannoblocchi(id,list);
ds_list_destroy(list);
lo scirpt:
Codice: Seleziona tutto
argument0.hp-=1;
ds_list_add(argument1,argument0);
//Collisione destra
dx=instance_position(x+32,y,argument0.object_index);
if (instance_exists(dx) && ds_list_find_index(argument1,dx)<0)
{
if (argument0.object_index==dx.object_index)
{
scr_dannoblocchi(dx,argument1);
}
}
//Collisione sinistra
sx=instance_position(x-32,y,argument0.object_index);
if (instance_exists(sx) && ds_list_find_index(argument1,sx)<0)
{
if (argument0.object_index==sx.object_index)
{
scr_dannoblocchi(sx,argument1);
}
}
//Collisione su
su=instance_position(x,y-32,argument0.object_index);
if (instance_exists(su) && ds_list_find_index(argument1,su)<0)
{
if (argument0.object_index==su.object_index)
{
scr_dannoblocchi(su,argument1);
}
}
//Collisione giu
giu=instance_position(x,y+32,argument0.object_index);
if (instance_exists(giu) && ds_list_find_index(argument1,giu)<0)
{
if (argument0.object_index==giu.object_index)
{
scr_dannoblocchi(giu,argument1);
}
}
Codice: Seleziona tutto
if hp =0
{instance_destroy()}
-
- GMI Advanced
- Messaggi: 2093
- Iscritto il: 19/12/2010, 16:17
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Standard
- Contatta:
Re: distruggere tre oggetti differenti contemporaneamente
Cosa non funziona? dire che non funziona non serve a niente... Inoltre ti consiglio di Indentare il codice, perché personalmente non lo leggo nemmeno un codice non indentato...
♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥
Spoiler
Re: distruggere tre oggetti differenti contemporaneamente
Scusatemi, cercherò di essere più preciso.
Non funziona...nel senso che il tutto dovrebbe distruggere i 3 oggetti se sono in contatto tra loro, ma quando collidono non succede proprio nulla....
i tre oggetti non si distruggono ed il gioco continua come se niente fosse.
Ho guardato con il debug e la variabile hp=2 del create quando gli oggetti collidono non diminuisce, è come se lo script non esistesse.
Riposto il codice indentato (ringrazio per la spiegazione del significato della parola):
in create:
Nella collisione dei due oggetti con cui dovrebbe sparire:
Lo scirpt(chiamato scr_dannoblocchi):
in step:
Non funziona...nel senso che il tutto dovrebbe distruggere i 3 oggetti se sono in contatto tra loro, ma quando collidono non succede proprio nulla....
i tre oggetti non si distruggono ed il gioco continua come se niente fosse.
Ho guardato con il debug e la variabile hp=2 del create quando gli oggetti collidono non diminuisce, è come se lo script non esistesse.
Riposto il codice indentato (ringrazio per la spiegazione del significato della parola):
in create:
Codice: Seleziona tutto
hp=2
Codice: Seleziona tutto
var list = ds_list_create();
scr_dannoblocchi(id,list);
ds_list_destroy(list);
Codice: Seleziona tutto
argument0.hp-=1;
ds_list_add(argument1,argument0);
//Collisione destra
dx=instance_position(x+32,y,argument0.object_index);
if (instance_exists(dx) && ds_list_find_index(argument1,dx)<0)
{
if (argument0.object_index==dx.object_index)
{
scr_dannoblocchi(dx,argument1);
}
}
//Collisione sinistra
sx=instance_position(x-32,y,argument0.object_index);
if (instance_exists(sx) && ds_list_find_index(argument1,sx)<0)
{
if (argument0.object_index==sx.object_index)
{
scr_dannoblocchi(sx,argument1);
}
}
//Collisione su
su=instance_position(x,y-32,argument0.object_index);
if (instance_exists(su) && ds_list_find_index(argument1,su)<0)
{
if (argument0.object_index==su.object_index)
{
scr_dannoblocchi(su,argument1);
}
}
//Collisione giu
giu=instance_position(x,y+32,argument0.object_index);
if (instance_exists(giu) && ds_list_find_index(argument1,giu)<0)
{
if (argument0.object_index==giu.object_index)
{
scr_dannoblocchi(giu,argument1);
}
}
in step:
Codice: Seleziona tutto
if hp =0
{
instance_destroy()
}
Chi c’è in linea
Visitano il forum: Bing [Bot] e 48 ospiti