Voisko joku tehdä oppaan/koodivinkin tilemapeista ja scrollauksesta?
Mielellään VB:lle.
No jos ei se onnistu tuon linkin avulla, niin tässä on jotain mitä äkkiä kyhäsin.
Meillä on kenttätaulukko:
dim kentta(20,10) as integer
Visuaalisesti se voidaan esittää seuraavasti:
#################### #################### #################### #################### #################### #################### #################### #################### #################### ####################
Meillä on sitten ongelma, että ruutuun ei kumminkaan mahdu, kuin 10x5 alue, joten me haluaisimme piirtää vaikkapa seuraavanlaisen alueen kartasta:
#################### #################### ####..........###### ####..........###### ####..........###### ####..........###### ####..........###### #################### #################### ####################
Idea on siinä, että et aloita piirtämistä välttämättä kartan vasemmasta reunasta, vaan mahdollisesti jostain keskeltä ja piirrät ruudullisen verran tavaraa siitä eteenpäin.
Eli pidät vaan muistissa ruudun vasemman yläreunan koordinaatit ja siitä voit laskea monenlaisia tarvittavia asioita.
Eli osa kartasta voidaan piirtää esimerkiksi näin:
dim kentta(20,10) as integer dim tile(100) as tile dim screenx as integer 'ruudun vasemman yläreunan x-koordinaatti dim screeny as integer 'ruudun vasemman yläreunan y-koordinaatti dim screenxsize as integer 'x-suunnassa ruudulla näkyvien tilejen määrä dim screenysize as integer 'y-suunnassa ruudulla näkyvien tilejen määrä for x = screenx to screenx + screenxsize for y = screeny to screeny + screenysize 'Tässä sitten piirretään se tile esimerkiksi näin: DrawTile(tile(kentta(screenx + x, screeny + y)), x, y) next y next x
Eipä ollut muuta tekemistä, toivottavasti oli edes jotain hyötyä :)
joo tästä koodista olin lähinnä kiinnostunut. Auttoi varmasti.
Hups, koodiini pääsi lipsahtamaan pieni ajatusvirhe. Piirtämisessä x:stä ja y:stä pitää tietenkin vähentää vielä screenx ja screeny. Lisäksi ne on hyvä kertoa tilejen koilla.
Esim tilen koko 32x32
DrawTile(tile(kentta(screenx + x, screeny + y)), (x-screenx) * 32, (y - screeny) * 32)
Joo kyllähän nuo vähän auttoi.
Yksi ongelma vielä olisi, miten voin leikata tilet oikean kokoisiksi?
Olen jo saanut toimimaan kaiken muun mitä tarvitsen, mutta
DirectX ei osaa piirtää tilejä ruudun ulkopuolelle(varsinkaan vasemman laidan tai ylälaidan ulkopuolelle), joten
ne tulisi leikata sopimaan ruutuun, muuten tulee musta alue täyttämään tätä väliä...
Sehän toteutetaan jotenkin näin että:
If kamera.x < 0 Then Rect.left = Rect.Left - x End If
Ja jos tarvii lisää pohjustavaa koodia, niin tuollapa tuo on: http://gpwiki.org/index.php/RPG_Map ja niinkuin huomaatte, siellähän alhaalla viitataan "see clipping", mutta en löytänyt mitään "clipping"-kohtaa.
Kun nyt olen tässä vaivannut tämän minun projektin ympärillä putkan väkeä niin tässäpä sitten v0.1 tuosta pelistä:
Aihe on jo aika vanha, joten et voi enää vastata siihen.