2010 m. spalio 14 d., ketvirtadienis

Perėjimai tarp plytelių (antra dalis)

Šiek tiek paskaitinėjau ir paeksperimentavau. Neplanavau šito, bet...
Čia seni perėjimai, tik dabar jie turi alfa kanalą. Praradau kažkiek detalių, tad perėjimai suvienodėjo. Tai galima pataisyti koreguojant atskirą kaukės (mask) failą, bet ne tas svarbu. Nežinau, kiek tai sulėtino piešimą, bet dabar visi perėjimai paišomi kaip turintys alfa kanalą, o jų tokiuose "randominiuose" žemėlapiuose absoliuti dauguma. Iš karto matau sprendimą - žemėlapio krovimo metu sukurti visas perėjimo+apatinės plytelės kombinacijas, o piešimo metu piešti įprastai - be permatomumo. Yra vilties, kad aš veltui bijau ir dėl kelių tailų žaidimo nestabdys, bet faktas, kad viskam kitam (labiausiai AI) jau bus mažiau laiko.

Kaip mano skaitymo bonusas - matau realią galimybę parašyti savo alfa blendingą naudojant tiesioginę prieigą prie bitmapų atmintyje. Tokiu būdu galėtų pavykti optimizuoti allegro blendinimą visokių patikrinimų ir apskritai apsaugų nuo kvailo userio (kurių ten daug) sąskaita.

4 komentarai:

  1. Wait a sec, kokios dar kaukės? Ten softiškai Allegro sufeikina alpha? Papasakok plačiau.

    Visgi manau tau tikrai vertėtų paišyti tailus su kokiu nors 3D libu OpenGL/D3D, bo tos problemos, kurias bandai išspręsti buvo sprendžiamos 1995-1999 metais :) Nebent nori, kad tavo žaidimas veiktų ant 133mhz Pentiumo su Win95. Naudojant 3D libą nereiktų sukti galvos dėl softinio alpha blendingo ir galėtum labiau susikoncentruoti ties geimplėjumi. Papildomi bonusai: daug daug daug spraitų, žaibiškos spraitų transformacijos, pixel-shader efektai!

    O kalbant apie geimplėjų, tipo jau viskas baigta ir liko tik grafika ?

    AtsakytiPanaikinti
  2. Nežinau, ką turi uomenyje dėl "sufeikina"... Jei nustatai color deph 32 bitų (o aš kažkaip kitaip ir nedarau), tai automatiškai gauni aštuonis bitus, kurie gali būti panaudoti alpha kanalui. Vaizdavimas su alfa nuo vaizdavimo be alfa iš principo skiriasi tuo, kad pirmuoju atveju dar reikia skaityti iš bitmapo, į kurį ruošiesi rašyti, o tai, kaip veteranai sako, labai lėta.

    Dabar dėl kaukių, nes matau, kad visai mažai apie tai parašiau. Anksčiau, kai man reikėjo nupaišyti permatomą spraitą, aš nustatinėjau, kiek jis turi būti permatomas, bet tas galiojo visam spraitui, todėl šio efekto per daug nenaudojau (nebent va minotauro šešėliui animacijų demo arba kokiam "nematomumui"). Dabar pagaliau radau info, kaip bet ką įkišti į spraito alfa kanalą ir atitinkamai piešti su skirtingomis alfa vertėm. Žinojau, kad tai turi egzistuoti, bet negalvojau, kad taip paprasta.:) Kauke vadinu juodai baltą (realiai mėlynai baltą, nes naudojami tik 8 jauniausi bitai) paveiksliuką, kurį "įkišu" į tailo alfa 8 bitus.

    OpenGL/D3D - tiesus kelias išpindėjimo link ir tu po truputį mane ten stumi.;) Teisingai pastebėjai dėl geimplėjaus - nė velnio jis dar nebaigtas, aš tik norėjau, kad jau būtų matyti, kas žaidime laksto ir kur, o jau klimpstu po truputį ir pvz., AI tobulinimas jau kurį laiką sustojęs. "Trumpai" tiek.:)

    AtsakytiPanaikinti
  3. Išpindėjimo ? Kodėl taip manai :]] Imho 3d libas - tiesiausias kelias iki optimalaus geimo veikimo ant šiuolaikinio hardwaro.
    Niekur aš nestumiu :) Jei sieki, kad žaidimas veiktų ant hardwaro, kuris nepalaiko 3D arba palaiko prastai (pavyzdžiui kokie senesni netbookai su Intel chipais ir Linux/FOSS draiveriai) tai tik sveikintina. Bet ar tikrai to nori ? :)

    OK, nuo šiol komentuosiu kaip geimeris :)

    AtsakytiPanaikinti
  4. Išpindėjimo, nes man atrodo naudinga visada turėti uomenyje, ką tu gali padaryti duotom sąlygom ir ko negali. 3D libai smarkiai pagerina sąlygas. Jei daryčiau žaidimą pardavimui, be abejonės naudočiau 3D, nes tada žaidimas būtų "kietesnis" ir geriau parduodamas. O šiaip čia kaip konkursas pačiam sau - padaryti kažką gražaus ir įtraukiančio su tam tikrais apribojimais. Žmonės kažkada net ne pirmiem pentiumam žaidimus rašė, o dar didesniems dinozaurams.

    Kiekvienas praranda teisę komentuoti kaip geimeris iki releaso, jei perskaitė bent vieną įrašą - aš čia paslaptis išduodu.:D

    AtsakytiPanaikinti