Fixnutie veľkých obrazoviek na malom rozlíšení

Sem vkládejte editovatelné kusy kódu a tutoriály.
Odpovědět
Uživatelský avatar
ipq
Příspěvky: 921
Registrován: srpen 15, 2011, 7:31 pm
Bydliště: Petržalka

Fixnutie veľkých obrazoviek na malom rozlíšení

Příspěvek od ipq » červen 13, 2012, 11:30 pm

zdar, možno už nie som taký aktívny ako predtým ale to neznamená že s tým by som úplne skončil, pokúšam sa držať a niečo nové objavovať furt i keď to odfláknem IT webmi a mojou uzavretou fantáziou ale k veciam.

Ako ste si mohli všimnúť alebo ste to zažili, väčšinou sa stalo to, že ste si vytvorili nejakú hru, ktorá bežala v natívnom rozlíšení trebárs 720p(rozlíšenie: 1280×720) alebo podľa vášho monitora ale napr. iný si začali sťažovať, že ďalej s kurzorom nedočiahnu. Dôvodom je obrazovka. Ako si väčšinou všimnete, väčšina hier majú(najviac 3D)možnosť meniť rozlíšenie a pokiaľ je obrazovka malá, prispôsobí sa a než by došlo k rozhádzaniu pixelov alebo klikacích bodov, je to tím, že hra je prispôsobená na určité rozlíšenia(i keď na pevno). U Game Makeru je ten problém, že ak je obraz väčší než samotné rozlíšenie, tak ho doslova že "svŕkne"(žiadny aspect ratio), že sa trochu rozhádžu pixely ale to najhoršie, klikacie body ostávajú na mieste, takže ak sa budete chcieť dostať s kurzorom ďalej, rozlíšenie vás nepustí(dokonca rozlíšenie limituje i rozťahovanie okien).

I Keď mám pocit, že už raz som písal o tom niečo, ale tam išlo o fix grafiky a bodov, toto je trochu iné.

Pre detail a porovnanie rozdielu rozlíšení som vybral hru Deadly Steps 4 - The Showdown, ktorú som spustil na svojom počítači a na netbooku, tu je porovnanie.
Poznámka: musel som použiť tag spoiler ako zakrývač/odokrívač kvôli tomu, že VCH nepodporuje automatické scalovanie.
Stolný počítač(original rozmer)
Spoiler: ukázat
Obrázek
Keď si všimnete, obraz je ostrý, nezmenený pomer strán, všetko originál. Keď si všimnete ten zelený kurzor, môžem ísť s ním až na koniec obrazovky.
netbook(1024×600)
Spoiler: ukázat
Obrázek
Na netbooku(okrem dlhého načítania) sa to zmenšilo na to rozlíšenie, pixely sú rozhádzané a keď si všimnete toho zeleného kurzora, ďalej už nedočiahne, tam kde mieri je limit rozlíšenia, nedostane sa ďalej.

Sú dva spôsoby ako to fixnúť aby kurzor mohol dočiahnuť až dole i pri malom rozlíšení i takto:
Spoiler: ukázat
Obrázek
(foto-úprava ako ukážka fixu)

Objektový kurzor
Funguje to na princípu, že ak používate objekt ako kurzor len ako ozdobku, tak ho môžete začať používať i ako klikací bod, len si musíte spraviť masku t.j. 1×1 kolízaní pixel v celom obrázku vo veľkosti kurzora a do stepu stačí vložiť toto:

Kód: Vybrat vše

if display_get_width()<view_wport[0] then
x=mouse_x/display_get_width()*view_wport[0]
else
x=mouse_x;
if display_get_height()<view_hport[0] then
y=mouse_y/display_get_height()*view_hport[0]
else
y=mouse_y;
A u klikacích bodov stačí nastaviť ak ten objekt je u nich a klikne sa s tlačidlom myší, tím sa eliminuje ten problém. Ak je to vo viewu, vybral som port typy, lebo s nimi sa pracuje len minimálne, takže odtiaľ býva väčšia pravdepodobnosť výberu pomeru obrazovky. Pokiaľ je to len room bez viewu, treba to nahradiť view_wport na room_width a view_hport na room_height a hotovo. Dôvod, prečo je tam aj poistka(tá podmienka), je to kvôli tomu, že ak je rozlíšenie totožné alebo väčšie než hracia plocha, tak to už nieje potreba, inak by sa kurzor začal až moc vychyľovať.

Wiev rozmer
Druhá časť toho môže na jednej strane vám to zjednodušiť ale aj trochu sťažiť, ide o princíp, že sa nastaví skrz skript room_set_view veľkosť viewu resp. u port bodoch, vďaka čomu, bude obraz síce tiež tak isto svrknutý ale hlavnou výhodou bude, že klikacie body budú dostupné po celéj obrazovke. Pokiaľ používate režim zobrazovania Aspect ratio, je potreba si uvedomiť, že to si bude vyžadovať kalkulácie, aby sa obraz mohol zmenšiť do požadovanej veľkosti. Ale ak používate full scale režim, kalkulácie niesu potreba. Pre istotu, tu je script pre kalkulovanie veľkosti, vracia to premenné RatioWidth a RatioHeight už s vykalkulovanímy veľkosťami pre zmenšenie obrazu cez pomer strán.

Kód: Vybrat vše

//set_aspect_ratio(old_width,old_height,new_width,new_height);
var sw,sh;
sw=argument0/(argument0/argument2);
sh=argument1/(argument0/argument2);
if(floor(sh)>display_get_height()){
sw=argument0/(argument1/argument3);
sh=argument1/(argument1/argument3);
RatioWidth=sw;
RatioHeight=sh;
}
else{
RatioWidth=sw;
RatioHeight=sh;
}
Tento script je dobrý, ak chcete zmeniť rozlíšenie u obrazu cez view. Teraz ukážka zmeny veľkosti viewu u všetkých roomoch:

Kód: Vybrat vše

var RatioWidth,RatioHeight,pocet,miestnost,i;
set_aspect_ratio(1280, 1024, display_get_width(), display_get_height());
pocet=4;
miestnost[0]=rm_hala1;
miestnost[1]=rm_hala2;
miestnost[2]=rm_hala3;
miestnost[3]=rm_uvod;
for(i=0;i<pocet;i+=1)room_set_view(miestnost[i], 0, 1, 0, 0, 1280, 1024, 0, 0, RatioWidth, RatioHeight, 1280/2, 1024/2, -1, -1, obj_hrac);
Toto je len menia demonštračná ukážka toho ako môžete jednoducho zmeniť viewy vo viacerých roomoch tak a než by ste museli na každom roome samostatne zadávať hodnoty a zapínať view, takto si tím ušetríte prácu(ušetriť sa dá i s titulkom na okne ak nechcete všade ručne meniť nápisy).

Čo sa týka už pixelov, stačí použíť buď texture_set_interpolation(1) alebo do Global Game Settings > Graphics > zaškrtnút Interpolate Colors Bettween pixels. U použití týchto dvoch by nemal vznikať ani problém s pixelmi.

Keby ste niečomu nechápali alebo nevedeli, môžete s tu spýtať niečo.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti