Chiedo aiuto su come distruggere 3 blocchi in linea

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

Ciao a tutti, essendo un principiante, molto principiante, vorrei chiedere se qualcuno possa aiutarmi a realizzare quello che ho scritto nel titolo.
Ciò che sto realizzando è molto simile ad un gioco match 3 (allineare 3 o più blocchi in orizzontale e 3 o più blocchi in verticale e distruggerli) solamente che non riesco a capire fino in fondo la procedura e dove sbaglio.
Ho creato un oggetto o_block (32x32), che è quello che si dovrà distruggere se allineato orizzontalmente e/o verticalmente con 3 o più o_block dello stesso colore.
Premendo le frecce direzionali o_block si sposta nelle direzioni x, y.
Per fare in modo che trovi o_block identici a lui ho pensato di fare così...
o_block in create event esegue il seguente script:

Codice: Seleziona tutto

global.match=0
image_index.destra = 0   //corrisponde al blocco della stessa immagine a destra (o_block.x+32)
image_index.destra2 = 0 //corrisponde al blocco della stessa immagine a destra (o_block.x+64)
image_index.giu = 0 // corrisponde al blocco della stessa immagine in basso a (o_block.y-32)
image_index.giu2 = 0 // corrisponde al blocco della stessa immagine in basso  (o_block.y-64)

o_block in step esegue:

Codice: Seleziona tutto

global.match=false
with (o_block){  
    if instance_place(x+32,y,image_index.destra) and instance_place(x+64,y,image_index.destra2) and (image_index.destra==image_index.destra2) and (image_index==image_index.destra){
        global.match=true;
        with(o_block){
            instance_destroy()
            }
        }
    }
with (o_block)
    {  
    if instance_place(x,y+32,image_index.giu) and instance_place(x,y+64,image_index.giu2) and (image_index.giu==image_index.giu2.image_index) and (image_index==image_index.giu) {
        global.match=true
         with(o_block){
            instance_destroy()
            }
    }
}
Vorrei che la distruzione avvenisse quando tutti gli o_block di qualsiasi colore siano fermi ma credo che con una variabile che regoli la velocità dovrei risolvere...
Spero che qualcuno possa aiutarmi! Grazie
Se ci dovessero essere dei dubbi domandate pure!

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Vallo92 »

Leggiti interamente questa vecchia discussione che aprii. Puoi utilizzare lo stesso sistema per risolvere il tuo problema! ;)
-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

Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

Scusa ma non vedo nessun link o riferimento della discussione di cui parli

Forse intendi questa? http://gmitalia.altervista.org/gmi_foru ... 7&start=40 però devo ammettere che l'avevo già notata e seguita ma senza nessun risultato...ora provo a riguardarla così ti so dire cosa non mi è stato chiaro in precedenza! Con index_ indico un oggetto ben preciso fra tanti giusto oppure ho capito male?

Avatar utente
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: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Wolfrost »

Lavecchia ha scritto:Ciao a tutti, essendo un principiante, molto principiante, vorrei chiedere se qualcuno possa aiutarmi a realizzare quello che ho scritto nel titolo.
Ciò che sto realizzando è molto simile ad un gioco match 3 (allineare 3 o più blocchi in orizzontale e 3 o più blocchi in verticale e distruggerli) solamente che non riesco a capire fino in fondo la procedura e dove sbaglio.
Ho creato un oggetto o_block (32x32), che è quello che si dovrà distruggere se allineato orizzontalmente e/o verticalmente con 3 o più o_block dello stesso colore.
Premendo le frecce direzionali o_block si sposta nelle direzioni x, y.
Per fare in modo che trovi o_block identici a lui ho pensato di fare così...
o_block in create event esegue il seguente script:

global.match=0
image_index.destra = 0 //corrisponde al blocco della stessa immagine a destra (o_block.x+32)
image_index.destra2 = 0 //corrisponde al blocco della stessa immagine a destra (o_block.x+64)
image_index.giu = 0 // corrisponde al blocco della stessa immagine in basso a (o_block.y-32)
image_index.giu2 = 0 // corrisponde al blocco della stessa immagine in basso (o_block.y-64)


o_block in step esegue:

global.match=false
with (o_block){
if instance_place(x+32,y,image_index.destra) and instance_place(x+64,y,image_index.destra2) and (image_index.destra==image_index.destra2) and (image_index==image_index.destra){
global.match=true;
with(o_block){
instance_destroy()
}
}
}
with (o_block)
{
if instance_place(x,y+32,image_index.giu) and instance_place(x,y+64,image_index.giu2) and (image_index.giu==image_index.giu2.image_index) and (image_index==image_index.giu) {
global.match=true
with(o_block){
instance_destroy()
}
}
}

Vorrei che la distruzione avvenisse quando tutti gli o_block di qualsiasi colore siano fermi ma credo che con una variabile che regoli la velocità dovrei risolvere...
Spero che qualcuno possa aiutarmi! Grazie
Se ci dovessero essere dei dubbi domandate pure!
Ti do un consiglio: usa la funzione code per fare un codice più bello da leggere tipo:

Codice: Seleziona tutto

[code]//Qui il tuo codice
[/code]
Immagine

Immagine

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

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da gameplay_extreme »

cerco di spiegarti cosa c'è che non va nel tuo code (quello nell' open post di questo topic dico)...

sintatticamente o hai un oggetto chimato "image_index" (cosa che non potresti fare perché "image_index" è una keyoword riservata) o il code che hai scritto è sbagliato. se invece fai il contrario, cioè anziche

Codice: Seleziona tutto

image_index.giu = 0
scrivi

Codice: Seleziona tutto

giu.image_index = 0
può invece avere un senso...(cioè sintattatticamente non ci sarebbe nessun errore, a patto che precedentemente assegni a giu l'identificativo di un object o di una istanza)

per quanto riguarda quel

Codice: Seleziona tutto

        with(o_block){
            instance_destroy()
sei consapevole che distruggerà TUTTE le istanze di o_block ?

in oltre

Codice: Seleziona tutto

if instance_place(x+32,y,image_index.destra)
quando fai questo, come "argument2" (ovvero come terzo argomento) devi mettere o il nome di un object (senza virgolette, non è una stringa, anche se potrebbe sembrare) o l'id numerico di una istanza (o una variabile che lo rappresenti)

con

Codice: Seleziona tutto

image_index.destra
cosa vorresti rappresentare esattamente ?

se vuoi controllare se un oggetto e quello appena a destra abbiano settata la stessa subimmagine (forse volevi fare una cosa del genere ?) dovresti fare:

Codice: Seleziona tutto

near_istance = instance_place(x+32, y, o_block)  //è importante notare che
// instance_place restuituisce un id di istanza NON solo vero o falso!
// se un oggetto a destra c'è veramente....
if near_instance != noone //condizione 1
 {
  // confronto la "mia" subimmagine con quella dell'istanza vicina
  // faccio questo solo se esiste un'istanza vicina (vedi "if" sopra)
  if image_index == near_instance.image_index // condizione 2
   { 
     // azioni che vuoi eseguire in caso entrambe le 2 
     // condizioni qui sopra fossero vere
   }
 }
ps: hai capito cosa intendo per <"mia" subimmagine>, no ?
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)

Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

Innanzi tutto ringrazio tutti per il sostegno, purtroppo la mia scarsa conoscenza mi fa scervellare e non poco:
Vallo92 ho provato a rileggere il vecchio post ma ne sono uscito esaurito...successivamente proverò a mostrarti cos'ho combinato,
Per ora seguo la mia vecchia strada e con le modifiche apportate ne è uscito questo:
nell'oggetto oControl step event:

Codice: Seleziona tutto

global.match=false

destra_instance = instance_place(x+32, y, oBlock)
destra2_instance = instance_place (x+64, y, oBlock)  //è importante notare che
// instance_place restuituisce un id di istanza, NON solo vero o falso!
// se un oggetto a destra c'è veramente....
if destra_instance != noone //condizione 1
 {
  // confronto la "mia" subimmagine con quella dell'istanza vicina
  // faccio questo solo se esiste un'istanza vicina (vedi "if" sopra)
  if (object_index == destra_instance.object_index) and (object_index == destra2_instance.object_index)  // condizione 2
   { 
     global.match=true
     instance_destroy()
     // azioni che vuoi eseguire in caso entrambe le 2 
     // condizioni qui sopra fossero vere
   }
 }


ho usato object_index anziché image_index perché nel vecchio post di Vallo ho capito che image_index è preferibile quando ci sono più immagini nello stesso object ma in questo caso credo sia meglio riferirsi all'oggetto anziché all'immagine visto che ci saranno tanti oggetti quanti sprite!
Bene ora sono di nuovo nella stessa situazione di prima...non va...

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Vallo92 »

Scusami pensavo di aver postato il link ed invece non l'ho fatto! xD
Se segui attentamente tutta la discussione riuscirai ad ottenere quello che vuoi (figurati che al tempo ci sono riuscito addirittura io!). Se hai dei problemi prova a postare che vediamo di risolvere! ;)
-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

Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

Seguendo la strada di Vallo...
in oBlock create event

Codice: Seleziona tutto

hp=1
in oBlock step event

Codice: Seleziona tutto

if hp=0 {
instance_destroy()
}
in oBlock collisione con oBlock

Codice: Seleziona tutto

hp-=1;
var list;
list=ds_list_create();
scr_dannoblocchi(id,list);
lo scr_dannoblocchi:

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);
}
}
quando oBlock arriva a contatto con oBlock senza generare errori non fa nulla...questo è quello che avevo capito dal forum...maaaa a quanto pare non è così

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

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da gameplay_extreme »

riguardo a quello che hai scritto prendendo spunto dal mio codice, ci sono una manciata di cose che (eveidentemente) non hai ben compreso...

nella mia logica ogni o_block si "auto confronta" con il (eventuale) o_block vicino; se tu mi modifichi così:

Codice: Seleziona tutto

if (object_index == destra_instance.object_index)
ogni o_block confronta il proprio object_index con il object_index dell' istanza a destra. Quindi il check sarà positivo per forza perché "sono entrambi o_block": appartengono entrambi alla stesso tipo di oggetto (ergo avranno sicuramente lo stesso object_index).
In altre parole come hai modificato tu protrebbe avere senso se ci fossero 2 tipi di oggetto diversi ma non credo sia questo il tuo caso (per lo meno tu non l'hai mai fatto capire... )

edit:
ah, a quanto vedo alla fine anche quello che è emerso dal topic di Vallo fa uso di "object_index", però se guardi nell' open post (di quel topic) lui dice "ho 4 obj di colore differente"...tu non avendolo detto e avendo tirato fuori image_index pensavo volessi procedere diversamente...

ps:
se ancora non fosse chiaro:
l'image_index di una data istanza rappresenta quale sottoimmagine e correntemente visualizzata...
esempio:
create di un oggetto:

Codice: Seleziona tutto

image_speed = 0 //disattivo l'avanzamento sottoimagini
image_index = 2 // quale sottoimmagine voglio ?
questo oggetto visualizzara la sottoimagine 3 dell "suo" sprite
l'object_index di una data istanza rappresenta quale tipo di istanza è...
mi spiego meglio:
se un oggetto si chiama o_ciao, questa parola corrisponderà a un valore numerico o comunque a un codice (dovrei controllare, non vorrei che in studio hanno cambiato qualcosa...) se metti in create di questo oggetto:
create di o_ciao

Codice: Seleziona tutto

show_message(string(object_index))
dovrebbe essere visualizzato il valore numerico (o codice) di cui sopra...

spero di essere stato abbastanza chiaro :cappa:
Ultima modifica di gameplay_extreme il 14/02/2015, 13:02, modificato 1 volta in totale.
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)

Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

si scusa mi sono spiegato male, ho più oBlock di diversi colori...spiegandomi meglio ho 5 object oBlock (blu,rosso,giallo,verde,viola) ed ogni oBlock ha un solo sprite assegnato...avevo intenzione di creare un oBlock (quello della discussione di colore bianco oppure senza sprite) e poi successivamente creare quelli colorati che saranno parent di oBlock bianco...per questo dico che object_index == destra_instance.object_index perché successivamente quando ci saranno anche gli object parent dovrebbero riconoscersi essendo tutti oggetti diversi e quindi object_index diversi...spero di essermi spiegato meglio...

Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

Fin qui tutto chiaro, bene ma non capisco come mai, essendo l'object_index identico per ogni oBlock che posiziono nella room, non si riconoscono fra loro e quindi distruggono! Dopo tutto sono uguali..la stessa cosa mi capita anche con gli script di Vallo...non so più che pesci prendere..

Poi mi sembra strano che pur copiando lo script dal topic di Vallo a me non funzioni e a lui si..ci sarà qualcosa di fondo che non mi entra in testa, anzi quel qualcosa alla mia testa manco ci si avvicina! :furioso:

Avatar utente
Vallo92
GMI Advanced
Messaggi: 1508
Iscritto il: 15/07/2011, 20:26
Specialità: Grafico
Uso: GM:Studio 2
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Vallo92 »

Allora questi sono i codici (testati adesso, quindi funzionanti) ripresi dal topic. Fai qualche modifica per riadattare a quello che vuoi fare tu. ;)

scr_dannobolocchi

Codice: Seleziona tutto

//Dichiarazione variabili
var dx;
var sx;
var su;
var giu;

ds_list_add(argument1,argument0);
//Collisione destra
dx=instance_position(argument0.x+32,argument0.y,argument0.object_index);
if (instance_exists(dx) && ds_list_find_index(argument1,dx)<0)
{
scr_dannoblocchi(dx,argument1,argument2);
}
//Collisione sinistra
sx=instance_position(argument0.x-32,argument0.y,argument0.object_index);
if (instance_exists(sx) && ds_list_find_index(argument1,sx)<0)
{
scr_dannoblocchi(sx,argument1,argument2);
}
//Collisione su
su=instance_position(argument0.x,argument0.y-32,argument0.object_index);
if (instance_exists(su) && ds_list_find_index(argument1,su)<0)
{
scr_dannoblocchi(su,argument1,argument2);
}
//Collisione giu
giu=instance_position(argument0.x,argument0.y+32,argument0.object_index);
if (instance_exists(giu) && ds_list_find_index(argument1,giu)<0)
{
scr_dannoblocchi(giu,argument1,argument2);
}
//Distruzione istanze o sottrazione hp
if(argument2) {with(argument0) {instance_destroy();} score+=5;}
else {argument0.hp-=1; argument0.image_blend=c_orange; argument0.alarm[0]=2;}
obj_blocchi
Create:

Codice: Seleziona tutto

hp=5;
Alarm[0]:(questo alarm viene utilizzato solo per un effetto grafico che mostra al giocatore quando il blocco viene colpito)

Codice: Seleziona tutto

image_blend=c_white;
Step:

Codice: Seleziona tutto

if (hp<=0)
{
var list=ds_list_create();
scr_dannoblocchi(id, list, true);
ds_list_destroy(list);
}
Collisione con obj_proiettile (gli hp venivano detratti agli oggetti blocco quando venivano colpiti dai proiettili):

Codice: Seleziona tutto

var list=ds_list_create();
scr_dannoblocchi(id, list,false);
ds_list_destroy(list);
Tutti gli obj_blocco dei vari colori hanno come Parent l'obj_blocchi (in pratica quello descritto sopra).
-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


Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da cp94 »

Ma non potresti fare una cosa piu semplice tipo allargare la maschera di collisione di o_Block e fare una cosa come:
CREATE

Codice: Seleziona tutto

list=ds_list_create();
COLLISION con o_Block

Codice: Seleziona tutto

if (other.image_index==image_index)
{
     ds_list_add(other.id);
}
END STEP

Codice: Seleziona tutto

if (ds_list_size(list)>=2)
{
     for (var i=0; i<ds_list_size(list); i++) with (ds_list_find_value(list,i)) instance_destroy();
     instance_destroy();
}
ds_list_clear(list);
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

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

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da gameplay_extreme »

si scusa mi sono spiegato male, ho più oBlock di diversi colori...spiegandomi meglio ho 5 object oBlock (blu,rosso,giallo,verde,viola) ed ogni oBlock ha un solo sprite assegnato...avevo intenzione di creare un oBlock (quello della discussione di colore bianco oppure senza sprite) e poi successivamente creare quelli colorati che saranno parent di oBlock bianco...per questo dico che object_index == destra_instance.object_index perché successivamente quando ci saranno anche gli object parent dovrebbero riconoscersi essendo tutti oggetti diversi e quindi object_index diversi...spero di essermi spiegato meglio...
allora quando è così, si, penso che "object_index" possa eserti utile...(come del resto è stato utile anche a Vallo)

Edit:
credo possa andare anche l'idea che hai descritto tu in questo post (se ho capito cosa intendi), comunque il sistema dato da vallo addirittura può fare a meno che i blocchi abbiano un parent comune...adesso che ci penso
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
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: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Wolfrost »

Tizzio ha scritto:Immagine
:asd: :asd: Quotone
Immagine

Immagine

Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

Scusate ma ho seri problemi di comprensione :mrgreen: più che altro perchè fino ad ora sono riuscito sempre a scamparla cercando di evitare gli script complessi siccome non ho preparazione informatica. Quello che non riesco a capire è come funziona la list, per di + non riesco a trovare una guida da nessuna parte che mi spieghi il suo funzionamento...ho provato il codice di Vallo ma non so a cosa corrispondano gli argument e non capisco perchè ce ne sono addirittura 3. Mentre per la list con ciclo for di cp94, che se ho capito il senso, dovrebbe crearmi una mega lista che copre ogni oggetto, poi con il ciclo for se 2 o più oggetti hanno l'index uguale li distrugge, non mi funziona dandomi errori di sintassi. Tra l'altro lo script dove dice che gli oggetti sono allineati?..Insomma al momento non ho la preparazione tale da saper leggere tutto ciò...credevo fosse un discorso più semplice...io son tornato allo script di game_play extreme solo perchè riesco a leggerlo :P .. quindi ho fatto:

Codice: Seleziona tutto

global.match=false //all'inizio non trova nulla quindi false
 
destra_instance = instance_place(x+32, y, oBlock) //destra_instance corrisponde alla posizione x+32 del blocco
destra2_instance = instance_place (x+64, y, oBlock)  //destra2_instance corrisponde alla posizione x+64 del blocco

if destra_instance and destra2_instance != noone //se a destra e a destra2 esiste un oggetto
 {
   if (object_index == destra_instance.object_index) and (object_index == destra2_instance.object_index)  
//verifico se i 3 oggetti sono uguali tra loro...per ora sarà sempre vero ma non lo sarà quando creerò anche degli oggetti, a cui darò sprite di altri colori, che saranno imparentati con oBlock.
   { 
     global.match=true //trova vero
     instance_destroy() // distrugge oBlock, oBlock destra e oBlock destra2
 }
Ma ovviamente non va e mi dice che index è sconosciuto...non credo che debba creare in create event un valore per object_index anche perchè ce l'ha già associato no? :spat: scusate ancora, abbiate pazienza! Vi regalerò un panettone il prossimo Natale!

Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da cp94 »

Il mio sccript controlla se un blocco ne ha altri due attaccati, in tal caso li distrugge tutti e 3.
se vuoi evitare che i blocchi siano attaccati in forma a "L", ma solamente allineati basta che, prima della distruzione, controlli se tutti e tre gli elementi della lista hanno la stessa x o la stessa y.
Inoltre quella non è una megalista, ma essa è una lista privata per ogni blocco e contiene massimo 3 oggetti (il blocco stesso e i suoi 2 vicini attaccati)

Ti darà errore di sintassi perchè stai usando game maker 8 o 8.1.
In tal caso cambia

Codice: Seleziona tutto

for (var i=0; i<ds_list_size(list); i++)
con

Codice: Seleziona tutto

var i;
for (i=0; i<ds_list_size(list); i+=1)
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Lavecchia
Newbie
Messaggi: 16
Iscritto il: 13/02/2015, 17:58
Uso: GameMaker 8
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Lavecchia »

FATAL ERROR in
action number 3
of Collision Event with object oBlock
for object oBlock:

COMPILATION ERROR in code action
Error in code at line 3:
ds_list_add(other.id);
^
at position 27: Wrong number of arguments to function or script.

mi dà questo problema, quello che mi hai postato tu l'ho sistemato perchè sto usando l'8 siccome non sono al momento a casa...non sapevo che lo studio varia la sintassi rispetto all'8..comunque quando tu dici if (other.image_index==image_index) indichi in create event che valore ha image_index?

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: Chiedo aiuto su come distruggere 3 blocchi in linea

Messaggio da Solid Snake »

Lavecchia ha scritto:FATAL ERROR in
action number 3
of Collision Event with object oBlock
for object oBlock:

COMPILATION ERROR in code action
Error in code at line 3:
ds_list_add(other.id);
^
at position 27: Wrong number of arguments to function or script.

mi dà questo problema, quello che mi hai postato tu l'ho sistemato perchè sto usando l'8 siccome non sono al momento a casa...non sapevo che lo studio varia la sintassi rispetto all'8..comunque quando tu dici if (other.image_index==image_index) indichi in create event che valore ha image_index?

Se leggevi l'errore trovavi subito la soluzione...

Codice: Seleziona tutto

ds_list_add(list, other.id);
:cappa:
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 102 ospiti