Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Koodivinkki/opas

Sivun loppuun

Lumi-ukkeli [15.04.2005 16:40:31]

#

Voisko joku tehdä oppaan/koodivinkin tilemapeista ja scrollauksesta?

Blaze [15.04.2005 16:59:20]

#

http://koti.mbnet.fi/kaviaari/Tyo/tile_opas.html

Lumi-ukkeli [15.04.2005 17:07:54]

#

Mielellään VB:lle.

Gaxx [15.04.2005 17:16:40]

#

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ä :)

Lumi-ukkeli [15.04.2005 18:06:17]

#

joo tästä koodista olin lähinnä kiinnostunut. Auttoi varmasti.

Gaxx [16.04.2005 09:17:56]

#

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)

Lumi-ukkeli [21.04.2005 18:50:35]

#

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.

Lumi-ukkeli [27.04.2005 20:01:58]

#

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ä:

http://www.geocities.com/bigenergized/TPv01.zip


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta