Minimappa settabile

Scripts e snippets scritti in GameMaker Language (gml)
Rispondi
Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Minimappa settabile

Messaggio da andzan »

Sto creando un piccolo progetto da pubblicare con source disponibile, si potrà gestire minimappe di qualsiasi gioco, scegliere quali oggetti visualizzare e assegnare ad alcuni oggetti uno sprite diverso nella minimappa. Il codice funziona, però è molto pensate, difatti anche con solo una decina di oggetti nella room non riesco a reggere il gioco per più di 10 secondi. vi pubblico il codice, gli altri oggetti non hanno codice che possa interferire.
Ripeto che il codice funziona.
DRAW EVENT

Codice: Seleziona tutto

posx=0
posy=0
zoom=0.2
n=0
oggetto=instance_find(all,n)
repeat(instance_number(all))
{
 oggetto=instance_find(all,n)
 n+=1
 if oggetto.visible=true && sprite_exists(oggetto.sprite_index)
    {
    draw_sprite_stretched(oggetto.sprite_index,0,posx+oggetto.x*zoom,posy+oggetto.y*zoom,sprite_get_width(oggetto.sprite_index)*zoom,sprite_get_height(oggetto.sprite_index)*zoom)
    
    }
}
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Re: Minimappa settabile

Messaggio da andzan »

Xeryan ha scritto:Così da questo codice non credo che funzioni bene, prova a spostarla in basso o spostare la view.. cioè dove stanno i semplici calcoli di proporzione della room con la view e con la minimappa ?

Poi comunque usa il costrutto with() e vedrai miglioramenti
Grazie, adesso provo.
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Re: Minimappa settabile

Messaggio da andzan »

Xeryan ha scritto:Così da questo codice non credo che funzioni bene, prova a spostarla in basso o spostare la view.. cioè dove stanno i semplici calcoli di proporzione della room con la view e con la minimappa ?

Poi comunque usa il costrutto with() e vedrai miglioramenti
Il nuovo codice usa with e penso sia proporzionato con la room (grandezza room: 640x480), ma comunque dopo poco tempo crasha, però comunque è migliorato rispetto a prima.
DRAW EVENT di controller

Codice: Seleziona tutto

posx=0
posy=0
zoom=5
n=0
oggetto=instance_find(all,n)
repeat(instance_number(all))
{
 oggetto=instance_find(all,n)
 n+=1
 var1=posx+(oggetto.x/zoom)
 var2=posy+(oggetto.y/zoom)
 var3=sprite_get_width(oggetto.sprite_index)/zoom
 var4=sprite_get_height(oggetto.sprite_index)/zoom
 
 with(oggetto){if sprite_exists(self.sprite_index)
    {
    draw_self()
    draw_sprite_stretched(self.sprite_index,0,controller.var1,controller.var2,controller.var3,controller.var3)
    }
    }
}
Altri consigli???
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Re: Minimappa settabile

Messaggio da andzan »

Xeryan ha scritto:non ci siamo, è addirittura peggiorato, mi sà che quel "e vedrai miglioramenti" ha creato un effetto placebo xD

innanzitutto il with() fa la stessa cosa del codice che hai usato con instance_find, repeat e instance_number, poi comunque continua a non esserci una relazione con le dimensioni della minimappa, della room e dell'oggetto stesso e quindi ti sballa le coordinate, questo è come dovrebbe essere il risultato finale:

Codice: Seleziona tutto

mapW = 150;
mapH = 100;
mapX = view_xview + view_wview - mapW - 20;
mapY = view_yview + view_hview - mapH - 20;
scale = .1;

//disegno gli oggetti sulla minimappa
with (object0) {
   draw_sprite_ext(sprite_index, image_index, other.mapX + other.mapW/room_width*x, other.mapY + other.mapH/room_height*y, other.scale, other.scale, image_angle, image_blend, image_alpha);
}

//disegno la minimappa
draw_set_color(c_blue); draw_set_alpha(.5);
draw_rectangle(mapX, mapY, mapX + mapW, mapY + mapH, false);
draw_set_color(c_black); draw_set_alpha(1);
draw_rectangle(mapX, mapY, mapX + mapW, mapY + mapH, true);
Questo test-esempio l'ho fatto con:

Room: 10000x10000
View: 640x480
Minimappa: 150x100
Object0 alle coordinate 5000x5000

In questo caso l'oggetto starà perfettamente al centro della minimappa, poichè si trova al centro della room
Grazie mille, ma devo comunque fare il ciclo con tutti gli oggetti, perchè il tuo codice disegna solo l'object0.
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Re: Minimappa settabile

Messaggio da andzan »

Xeryan ha scritto:beh allora basta modificare

Codice: Seleziona tutto

with (all) {
   if (object_index != objController) //disegna
}
Grazie mille, adesso funziona perfettamente, ho aggiunto che un oggetto viene disegnato solo se è visibile e ho modificato le dimensioni della mappa per farle diventare proporzionate con la room base di game maker (640x480).
Posto il codice definitivo nella speranza che a qualcuno possa servire.
Codice testato e funzionante nelle versioni GM 8.1 Standard e GM: Studio Professional

Codice: Seleziona tutto

mapW = 128;
mapH = 96;
mapX = view_xview + view_wview - mapW - 20;
mapY = view_yview + view_hview - mapH - 20;
sfondo=true;
cornice=true;
scale = .2;

//disegno gli oggetti sulla minimappa
with (all) {
   if (object_index != controller) && self.visible=true
   {
    draw_sprite_ext(sprite_index, image_index, other.mapX + other.mapW/room_width*x, other.mapY + other.mapH/room_height*y, other.scale, other.scale, image_angle, image_blend, image_alpha);
   }
}

//disegno la minimappa
if sfondo=true{
draw_set_color(c_blue); draw_set_alpha(.5);
draw_rectangle(mapX, mapY, mapX + mapW, mapY + mapH, false);
}
if cornice=true
{
draw_set_color(c_black); draw_set_alpha(1);
draw_rectangle(mapX, mapY, mapX + mapW, mapY + mapH, true);
}
Ultima modifica di andzan il 15/01/2014, 19:06, modificato 1 volta in totale.
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Avatar utente
pacmino
GMI Guru
Messaggi: 2569
Iscritto il: 03/06/2009, 16:38
Specialità: Scazzato cronico
Uso: GM:Studio 2
Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
Contatta:

Re: Minimappa settabile

Messaggio da pacmino »

così va meglio :)

ma dato che è possibile conoscere le dimensioni della room larghezza e altezza si potrebbe in base a quei dati e al fattore di scala calcolare in automatico le dimensioni della minimappa

l'unica critica è che che gli sprite nella minimappa sono così piccoli che difficilmente si capisce che sono sprite e non puntini
Immagine

Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Re: Minimappa settabile

Messaggio da andzan »

pacmino ha scritto:così va meglio :)
gli sprite nella minimappa sono così piccoli che difficilmente si capisce che sono sprite e non puntini
Concordo infatti nel prossimo update, cioè quando ho tempo aggiungerò la possibilità di visualizzare uno sprite diverso da quello che l'oggetto ha in quel momento in modo che per esempio si possa visualizzare il personaggio con un punto rosso e i nemici con uno blu, anche se nel gioco hanno grafiche diverse.
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Re: Minimappa settabile

Messaggio da andzan »

Posto un esempio di utilizzo della minimappa (l'esempio è creato con gm studio, ma il codice funziona anche in gm 8.1) e uno screenshot per i più pigri.
Immagine:
https://app.box.com/s/z45b8toc1r6p84muf1bl
download:
https://app.box.com/s/dexcsi89e0v7cjnf4bvd
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Avatar utente
pacmino
GMI Guru
Messaggi: 2569
Iscritto il: 03/06/2009, 16:38
Specialità: Scazzato cronico
Uso: GM:Studio 2
Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
Contatta:

Re: Minimappa settabile

Messaggio da pacmino »

un'altra cosa se gli oggetti sono in movimento ovviamente si muovono nella mappa anche i mini-sprite

ergo devi provvedere un controllo supplementare per evitare che questi mini-sprite vengano visualizzati al di fuori della mappa

poi il codice che disegna lo sfondo e la cornice deve venire prima del disegno degli sprite
Immagine

Avatar utente
pacmino
GMI Guru
Messaggi: 2569
Iscritto il: 03/06/2009, 16:38
Specialità: Scazzato cronico
Uso: GM:Studio 2
Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
Contatta:

Re: Minimappa settabile

Messaggio da pacmino »

ecco ci vorrebbe proprio un bel tutorial esaustivo sull'uso delle surface :)
Immagine

Avatar utente
andzan
Membro
Messaggi: 133
Iscritto il: 03/04/2012, 15:38
Specialità: Programmatore
Uso: GM:Studio 2
Contatta:

Re: Minimappa settabile

Messaggio da andzan »

pacmino ha scritto:ecco ci vorrebbe proprio un bel tutorial esaustivo sull'uso delle surface :)
A me di sicuro servirebbe visto che non so quasi nulla di surface.
pacmino ha scritto:un'altra cosa se gli oggetti sono in movimento ovviamente si muovono nella mappa anche i mini-sprite
ergo devi provvedere un controllo supplementare per evitare che questi mini-sprite vengano visualizzati al di fuori della mappa
Provvederò appena ho tempo
pacmino ha scritto: poi il codice che disegna lo sfondo e la cornice deve venire prima del disegno degli sprite
Vedi risposta precedente.
Xeryan ha scritto:
pacmino ha scritto:poi il codice che disegna lo sfondo e la cornice deve venire prima del disegno degli sprite
l'ho messo apposta dopo, in quanto al limite della room, gli sprite si vedrebbero sopra il contorno
pacmino ha scritto:ergo devi provvedere un controllo supplementare per evitare che questi mini-sprite vengano visualizzati al di fuori della mappa
meglio usare una surface
Da quello che so di surface io non potrei usarle, visto che voglio inserire la possibilità di non visualizzare alcuni oggetti e visualizzare alcuni oggetti con uno sprite diverso dal loro. L'idea mi è venuta essenzialmente per questo, perchè se la lasciassi così basterebbe una view.
http://www.sednasoft.altervista.org
Giochi work in progress:
A Snake's World [37.5%] Beta
Programmi work in progress:
GML Particle Studio [60% Momentaneamente fermo per problemi di tempo]
Idee:
Knok Knok: Civilization
Script GML:
Sedna's Minimap [50%]
Cursor manager [100%]

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite