Ciao a tutti
Sto creando un semplice software dimostrativo per un lavoro.
Fondamentalmente ho creato una griglia con grid = mp_grid_create(0,0,60,80,16,16);
ed un oggetto che quando passa sotto alla griglia con la funzione mp_grid_add_instances(grid, Object_01_obj, 1); illumina i quadrati della griglia interessati.
ho poi creato un contatore che ogni tot pixel di avanzamento resetta la griglia con l funzione if global.gr1 = 0
{
mp_grid_clear_all(grid)
}
In quanto non ho capito come cancellare solo le celle non piu' interessate dal passaggio dell'oggetto...
Avrei bisogno di calcolare il numero di celle "accese" prima che vengano resettate per poi inserire il valore risultante in un altra funzione .
Vi ringrazio in anticipo per qualsiasi aiuto
mp_grid conteggio celle
- Simsure
- Membro
- Messaggi: 223
- Iscritto il: 13/09/2013, 21:54
- Specialità: Programmazione
- Uso: GM:Studio 2
- Località: dietro di te...
- Contatta:
Re: mp_grid conteggio celle
Ciao, a te serve un sistema di movimento per le entità di gioco? Nel senso che mp_grid è una serie di funzioni appunto per il Motion Planning(mp) che serve per gestire lo spostamento di entità su una mappa di gioco.
Se a te serve solo una griglia che si accorda di quando un oggetto è all'interno di una casella potresti usare le ds_grid che sono strutture dati fatte apposta.
https://docs.yoyogames.com/source/dadio ... index.html
Per vedere se un oggetto è dentro alla griglia ti basta convertire la sua posizione nella room in base alla dimensione della griglia, tipo
e poi settare il valore di quella casella con ds_grid_set(index, x, y, value);
Per resettare hai comunque una funzione clear ds_grid_clear(index, val);
E per vedere quante caselle sono accese puoi fare con ds_grid_get_sum(index, x1, y1, x2, y2); dandogli tutta la griglia come dimensione.
Se fai si che quando un oggetto è in una casella questa diventi di valore 1 e che di base siano tutte 0, usando questa funzione prendi la somma di tutti i valori della griglia, che quindi ti tornerà il numero di caselle accese.
Se a te serve solo una griglia che si accorda di quando un oggetto è all'interno di una casella potresti usare le ds_grid che sono strutture dati fatte apposta.
https://docs.yoyogames.com/source/dadio ... index.html
Per vedere se un oggetto è dentro alla griglia ti basta convertire la sua posizione nella room in base alla dimensione della griglia, tipo
Codice: Seleziona tutto
gridX = round(x/grandezza_delle_caselle)
Per resettare hai comunque una funzione clear ds_grid_clear(index, val);
E per vedere quante caselle sono accese puoi fare con ds_grid_get_sum(index, x1, y1, x2, y2); dandogli tutta la griglia come dimensione.
Se fai si che quando un oggetto è in una casella questa diventi di valore 1 e che di base siano tutte 0, usando questa funzione prendi la somma di tutti i valori della griglia, che quindi ti tornerà il numero di caselle accese.
Re: mp_grid conteggio celle
Ciao
Intanto grazie infinite per la risposta , sto guardandomi un po le funzioni ds_grid su docs.yoyogames per capirne di piú ( sono poco esperto come potrai notare )
quello che devo fare fondamentalmente é una rappresentazione visiva di due griglie affiancate una con celle di dimensioni 6x10 ed una di dimensioni 40x100 , far passare una figura di forma circolare sotto le due glriglie e leggere i valori accesi delle 2 rispettive griglie per calcolare poi la differenza nelle 2 aree rilevate .
Da niubbo avevo iniziato con mp_grid perché ho visto che posso settare la dimensione di ogni cella come voglio , con ds_grid se non sbaglio posso creare solo griglie a quadretti.
Intanto grazie infinite per la risposta , sto guardandomi un po le funzioni ds_grid su docs.yoyogames per capirne di piú ( sono poco esperto come potrai notare )
quello che devo fare fondamentalmente é una rappresentazione visiva di due griglie affiancate una con celle di dimensioni 6x10 ed una di dimensioni 40x100 , far passare una figura di forma circolare sotto le due glriglie e leggere i valori accesi delle 2 rispettive griglie per calcolare poi la differenza nelle 2 aree rilevate .
Da niubbo avevo iniziato con mp_grid perché ho visto che posso settare la dimensione di ogni cella come voglio , con ds_grid se non sbaglio posso creare solo griglie a quadretti.
- Simsure
- Membro
- Messaggi: 223
- Iscritto il: 13/09/2013, 21:54
- Specialità: Programmazione
- Uso: GM:Studio 2
- Località: dietro di te...
- Contatta:
Re: mp_grid conteggio celle
Che intendi con "griglie a quadretti"? Se intendi come vengono viste sullo schermo quello puoi deciderlo tu in base a come scegli di rappresentarle, ma tutte le griglie sono "a quadretti" a caselle insomma. In questo caso ricorda che calcolo dei dati e rappresentazione visiva sono due cose separate e distinte. Con la mp_grid cè una funzione che la disegna, ma non è esattamente il massimo e ha piu lo scopo di debug, mentre per le ds_grid puoi rappresentarle tu con quadrati,linee e colori come preferisci una volta che ottieni i dati dalla griglia.
O forse intendi nella "forma"? Cioè una griglia larga 40 e alta 100? Per quello basta dichiararla tale.
grid = ds_grid_create(40,100)
O forse intendi nella "forma"? Cioè una griglia larga 40 e alta 100? Per quello basta dichiararla tale.
grid = ds_grid_create(40,100)
-
- Newbie
- Messaggi: 1
- Iscritto il: 18/03/2019, 16:48
- Specialità: Grafico
- Uso: GM:Studio 2
- Contatta:
Re: mp_grid conteggio celle
Quello che devo fare è praticamente questo :
i due dischi passano sotto le 2 griglie e man mano che avanzano accendono e spengono i rettangoli interessati, prima che un rettangolo si spenga devo registrare il valore di acceso in un contatore dove , nel riquadro di destra in questo caso sarà di 9 ed in quello di sinistra di 35.
Avanzando i dischi spegneranno ed accenderanno i rettangoli in corrispondenza della direzione di avanzamento .
il fatto è che sia in forma visiva che in forma di dati la cella della griglia deve avere le dimensioni che imposto ( 6x10 a sinistra e 60x15 a destra )
da quello che ho capito se creo una ds_grid 10x100 per esempio mi creerà una griglia alta 10 larga 100 com 1000 celle 10x10 all'interno ,se io quelle celle le voglio fare 6x10 non posso giusto ?
i due dischi passano sotto le 2 griglie e man mano che avanzano accendono e spengono i rettangoli interessati, prima che un rettangolo si spenga devo registrare il valore di acceso in un contatore dove , nel riquadro di destra in questo caso sarà di 9 ed in quello di sinistra di 35.
Avanzando i dischi spegneranno ed accenderanno i rettangoli in corrispondenza della direzione di avanzamento .
il fatto è che sia in forma visiva che in forma di dati la cella della griglia deve avere le dimensioni che imposto ( 6x10 a sinistra e 60x15 a destra )
da quello che ho capito se creo una ds_grid 10x100 per esempio mi creerà una griglia alta 10 larga 100 com 1000 celle 10x10 all'interno ,se io quelle celle le voglio fare 6x10 non posso giusto ?
- Simsure
- Membro
- Messaggi: 223
- Iscritto il: 13/09/2013, 21:54
- Specialità: Programmazione
- Uso: GM:Studio 2
- Località: dietro di te...
- Contatta:
Re: mp_grid conteggio celle
Le celle di una ds_grid non hanno una forma o uno spazio, sono solo un contenitore per un valore, non sono nemmeno 10x10 quindi, quello ricade nella rappresentazione visiva che vuoi dargli.
Comunque forse per quello che devi fare può essere piu immediato e semplice usare degli oggetti, ti faccio vedere un modo in cui potresti farlo.
Fai un oggetto "cella" con 2 variabili w e h (x e y sono gia messe di base), e un'altra chiamata active per dire, messa a false. Poi crei due sprite con la forma di rettangoli delle dimensioni dei due tipi di cella.
Quando avii il gioco usi due cicli for per cerare tante instance cella in modo da formare la griglia, appena create le riprendi e setti le variabili w e h delle dimensioni che ti servono e ne imposti lo sprite in base al tipo di griglia.
Essendo alle prima armi ti faccio vedere questo passo a codice che magari può essere un pò confusionario da leggere.
Nello step dell'oggetto sfera prima di tutto prendi ogni oggetto cella esistente (basta usare il nome dell'oggetto) ed imposti active a false per resettare le celle attivate nello step precedente, poi usi questa funzione collision_circle_list()
https://docs2.yoyogames.com/source/_bui ... _list.html
Che date le coordinate ed il raggio dell'oggetto cerchio tornano una ds_list (di cui trovi le funzioni sulla documentazione) contenente tutti gli oggetti cella (o qualsiasi altro oggetto gli dichiari quando chiami la funzione) con cui il cerchio collide in quel momento.
Ora ti basta prendere ogni oggetto nella lista e settare active a true e magari cambiare lo sprite della cella con uno uguale ma illuminato.
Oppure nell'evento draw delle celle mettere che se active è uguale a true allora disegna lo stesso sprite ma colorato di giallo.
Questo è un modo (uno dei tanti con cui si potrebbe risolvere il problema) piu immediato anche se meno ottimizzato, ma se le tue griglie sono cosi piccole non dovrebbero esserci problemi.
Comunque forse per quello che devi fare può essere piu immediato e semplice usare degli oggetti, ti faccio vedere un modo in cui potresti farlo.
Fai un oggetto "cella" con 2 variabili w e h (x e y sono gia messe di base), e un'altra chiamata active per dire, messa a false. Poi crei due sprite con la forma di rettangoli delle dimensioni dei due tipi di cella.
Quando avii il gioco usi due cicli for per cerare tante instance cella in modo da formare la griglia, appena create le riprendi e setti le variabili w e h delle dimensioni che ti servono e ne imposti lo sprite in base al tipo di griglia.
Essendo alle prima armi ti faccio vedere questo passo a codice che magari può essere un pò confusionario da leggere.
Codice: Seleziona tutto
for(var i=0; i<larghezza_griglia; i++)
{
for(var j=0; j<altezza_griglia; j++)
{
var ogg = instance_create(i*larghezza_cella, j*altezza_cella, obj_cella)
ogg.w = larghezza_cella
ogg.h = altezza_cella
ogg.sprite_index = spr_cella_1
}
}
https://docs2.yoyogames.com/source/_bui ... _list.html
Che date le coordinate ed il raggio dell'oggetto cerchio tornano una ds_list (di cui trovi le funzioni sulla documentazione) contenente tutti gli oggetti cella (o qualsiasi altro oggetto gli dichiari quando chiami la funzione) con cui il cerchio collide in quel momento.
Ora ti basta prendere ogni oggetto nella lista e settare active a true e magari cambiare lo sprite della cella con uno uguale ma illuminato.
Oppure nell'evento draw delle celle mettere che se active è uguale a true allora disegna lo stesso sprite ma colorato di giallo.
Questo è un modo (uno dei tanti con cui si potrebbe risolvere il problema) piu immediato anche se meno ottimizzato, ma se le tue griglie sono cosi piccole non dovrebbero esserci problemi.
Re: mp_grid conteggio celle
Rieccomi qua
ho provato varie soluzioni per cercare di capire come fare , compresa quella che mi hai suggerito ma purtroppo e troppo pesante per quello che devo fare
fai conto che creando degli oggetti Cella di dimensione 6x10 pixel ( la dimensione con la quale devo lavorare ) per fare la simulazione creo 11.000 istanze .... tutto funzionerebbe anche bene .... il fatto e' che rallenta in maniera patetica il programma .
Qualcuno mi ha suggerito di creare un array e lavorare con una griglia basata su quello ma francamente ... non ho la piu pallida idea di come fare :-( ... sto cercando tutorial in giro per il mondo ma non ne vado fuori :-( ...
ho provato varie soluzioni per cercare di capire come fare , compresa quella che mi hai suggerito ma purtroppo e troppo pesante per quello che devo fare
fai conto che creando degli oggetti Cella di dimensione 6x10 pixel ( la dimensione con la quale devo lavorare ) per fare la simulazione creo 11.000 istanze .... tutto funzionerebbe anche bene .... il fatto e' che rallenta in maniera patetica il programma .
Qualcuno mi ha suggerito di creare un array e lavorare con una griglia basata su quello ma francamente ... non ho la piu pallida idea di come fare :-( ... sto cercando tutorial in giro per il mondo ma non ne vado fuori :-( ...
Chi c’è in linea
Visitano il forum: Nessuno e 116 ospiti