Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Problemi risoluzione dinamica

Messaggio da Barnack »

Dritto al punto, stavo implementano una risoluzione dinamica per il mio new game, in cui l'utene potrà decidere delle risoluzioni, ed i dati vengono salvati in un .ini e letti all'avvio del gioco
Un oggetto persistent SETTINGS tiene tutti i dati relativi
view_wview e v_xview sono fissi a seconda del formato della risoluzione (4x3, 16x9) in modo da mostrare la stessa porzione di livello a chiunque giochi con lo stesso formato.
Detto quest ho provato con
800x600 (4x3)
e
1024x768(4x3)
e sia a schermo intero sia in modalità finestra funziona perfettamente: viene visualizzata la stessa porzione di schermo con risluzione più grande o più piccola.
Per il principio d'induzione suppongo funzioni per tutte le risoluzioni 4x3

MA
appena ho provato una risoluzione 16x9
1600x900
ho ottenuto la finestra grande 1600x900 (tutto ok) con due bande nere e la view grande...boh comunque un formato 4x3
idem a schermo intero.

Posto qui i vari codici, dopo averli sistemati li posterò nella sezione codici per renderli di pubblico dominio:

SETTINGS
CREATE

Codice: Seleziona tutto

ini_open(nomefile)
if not ini_section_exists("Resolution")
    {settings_init_resolution()}
res_format=0//ini_read_real("Resolution", "res_format", 1)//0=4x3, 1=16x9
res_w=1024//ini_read_real("Resolution", "res_w", 1600)
res_h=768 //ini_read_real("Resolution", "res_h", 900)
fullscreen=false //ini_read_real("Resolution", "fullscreen", true)
ini_close()
Qui ho commentato le cose dell'ini per fare i test, dato che ancora non c'è la schermata impostazioni

ROOM START

Codice: Seleziona tutto

//Gestione VIEW
view_wport[0]=res_w
view_hport[0]=res_h
window_set_size(res_w, res_h)
if res_format=0
    {
    view_wview[0]=1024      //4x3
    view_hview[0]=768
display_set_gui_size(1024, 768)
    }
else if res_format=1
    {
    view_wview[0]=1184
    view_hview[0]=666       //copyright Stefano <16x9
    //amici che partono da un numero a caso ed arrivano a 666 quando calcolano il formato
    display_set_gui_size(1184, 666)
    }
if fullscreen
    {window_set_fullscreen(true)}
Inoltre se aggiungo questo codice:

Codice: Seleziona tutto

draw_text(16, 0, /*"c_view "+*/view_current)
draw_text(16, 12, /*"xv"+*/view_wview[0])
draw_text(16, 24, /*"yv"+*/view_hview[0])
draw_text(16, 36, /*"wp"+*/view_wport[0])
draw_text(16, 48, /*"hp"+*/view_hport[0])
draw_text(16, 60, /*"xv"+*/view_wview[view_current])
draw_text(16, 72, /*"yv"+*/view_hview[view_current])
draw_text(16, 84, /*"wp"+*/view_wport[view_current])
draw_text(16, 96, /*"hp"+*/view_hport[view_current])
nell'evento Draw i dati in view[0] sono corretti, ma view_current è 7,
e rimane 7 anche dopo aver aggiunto queste righe al room_start:

Codice: Seleziona tutto

for(i=1; i<8; i++)
    {view_visible[i]=false}
view_visible[0]=true
Any idea?

Altra domanda:
se imposto la risoluzione di Windows in un formato 4x3 ed il gioco a 4x3 (nello schermo 16x9 risulta stretchato ovviamente) si vede bene, se invece Windows è in 16x9 ed il gioco 4x3 vengono disegnate le bande laterali (fin qui tutto ok) MA c'è un lag orizzontale poco sopra metà schermo, la prima parte è tipo uno step avanti alla metà inferiore... just... wtf
Comunque risolto il primo problema questo nemmeno si pone, nessuno con uno schermo in un formato selezionerebbe risoluzioni in formati diversi xD

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#


Avatar utente
Alv
Membro
Messaggi: 131
Iscritto il: 14/11/2014, 22:33
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Sicilia
Contatta:

Re: Problemi risoluzione dinamica

Messaggio da Alv »

Codice: Seleziona tutto

res_w=ini_read_real("Resolution", "res_w", 1600)
res_h=ini_read_real("Resolution", "res_h", 900)

if (fullscreen) {
    window_set_fullscreen(true);
    display_set_size(res_w,res_h);
}
aspect=res_w/res_h;
room_set_view(room_gioco,0,true,0,0,aspect*768,768,0,0,
    res_w,res_h,32,32,-1,-1,noone);
room_goto(room_gioco);
Puoi impostare la view per tutte le room del gioco, chiamare room_restart quando l'utente cambia risoluzione dal menù impostazioni.
Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Problemi risoluzione dinamica

Messaggio da Barnack »

Quella funzione mi piace, grazie per avermela fatta scoprire...
MA
il problema persiste, in 16x9 cambia la finestra ma il gioco rimane 4x3.
In più con questa funzione sparisce anche la GUI

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#


Avatar utente
Alv
Membro
Messaggi: 131
Iscritto il: 14/11/2014, 22:33
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Località: Sicilia
Contatta:

Re: Problemi risoluzione dinamica

Messaggio da Alv »

Barnack ha scritto:Quella funzione mi piace, grazie per avermela fatta scoprire...
MA
il problema persiste, in 16x9 cambia la finestra ma il gioco rimane 4x3.
In più con questa funzione sparisce anche la GUI
Strano: da me funziona (Game Maker 8.0). Forse devi attivare le view: room_set_view non le attiva in automatico.
Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Problemi risoluzione dinamica

Messaggio da Barnack »

si, le view sono attive :\

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#


Arcade Blues
Newbie
Messaggi: 47
Iscritto il: 09/01/2016, 12:05
Specialità: Sogno a occhi aperti
Uso: GM:Studio 1.4 Master
Località: Napoli
Contatta:

Re: Problemi risoluzione dinamica

Messaggio da Arcade Blues »

La Grafica in un gioco 2d è generalmente realizzata ad una risoluzione specifica e mi domando quale sia la tua risoluzione nativa e non ho ben chiaro quale sia il comportamento che desidereresti nel tuo gioco al cambio della risoluzione.
A risoluzione piu' alta vorresti vedere tutto piu' piccolo ma avere una visione piu' ampia?
Vorresti vedere tutto uguale ma ad una risoluzione piu' alta(quindi con pixel replicati nel caso che la tua risoluzione nativa non sia progettata per la risoluzione piu' alta).
Vuoi semplicemente adattare il gioco ai vari aspect ratio e mantenere le visuali pressocchè invariate senza barre e senza deformazioni?
Sono curioso perchè ho progettato un sistema di ridimensionamento che presto postero' qui e sul marketplace e vorrei capire se incontra le esigenze piu' comuni e cosa posso modificare o aggiungere per rendere il tutto piu' completo.
Barnack
Membro attivo
Messaggi: 341
Iscritto il: 03/09/2013, 13:26
Specialità: Programmazione
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Problemi risoluzione dinamica

Messaggio da Barnack »

Arcade Blues ha scritto:La Grafica in un gioco 2d è generalmente realizzata ad una risoluzione specifica e mi domando quale sia la tua risoluzione nativa e non ho ben chiaro quale sia il comportamento che desidereresti nel tuo gioco al cambio della risoluzione.
A risoluzione piu' alta vorresti vedere tutto piu' piccolo ma avere una visione piu' ampia?
Vorresti vedere tutto uguale ma ad una risoluzione piu' alta(quindi con pixel replicati nel caso che la tua risoluzione nativa non sia progettata per la risoluzione piu' alta).
La Grafica in un gioco 2d è generalmente... permettimi di correggere
La grafica di qualsiasi gioco, sia esso 2d o 3d, per computer consente la gestione di risoluzioni multiple fin dai tempi di Windows 98, e anche prima lo faceva la maggior parte dei giochi.

Detto questo, nel mio primo post sono stato abbastanza specifico riguardo a questa tua domanda
"A risoluzione piu' alta vorresti vedere tutto piu' piccolo ma avere una visione piu' ampia?"
Basta rileggere. Se proprio vuoi cito me stesso:
"[...] in modo da mostrare la stessa porzione di livello a chiunque giochi con lo stesso formato."

Alv ha scritto: Strano, da me funziona (Game Maker 8.0). Forse devi attivare le view: room_set_view non le attiva in automatico...
Potresti postarmi esattamente il codice che hai provato su gm8?
Inizio a temere non funzioni su studio ma funzioni su versioni precedenti

Utilizzo
GM: Studio Pro
C++ terminale
Batch
Jaschif

Spoiler
C++ WinApi / DirectX
C#


Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: Problemi risoluzione dinamica

Messaggio da Tizzio »

Entro un certo limite sì, Altrimenti utilizzare una risoluzione più grande non avrebbe senso.
Lo scopo di aumentarla è avere maggiori dettagli utilizzando più pixel a schermo.
Ovviamente se il tuo gioco è progettato per 1080p e uno ha uno schermo 4k si attacca, a meno che non sia un gioco 3D/vettoriale