[ARHIIV] mängumeistrid
Pole sisse logitud. [Logi sisse ]
Mine lehekülje algusesse
Prinditav versioon | Telli teema e-mailile | Lisa lemmikutesse  
Backgroundi dubleerimine
Perfoon
Level 5
Avatar

Liitunud: 11.8.2008
Postitusi: 192
[EEMAL]




postitati 14.12.2009 20:35 Tsiteeri
Backgroundi dubleerimine



Niisiis, ehitan GM'is map editori ja map'i ennast joonistan selleks eraldatud ala sisse. Map ise on suvalise suurusega ja seda saab kerida vastavalt ala äärtes olevatest scrollbar'idest. Loogiline! Nüüd üritan ma aga täita seda map'i tekstuuriga, esialgu oleks väga hea, kui tekstuuri on 1 ja see tileb ennast vastavalt. Tekstuuri laen sisse background faili.
Vot nii ja nüüd olen ma probleemi ees:
Nimelt esimene võimalus on seda backgroundi vastavalt kahe for tsükliga sinna ala sisse joonistada. Samas, kui ühe tüki suurus oleks näiteks 32 pikslit siis joonistaks ta selle ala sisse neid umbes 30*30 tükki mis tähendab väga madalt fps'i.
Niisiis otsin alternatiivi.
Üks võimalus oleks korraga kokku panna tervet map'i hõlmav background, image või surface ja sellest sobiv tükk välja lõigata. Uurisin help'i ja ei leidnud ühtegi funktsiooni millega saaks niimoodi tükikestest backgroundi kokku panna.
On olemas ka selline hea protseduur nagu draw_backround_tiled_ext või midagi sarnast aga sellest ei anna tükikest välja lõigata.

Ühesõnaga täielik jama ju. Kusjuures ma üritan vältida seda, et ma peaksin selle backgroundi tegemiseks terve ekraani täis joonistama ja sellest pilti tegema.

Ootan teie häid lahendusi sellel probleemile.


Teine küsimus tuleb seoses 3d'ga. Nimelt kui ma olen 3d reziimist väljunud, siis 2D logiseb siit sealt. Näiteks draw_rectangle_color() protseduuri joonistatud kast ei ole enam sujuv, vaid ta joonistab selle vaid kahe värviga mis poolitavad diagonaalis antud kasti. Samuti kasutan ma mingit windoosa objektide joonistamise GEX'i (väga hea gex on) ja selle joonistatud objektid on natuke imelikud ning teksti font on paigast ära.
Igatahes, kui keegi teab jamast seoses 3d'st väljumisega midagi siis antku märku. Vb olen ma unustanud ma väljudes midagi kinni keerata.

Väike screenshot ka:
kuhuks kui ma liiga segaselt kirjeldasin.
http://img2.imageshack.us/img2/5073/editorb.th.png
siin on näha ka seda draw_rectangle_color() glitch'i.
Kambakas I: jorss, PerfoonEmo1: icedude, valterEmo2: InCreatorEmo3: emoemo<br>
Vaata kasutaja profiili Saada kasutajale e-mail Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
valter
1


Liitunud: 19.1.2005
Postitusi: 1553
[EEMAL]




postitati 15.12.2009 15:33 Tsiteeri


pmst sa tahad mingit backgroundi juppideks teha?

ütleme et on 2000x2000 background ja ta tehakse 1000x1000 suurusteks juppideks, siis 2000x2000 backgroundist on 4 1000x1000 suurust bmp faili ?

http://www.dmgamez.pri.ee/GRONGO1/uss_walk.gif
Ralli I: dm11Veresaun III: dm11<br>Emo1: icedude, valter8bit I: võistlus kestabAktsioon III (2009): -<br>Aasta mäng 2009: Pilvemees, valter<br>Vabateema II: valter
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
Perfoon
Level 5
Avatar

Liitunud: 11.8.2008
Postitusi: 192
[EEMAL]




postitati 15.12.2009 15:40 Tsiteeri


Ei. Ma tahan juppe backgroundiks teha (jupp nt. 100*100 ja bacground 1000*1000) või teda tilema joonistada, nii et ta mahuks mingi ala sisse (mitte terve ekraan täis).
Kambakas I: jorss, PerfoonEmo1: icedude, valterEmo2: InCreatorEmo3: emoemo<br>
Vaata kasutaja profiili Saada kasutajale e-mail Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
Perfoon
Level 5
Avatar

Liitunud: 11.8.2008
Postitusi: 192
[EEMAL]




postitati 15.12.2009 16:54 Tsiteeri


see surface teema on paras müsteerium, ma uurisin seda ka aga tundub, et surfacit ei saa niimoodi tükkidest kokku joonistada ilma et need kõik ekraanime joonitada.

Samas DM11 pakkus välja view'i idee ja see läheb varsti katsetamisele. Nimelt joonistada sinna sisse uus view millel on juba tilev background.

Samuti lahendasime ära 3D'st 2D'sse minnes tekkinud graafika moonutused.

Nimelt:
Nuppudele valged ribad ja fondi iseeneslik boldimine tulenes sellest,et interpolation peaks olema:
texture_set_interpolation(false);
Tõenäoliselt mingi DLL'i bugi

Ning see et selle kena rectangeli värvid enam sujuvad ei olnud tulenes sellest ,et shading oli maha võetud, ehk siis camera destroy eventisse:
d3d_set_shading(true);
Kambakas I: jorss, PerfoonEmo1: icedude, valterEmo2: InCreatorEmo3: emoemo<br>
Vaata kasutaja profiili Saada kasutajale e-mail Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
InCreator
baksjor!
Avatar

Liitunud: 18.12.2005
Postitusi: 1230
[EEMAL]




postitati 15.12.2009 21:39 Tsiteeri


Tsitaat:
"...et surfacit ei saa niimoodi tükkidest kokku joonistada ilma et need kõik ekraanime joonitada..."


Saab ikka küll. Surface on sisuliselt videomälu lehekülg või bitmap-massiiv ja peamine kasu selles ongi, et midagi kusagile "väljalülitatud monitorile" joonistada, seal sättida-lappida ja siis juba tulemust päriselt näidata. Seepärast ma seda nii palju kasutangi (õigemini "kirungi", sest GMis on surface ebastabiilseim asi üldse)

kasutus umbes selles järjekorras ja funktsioonidega:
surface_create - tee surface
surface_set_target(surf) - peale seda käsku järgnevad joonistamised ükskõik mis käsuga lähevad otse surfacele
surface_reset_target() - lülitab "normaalse" joonistamise tagasi. Mis surfacele vahepeal pandi, see jääbki sinna. Muutmiseks pead jälle joonistamise vastava surface peale lülitama.

Vaadata saab draw_surfacega või tükkideks lahutamiseks näiteks sprite_create_from_surface jne käsud.

Näiteks "Ilus Pets"-mängus on juuksed spritena ja ühevärviliselt sama kuju surfacena. Lõigates lisab surfacele valge tüki "lõigatud" kohta, siis teeb muudetud (lõigatud) surface jälle sprite maskiks, muutes valge värviga osa transparentiks. Samamoodi töötaks näiteks Wormsi kloonis maastiku hävitamine või muud taolist.

Aga nimetatud mänguga oli näha, kui paljudel jukerdas. Ilmselt juku ja läpaka-omanikel, aga nendega tuleb siiski veel arvestada.

Kuidas 3D surfacedesse suhtub, ei tea.

A window is technically a wallhack.
Emo2: InCreator
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Perfoon
Level 5
Avatar

Liitunud: 11.8.2008
Postitusi: 192
[EEMAL]




postitati 16.12.2009 11:20 Tsiteeri


Huvitav... tänan InC seda surface asja on hea teada. Ma praegu mõtlen, et kui surfaced on tohutult palju kiiremad kui joonistamine siis äkki peaks kogu väljundi nii tegema, et kõigepealt joonistab ekraani sisu videomälus olevale surfacile ja siis alles ekraanile. Näiteks minu dünaamilise maailma puu generaator raiskas FPS'i just seepärast et ta pidi kohutavalt palju pilte ühe puu tegemiseks joonistama.

Seevastu oma ruumi teen ma vist siiski view'ga. Nimelt editori kõrvale joonistab map'i (ruumist välja), seejuureseditori sees olev view vaatab seda. Antud variant lihtsustab kõvasti ka väljastamiseks vajalikku informatsiooni, tuleb vaid kontrollida, et väljastataks vaid neid pilte mis on view'i sees.

Ma ei ole veel eriti uurinud, aga kas keegi teab kas surface't saab joonistada ühest ruumi kordinaadist teiseni. Ilma, et ma ei peaks view'iga sinna rändama?
Kambakas I: jorss, PerfoonEmo1: icedude, valterEmo2: InCreatorEmo3: emoemo<br>
Vaata kasutaja profiili Saada kasutajale e-mail Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
InCreator
baksjor!
Avatar

Liitunud: 18.12.2005
Postitusi: 1230
[EEMAL]




postitati 16.12.2009 13:53 Tsiteeri


JA klooni map editor töötas nii, et erineva kuju ja alphaga tiled joonistasin layeritena surfacele (näiteks kandiline muru, keskele ümar liivalapp ja lõpuks otsa veel käänuline tee), siis - täpselt nagu Photoshopi "flatten image" funktsioon toimib, vajutasin surface plaks lapikuks kokku (üheks spriteks) ja lõikasin tükkideks. Et mängus kiire oleks!

Map editor andis välja siis lihtsa 3200x3200 bmp faili.

Mäng laadis selle faili ja tükeldas ära. Tükkide sprite_indeksid reastas ds_grid tabelisse.

Ja mängus joonistab ekraanile view täis ja natuke view ümber tükke (et kiiresti scrollides paljast ruumi ei näeks). Raske küsimus oli, kui suured tükid näiteks 3200x3200 ruumi ja 640x480 view puhul oleks optimaalsed, tants käib ümber draw_sprite käskude arvu stepis JA videomälu kasutuse. Tuleb natuke retsida üht ja natuke teist.

Suht hea fps jäi 128x128 ja 256x256 tükkidega. Õige sprite vastavale view asukohale ruumis sättis ds_grid abil lähima joonistatava tileni ümardades.

Sellise süsteemi puhul ei loe jooksvalt üldse, kui suur on ruum. Võib ka 99999x99999 olla, kiirus ei muutu. Lihtsalt rohkem videomälu kulub (rohkem tükke) ja seega on ruumi laadimine-tükeldamine tiba pikem.

Aga kordan: surfaced on ära neetud ja suvaliste, arusaamatute kokkujooksmiste ja arusaadava veateateta bugide paradiis. Üks lihtne viis suvaliselt Windows 0.01 fps peale lasta on proovida teha tühjast surfacest transparent sprite...

A window is technically a wallhack.
Emo2: InCreator
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
Perfoon
Level 5
Avatar

Liitunud: 11.8.2008
Postitusi: 192
[EEMAL]




postitati 16.12.2009 17:27 Tsiteeri


Dam, nüüd ma ei teagi kumb mõistlikum on, kas joonistada kaart editori kõrvale ja sellest view'iga tükk editori'sse kuvada, või joonistada surfacele ning sellest tükk editori kuvada. Kusjuures esimese variandi puhul oleks ruumi suurus ikka üks ekraanitäis, kuna tegelikult saab ka ruumist välja asju joonistada ja sealt kuvada.
Kambakas I: jorss, PerfoonEmo1: icedude, valterEmo2: InCreatorEmo3: emoemo<br>
Vaata kasutaja profiili Saada kasutajale e-mail Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
Perfoon
Level 5
Avatar

Liitunud: 11.8.2008
Postitusi: 192
[EEMAL]




postitati 29.12.2009 10:54 Tsiteeri


Eino tore tore. Vastikud surfaced. Nimelt nüüd, kus ma olin juba terve hunniku kõiksugu elutähtsaid, kuid vastikuid algoritme map editori jaoks valmis kirjutanud, selgus, et surfaced on limiteeritud suurusega ja seda juba umbes 5000 piksli juures. Nimelt suuremat surfacit kuvades või sinna joonistades (ma ei tea täpselt kummas see viga on) ta hakkab seda väiksemaks resizema. No kurja, minu editor mille üks mini jupp on juba suurusega 128 pikslit ei funktsioneeri nõnda. Ja selleks et jamada n^2 arv surfacitega on küll liig mis liig, arvestades, et mul on ühegagi paksu pahandust. Nii et jah, tegin suure töö ära, et nüüd kogu kupatus minema visata.
Kambakas I: jorss, PerfoonEmo1: icedude, valterEmo2: InCreatorEmo3: emoemo<br>
Vaata kasutaja profiili Saada kasutajale e-mail Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i
InCreator
baksjor!
Avatar

Liitunud: 18.12.2005
Postitusi: 1230
[EEMAL]




postitati 29.12.2009 12:04 Tsiteeri


Järgmine kord loe mu posti viimast lauset ka =D
(oops, shit, ma ei pidanud postitama)

A window is technically a wallhack.
Emo2: InCreator
Vaata kasutaja profiili Otsi kasutaja postitusi Saada privaatsõnum
valter
1


Liitunud: 19.1.2005
Postitusi: 1553
[EEMAL]




postitati 29.12.2009 18:09 Tsiteeri


surfaced tegelikult iseenesest ei ole limiteeritud, arvuti mälu lihtsalt paneb oma limiidi peale.

Näiteks ma kunagi proovisin 5000x5000 surface teha, ilusti tegi ära, aga siis proovisin sama asja natuke lahjema arvuti peal, siis see ei saanud hakkama. scales selle 5000x5000 väiksemaks või siis croppis ära.

1024x1024 surfaced oleksid vast kõige mõistlikumad, lahjemad arvutid saavad ka nendega hakkama.

http://www.dmgamez.pri.ee/GRONGO1/uss_walk.gif
Ralli I: dm11Veresaun III: dm11<br>Emo1: icedude, valter8bit I: võistlus kestabAktsioon III (2009): -<br>Aasta mäng 2009: Pilvemees, valter<br>Vabateema II: valter
Vaata kasutaja profiili Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum
Perfoon
Level 5
Avatar

Liitunud: 11.8.2008
Postitusi: 192
[EEMAL]




postitati 30.12.2009 11:11 Tsiteeri


InC. ma lugesin su viimast lauset aga ei võtnud seda päris täie tõsidusega, olles eelnevalt manuaalist lugenud, et surfacitega võib tulla probleeme, kuna nad kaovad vahel mälust ära.
Aga jah, nüri nüri ta on. 1024*1024 oleks muidugi mõistlik aga tekib küsimus kas n^2 arv surfacit on mõistlik. Selles suhtes, et mida küll mälu teeb kui neid nii palju on. Isegi kui see töötab siis tuleb hakata rehkendama, et ta pidevalt õige arvu neid ekraanile joonistaks (mitte et draw_surface_PART_ext iseeneset midagi mugavat oleks). Samuti kui joonistada neile midagi siis tuleb olla hoolikas, et üleminekukohad kinni mätsida. Oh jah, ma veel kaalun kas see asi, mida ma teen, on nii mõistlik et sellega jamada. Iseenessest tulemus, mida ma saavutada tahan oleks õnnestumise korral päris cool.

Nonii, üritasin siiski osadeks jagada, aga siinkohal tuleb ikkagi limiit ette. Nimelt array mahutab mingi piiratud koguse ühikuid aga probleem on selles, et kui ma kasutan arrayd surfacite hoidmiseks, siis lähevad limiidi sisse arvesse kõip pikslid ma oletan ja suurema te mõõtude juures jätab ta surfaced lihtsalt tegemata. Oskab keegi mulle midagi paremat välja pakkuda, kuidas neid GM´is veel hoida. Pointerid ja kirjeid ju ei ole :(
Kambakas I: jorss, PerfoonEmo1: icedude, valterEmo2: InCreatorEmo3: emoemo<br>
Vaata kasutaja profiili Saada kasutajale e-mail Külasta kasutaja kodulehte Otsi kasutaja postitusi Saada privaatsõnum Vaata kasutaja MSN-i

Hetkel loevad seda teemat:
Mitte ühtegi - 1 külaline

Mine lehekülje lõppu





Foorumi algbaas põhineb XMB mootoril, modifitseeritud Valter Pundi poolt
Kodulehekülg on tehtud Valter Pundi poolt vpundi ät gmail punkt komm