Ispirato da un esempio sul forum ufficiale di GM, ho preparato una editabile che mostra come creare una lente di ingrandimento.
L'esempio originale (http://gmc.yoyogames.com/index.php?showtopic=493088) presenta un approccio con due surface, una su cui vien disegnata l'intera room e l'altra per la parte ingrandita. Funziona, ma ad ogni step ridisegna due volte l'intera room (una normalmente, una sulla surface) e sfrutta una surface grande quanto l'intera room, quindi é piuttosto poco performante come sistema.
Il mio esempio utilizza invece una surface e un background grandi al massimo quanto la zona ingrandita, e non necessita di ridisegnare l'intera room. L'unica cosa da fare é assicurarsi di mettere una depth molto bassa all'oggetto della lente, in modo che sia disegnato per ultimo, altrimenti non tutti gli oggetti vengono mostrati nella zona ingrandita. Ha anche un problema di stretch quando la lente supera i bordi dell'immagine, dovuto alla funzione background_create_from_screen, che per il momento non so come risolvere ma ci studio dietro e casomai aggiorno.
Download
[Botta&Risposta] Lente di ingrandimento
- Homunculus
- Admin
- Messaggi: 6840
- Iscritto il: 25/11/2007, 20:36
- Contatta:
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: [Botta&Risposta] Lente di ingrandimento
Bell'esempio, ma con l'interpoolazione è mooolto più godibile. Bella l'idea di usare il background per evitare di usare surface enormi(maledette view restrittive alla grandezza della room, io voglio room infinite caxxo, dove sarebbe il difficile? ).
Per il problema ai bordi è tutta colpa della funzione che crea il background dallo schermo(bè chiamala colpa) che probabilmente:
-x ed y non vanno al di fuori della view di conseguenza andando a sinistra restano con x=0 come minimo(stessa cosa per la y)
-w ed h sono dipendenti da x ed y ma hanno il controllo dal loro corrispondente bordo.
-poichè w ed h sono dipendenti da x ed y e non viceversa andando in alto a sinistra x ed y restano dentro la visuale e w ed h restano a coordinate relative da x ed y mentre andando in basso a destra w ed h si aggiustano ma x ed y non hanno controlli che fanno si che restano sufficientemente distanti dal bordo basandosi su w ed h rimpicciolendo la zona di lavoro e quindi facendo quell'effetto scalatura.
Soluzione: non mettere la zona che verrà disegnata fuori dalla lente fuori dalla room perchè che abbia controlli o meno darà sempre un'effetto sbagliato. Bisogna sempre tenere la lente dentro la visuale.
Per il problema ai bordi è tutta colpa della funzione che crea il background dallo schermo(bè chiamala colpa) che probabilmente:
-x ed y non vanno al di fuori della view di conseguenza andando a sinistra restano con x=0 come minimo(stessa cosa per la y)
-w ed h sono dipendenti da x ed y ma hanno il controllo dal loro corrispondente bordo.
-poichè w ed h sono dipendenti da x ed y e non viceversa andando in alto a sinistra x ed y restano dentro la visuale e w ed h restano a coordinate relative da x ed y mentre andando in basso a destra w ed h si aggiustano ma x ed y non hanno controlli che fanno si che restano sufficientemente distanti dal bordo basandosi su w ed h rimpicciolendo la zona di lavoro e quindi facendo quell'effetto scalatura.
Soluzione: non mettere la zona che verrà disegnata fuori dalla lente fuori dalla room perchè che abbia controlli o meno darà sempre un'effetto sbagliato. Bisogna sempre tenere la lente dentro la visuale.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- guidox
- GMI Honor
- Messaggi: 5765
- Iscritto il: 26/07/2009, 17:23
- Specialità: programmazione
- Uso: GM:Studio 1.4 Android
- Località: Marche
- Contatta:
Re: [Botta&Risposta] Lente di ingrandimento
Bell' esempio, l' avevo fatto anche io(ma con le surface... xD).
PS: Jak la view è infinita se gli setti la posizione a mano, l' ho fatto per il mio minecraft 2d...
PS: Jak la view è infinita se gli setti la posizione a mano, l' ho fatto per il mio minecraft 2d...
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: [Botta&Risposta] Lente di ingrandimento
o.O mi sa che sono rimasto ai tempi di gm6 quando ancora usavo le viewguidox ha scritto:Jak la view è infinita se gli setti la posizione a mano, l' ho fatto per il mio minecraft 2d...
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Chi c’è in linea
Visitano il forum: Nessuno e 22 ospiti