Kuinka voisi toteuttaa uuden formaatin teon? Tässä tapauksessa kartan.
Olen lueskellut vähän Tilesterin manuskasta tile-mappi asioita joista ei varmaan ole kovin paljon hyötyä.
Tarkoituksena olisi tehdä kuva-kartta formaatti jota voisi käsitellä samaan tapaan kuin tile-mappia.
Eli kuva jossa on kerroksia ja jolle voisi laittaa törmäystunnistuksen ja myös muuttaa karttaa lennosta.
Minulla ei ole mitään hajua mistä pitäisi aloittaa ja en myöskään osaa muita kieliä kovin hyvin,
joten apua tarvis
Uuden formaatin teko
-
- Advanced Member
- Posts: 281
- Joined: Sat Jun 28, 2008 5:19 pm
- Location: Hämeessä miä
- kaneli2000
- Guru
- Posts: 1059
- Joined: Mon Mar 17, 2008 2:40 pm
- Location: Lempäälä
Re: Uuden formaatin teko
Omassa projektissani Fade.ssa piilomainonta FTW käytän kolmea kuvaa ja .fmd-tiedostoa (Fade. Map Data), joka luodaan itsetekemälläni (CoolBasic) level editorilla. Idea piilee siinä, että yhdestä katsotaan kuvien törmäykset, yhdesta, miltä kenttä läyttää edestä ja yhdestä, mikä on kentän backround. FMD-filusta taas katsotaan level editorilla laitetut entityt ja muut härpäkkeet kaavalla:
Ei moiseen uutta formaattia tarvitse.
Code: Select all
If EOF(file) = False
entityname$ = ReadLine(file)//entityn nimi
entityx = ReadShort(file)//x-koordinaatti
entityy = ReadShort(file)//y-koordinaatti
//tehdään uusi entity tietojen mukaan ja posataan se
EndIf
I see the rainbow rising
Re: Uuden formaatin teko
Jos teet oman karttaformaatin, joudut luonnollisesti tekemään omat funktiot, taulukot ym. sen hallintaan. Homma menee periaatteessa kuten kaneli sanoi. Tilekarttojen (tai vastaavanlaisten) kanssa kartat ovat täsmällisiä datapaketteja, joissa on enemmän tai vähemmän juuri ne tiedot mitä tarvitaan. Ero siis tuohon kanelin mappisysteemiin on se, että siinä missä .fmd-tiedostossa voi olla dynaaminen määrä entityjä, tilekartassa layereiden ja niiden datan määrä on aika vakio. Eli luokkaa karttaLeveys * karttaKorkeus.
Homma menee tilekarttojen kanssa niin, että ensin kirjoitat kartan leveyden ja korkeuden ylös, jonka jälkeen yhden tilen leveyden ja korkeuden. Sen jälkeen layereiden määrän. Lopuksi kirjoitat kaikkien layereiden kaiken datan ylös. Tietenkin voit kirjoittaa dataa missä järjestyksessä haluat, kunhan luet sen samassa järjestyksessä. Huomaa kuitenkin, että kannattaa kirjoittaa ja lukea kartan koko ja layereiden määrä ennen itse tilejen dataa. Toisinpäin se ei oikein ole mahdollista.
Seuraavassa esimerkissä Hiiri1 luo dataa "1" layeriin "0" (näkyy punaisena laatikkona). F5 tallentaa kartan, f9 lataa sen. Älä yritä ladata karttaa ennen kuin olet tallentanut.
Näkyvän datan (päällys- ja taustakerros) kanssa kannattaa käydä läpi vain ruudulle piirrettävä osio taulukosta. Muu data kannattaa tarkastaa vain jos pelihahmo törmää / on vuorovaikutuksessa datan kanssa. Tuossa minun (erittäin yksinkertaisessa) esimerkissäni kaikki data käydään läpi riippumatta kartan sijainnista, eikä minkäänlaista hit- tai data-kerrosta ole. Vain neljä taustakerrosta.
Homma menee tilekarttojen kanssa niin, että ensin kirjoitat kartan leveyden ja korkeuden ylös, jonka jälkeen yhden tilen leveyden ja korkeuden. Sen jälkeen layereiden määrän. Lopuksi kirjoitat kaikkien layereiden kaiken datan ylös. Tietenkin voit kirjoittaa dataa missä järjestyksessä haluat, kunhan luet sen samassa järjestyksessä. Huomaa kuitenkin, että kannattaa kirjoittaa ja lukea kartan koko ja layereiden määrä ennen itse tilejen dataa. Toisinpäin se ei oikein ole mahdollista.
Seuraavassa esimerkissä Hiiri1 luo dataa "1" layeriin "0" (näkyy punaisena laatikkona). F5 tallentaa kartan, f9 lataa sen. Älä yritä ladata karttaa ennen kuin olet tallentanut.
Code: Select all
SCREEN 800, 600
Global gMapWidth, gMapHeight, gLayerAmount, gTSizeX, gTSizeY
//kartan tiedot
gMapWidth = 20
gMapHeight = 20
gTSizeX = 32
gTSizeY = 32
gLayerAmount = 4
//Taulukko kartalle
Dim map( gMapWidth - 1, gMapHeight - 1, gLayerAmount - 1 )
Repeat
//Luodaan dataa "1" layeriin "0"
If MouseDown( 1 ) Then
If MouseX() > 0 And MouseY() > 0 And MouseX() < gMapWidth * gTSizeX And MouseY() < gMapHeight * gTSizeY Then
dX = MouseX() / gTSizeX
dY = MouseY() / gTSizeY
map( dX, dY, 0 ) = 1
EndIf
EndIf
//Piirretään kaikkien layereiden kaikki data näytölle.
For i = 0 To gLayerAmount - 1
For x = 0 To gMapWidth - 1
For y = 0 To gMapHeight - 1
If map( x, y, i ) <> 0 Then
Color cbRed //<-Tällä hetkellä mikä tahansa nollasta eroava data näytetään punaisena laatikkona
Box x * gTSizeX, y * gTSizeY, gTSizeX, gTSizeY
EndIf
Next y
Next x
Next i
//F5 tallentaa, F9 lataa. Älä yritä ladata jos et ole vielä tallentanut.
If KeyHit( CbKeyF5 ) Then
SaveMyMap( "jee.map" )
ElseIf KeyHit( CbKeyF9 ) Then
LoadMyMap( "jee.map" )
EndIf
Color cbWhite
Text 20, 20, "f5 = save | f9 = load previous map"
DrawScreen
Forever
//Tallentaa kartan
Function SaveMyMap( _name As String )
If lower( Right( _name, 4 ) ) <> ".map" Then
_name = _name + ".map"
EndIf
//Kirjoitetaan kaikki mahdollinen tieto ylös
f = OpenToWrite( _name )
WriteString f, "munKartta"
WriteShort f, gMapWidth
WriteShort f, gMapHeight
WriteByte f, gTSizeX
WriteByte f, gTSizeY
WriteByte f, gLayerAmount
For i = 0 To gLayerAmount - 1
WriteByte f, i
For x = 0 To gMapWidth - 1
For y = 0 To gMapHeight - 1
WriteByte f, map( x, y, i )
Next y
Next x
Next i
CloseFile f
EndFunction
Function LoadMyMap( _name As String )
If lower( Right( _name, 4 ) ) <> ".map" Then
_name = _name + ".map"
EndIf
//Luetaan tietoa.
f = OpenToRead( _name )
If ReadString( f ) <> "munKartta" Then MakeError "Kartta ei yhteensopiva!"
gMapWidth = ReadShort( f )
gMapHeight = ReadShort( f )
gTSizeX = ReadByte( f )
gTSizeY = ReadByte( f )
gLayerAmount = ReadByte( f )
//Tässä alustamme taulukon uudestaan
ReDim map( gMapWidth - 1, gMapHeight - 1, gLayerAmount - 1 )
//Ja kirjoitamme ladatut tiedot taulukkoon.
For i = 0 To gLayerAmount - 1
_curLayer = ReadByte( f )
For x = 0 To gMapWidth - 1
For y = 0 To gMapHeight - 1
map( x, y, _curLayer ) = ReadByte( f )
Next y
Next x
Next i
CloseFile f
EndFunction
-
- Advanced Member
- Posts: 364
- Joined: Wed Dec 03, 2008 3:48 pm
- Location: Turku
Re: Uuden formaatin teko
Offtopic:Jonez wrote:Jos teet oman karttaformaatin, joudut luonnollisesti tekemään omat funktiot, taulukot ym. sen hallintaan. Homma menee periaatteessa kuten kaneli sanoi. Tilekarttojen (tai vastaavanlaisten) kanssa kartat ovat täsmällisiä datapaketteja, joissa on enemmän tai vähemmän juuri ne tiedot mitä tarvitaan. Ero siis tuohon kanelin mappisysteemiin on se, että siinä missä .fmd-tiedostossa voi olla dynaaminen määrä entityjä, tilekartassa layereiden ja niiden datan määrä on aika vakio. Eli luokkaa karttaLeveys * karttaKorkeus.
Homma menee tilekarttojen kanssa niin, että ensin kirjoitat kartan leveyden ja korkeuden ylös, jonka jälkeen yhden tilen leveyden ja korkeuden. Sen jälkeen layereiden määrän. Lopuksi kirjoitat kaikkien layereiden kaiken datan ylös. Tietenkin voit kirjoittaa dataa missä järjestyksessä haluat, kunhan luet sen samassa järjestyksessä. Huomaa kuitenkin, että kannattaa kirjoittaa ja lukea kartan koko ja layereiden määrä ennen itse tilejen dataa. Toisinpäin se ei oikein ole mahdollista.
Seuraavassa esimerkissä Hiiri1 luo dataa "1" layeriin "0" (näkyy punaisena laatikkona). F5 tallentaa kartan, f9 lataa sen. Älä yritä ladata karttaa ennen kuin olet tallentanut.Näkyvän datan (päällys- ja taustakerros) kanssa kannattaa käydä läpi vain ruudulle piirrettävä osio taulukosta. Muu data kannattaa tarkastaa vain jos pelihahmo törmää / on vuorovaikutuksessa datan kanssa. Tuossa minun (erittäin yksinkertaisessa) esimerkissäni kaikki data käydään läpi riippumatta kartan sijainnista, eikä minkäänlaista hit- tai data-kerrosta ole. Vain neljä taustakerrosta.Code: Select all
SCREEN 800, 600 Global gMapWidth, gMapHeight, gLayerAmount, gTSizeX, gTSizeY //kartan tiedot gMapWidth = 20 gMapHeight = 20 gTSizeX = 32 gTSizeY = 32 gLayerAmount = 4 //Taulukko kartalle Dim map( gMapWidth - 1, gMapHeight - 1, gLayerAmount - 1 ) Repeat //Luodaan dataa "1" layeriin "0" If MouseDown( 1 ) Then If MouseX() > 0 And MouseY() > 0 And MouseX() < gMapWidth * gTSizeX And MouseY() < gMapHeight * gTSizeY Then dX = MouseX() / gTSizeX dY = MouseY() / gTSizeY map( dX, dY, 0 ) = 1 EndIf EndIf //Piirretään kaikkien layereiden kaikki data näytölle. For i = 0 To gLayerAmount - 1 For x = 0 To gMapWidth - 1 For y = 0 To gMapHeight - 1 If map( x, y, i ) <> 0 Then Color cbRed //<-Tällä hetkellä mikä tahansa nollasta eroava data näytetään punaisena laatikkona Box x * gTSizeX, y * gTSizeY, gTSizeX, gTSizeY EndIf Next y Next x Next i //F5 tallentaa, F9 lataa. Älä yritä ladata jos et ole vielä tallentanut. If KeyHit( CbKeyF5 ) Then SaveMyMap( "jee.map" ) ElseIf KeyHit( CbKeyF9 ) Then LoadMyMap( "jee.map" ) EndIf Color cbWhite Text 20, 20, "f5 = save | f9 = load previous map" DrawScreen Forever //Tallentaa kartan Function SaveMyMap( _name As String ) If lower( Right( _name, 4 ) ) <> ".map" Then _name = _name + ".map" EndIf //Kirjoitetaan kaikki mahdollinen tieto ylös f = OpenToWrite( _name ) WriteString f, "munKartta" WriteShort f, gMapWidth WriteShort f, gMapHeight WriteByte f, gTSizeX WriteByte f, gTSizeY WriteByte f, gLayerAmount For i = 0 To gLayerAmount - 1 WriteByte f, i For x = 0 To gMapWidth - 1 For y = 0 To gMapHeight - 1 WriteByte f, map( x, y, i ) Next y Next x Next i CloseFile f EndFunction Function LoadMyMap( _name As String ) If lower( Right( _name, 4 ) ) <> ".map" Then _name = _name + ".map" EndIf //Luetaan tietoa. f = OpenToRead( _name ) If ReadString( f ) <> "munKartta" Then MakeError "Kartta ei yhteensopiva!" gMapWidth = ReadShort( f ) gMapHeight = ReadShort( f ) gTSizeX = ReadByte( f ) gTSizeY = ReadByte( f ) gLayerAmount = ReadByte( f ) //Tässä alustamme taulukon uudestaan ReDim map( gMapWidth - 1, gMapHeight - 1, gLayerAmount - 1 ) //Ja kirjoitamme ladatut tiedot taulukkoon. For i = 0 To gLayerAmount - 1 _curLayer = ReadByte( f ) For x = 0 To gMapWidth - 1 For y = 0 To gMapHeight - 1 map( x, y, _curLayer ) = ReadByte( f ) Next y Next x Next i CloseFile f EndFunction
Sinä varastit multa MAP-formaatti nimi-idean.
Ontopic:
Juuri niin.
En tiedä, mitä tiedän, mutta tiedän ettei se ole mitään kaunista.
I know not what I know, but I do know that it's not beautiful.
I know not what I know, but I do know that it's not beautiful.
- kaneli2000
- Guru
- Posts: 1059
- Joined: Mon Mar 17, 2008 2:40 pm
- Location: Lempäälä
Re: Uuden formaatin teko
Offtopic: Luuletko olevasi maailman ensimmäinen ihminen, joka keksii antaa karttaformaatille nimeksi map?skorpioni-cb wrote:Offtopic:
Sinä varastit multa MAP-formaatti nimi-idean.
I see the rainbow rising
-
- Advanced Member
- Posts: 281
- Joined: Sat Jun 28, 2008 5:19 pm
- Location: Hämeessä miä
Re: Uuden formaatin teko
Minä tosi nero keksin käydä kuvan(1680*1050) pikseli pikseliltä läpi ja tallettaa tiedot tekstitiedostoon...
Kokoa tuolle tiedostolle tuli noin 377 megabittiä ennen kuin CB:tiles ja näytti kolmea tyhjää erroria saman aikaisesti.
Avatessa kaikki muut tekstieditorit tiles paitsi WordPad ja sekin tökki paljon
(kuva) --> http://img190.imageshack.us/img190/749/lololi.png
Johtopäätös: taidan kopioida vähän tuota kanelin ideaa sen verran että käytän vain kolmea eri kuvaa ja teen niille jotain koodissa
Kokoa tuolle tiedostolle tuli noin 377 megabittiä ennen kuin CB:tiles ja näytti kolmea tyhjää erroria saman aikaisesti.
Avatessa kaikki muut tekstieditorit tiles paitsi WordPad ja sekin tökki paljon
(kuva) --> http://img190.imageshack.us/img190/749/lololi.png
Johtopäätös: taidan kopioida vähän tuota kanelin ideaa sen verran että käytän vain kolmea eri kuvaa ja teen niille jotain koodissa
Re: Uuden formaatin teko
Se formaattihan tehdään täysin sen mukaan minkälaiseen peliin / editoriin se on tarkoitettu. En tiedä minkälaisen itse tarvitset, mutta:
Jos haluat cb:n tilekartta-tyylisen, on tuo minun ehdotukseni paras. Jos teet kanelin tyyliin, tulee tiedostoista suurempia kuin minun ehdottamassa tyylissä, koska minun tyylissäni tilen koordinaatit saadaan järjestyksestä jossa data luetaan. Siis periaatteessa tilen koordinaattien tieto vie 0 tavua muistia. Kanelin systeemissä joudut lukemaan myös koordinaattien tiedot, jotka ovat lähes välttämättä muotoa Int, eli 8 ylimääräistä tavua per kuva (on tosin helppoja tapoja miten koordinaatit saisi yhteen tai kahteen tavuun, ja äärimmäisessä tapauksessa tavuun ja shorttiin).
Tietenkin jos teet vähänkään erilaista systeemiä kuin tilekartta, jossa kuvat voivat olla missä tahansa, joudut välttämättä kirjoittamaan koordinaatit erikseen.
Luin tämän viestin uudelleen, ja haluan lopuksi sanoa:
Tämä ei ole mikään kilpailu kenellä (minulla vai kaneli2000:lla) oli paras idea. Kumpikin meistä on "oikeassa". Vain sinä voit olla väärässä, jos käytät yksinkertaisesti huonoa tapaa luoda karttasi. Kannattaa miettiä tarkkaan mitä haluat tiedostosi sisältävän, ja kuinka saat siitä mahdollisimman pienen ja optimoidun. Itse voin vain arvailla mitä haluat tehdä, ja antaa vinkkejä sen mukaan.
Jos haluat cb:n tilekartta-tyylisen, on tuo minun ehdotukseni paras. Jos teet kanelin tyyliin, tulee tiedostoista suurempia kuin minun ehdottamassa tyylissä, koska minun tyylissäni tilen koordinaatit saadaan järjestyksestä jossa data luetaan. Siis periaatteessa tilen koordinaattien tieto vie 0 tavua muistia. Kanelin systeemissä joudut lukemaan myös koordinaattien tiedot, jotka ovat lähes välttämättä muotoa Int, eli 8 ylimääräistä tavua per kuva (on tosin helppoja tapoja miten koordinaatit saisi yhteen tai kahteen tavuun, ja äärimmäisessä tapauksessa tavuun ja shorttiin).
Tietenkin jos teet vähänkään erilaista systeemiä kuin tilekartta, jossa kuvat voivat olla missä tahansa, joudut välttämättä kirjoittamaan koordinaatit erikseen.
Luin tämän viestin uudelleen, ja haluan lopuksi sanoa:
Tämä ei ole mikään kilpailu kenellä (minulla vai kaneli2000:lla) oli paras idea. Kumpikin meistä on "oikeassa". Vain sinä voit olla väärässä, jos käytät yksinkertaisesti huonoa tapaa luoda karttasi. Kannattaa miettiä tarkkaan mitä haluat tiedostosi sisältävän, ja kuinka saat siitä mahdollisimman pienen ja optimoidun. Itse voin vain arvailla mitä haluat tehdä, ja antaa vinkkejä sen mukaan.
-
- Advanced Member
- Posts: 281
- Joined: Sat Jun 28, 2008 5:19 pm
- Location: Hämeessä miä
Re: Uuden formaatin teko
siis selvennykseksi en aijo tehdä tile-kartta tsydeemiä vaan xmap tyylisen jutun
Re: Uuden formaatin teko
Riippuu ominaisuuksista joita tarvitset/haluat toteuttaa. Pelkästään tuhoutuvaan maastoon riittää itse tehty eidtori, joka lopuksi liittää yhdeksi kuvaksi kaikki päällekkäin editorissa näkyvät kuvat/kentän rakennuspalikat. Jos taas haluat hieman monimutkaisemman karttaformaatin esim. itsetehdyillä "objekteilla"Nassi_Setä wrote:siis selvennykseksi en aijo tehdä tile-kartta tsydeemiä vaan xmap tyylisen jutun
jotka reagoivat peliin, joudut tekemään itse karttakuvan lisäksi jonkinlaisen tekstitiedoston, joka sisältää objektien koordinaatit. Lisäksi voit joutua käyttämään monia kuvia yhteen mappiin (eri kerrokset taustassa, itse törmäyskerros [eli maa], pelkästään yhteen mappiin sidotut kuvat yms)
[color=#40BF00][u]koodaaja[/u][/color] wrote:Täyden turvan takaamiseksi avain olisi myös kuljetettava offlinenä suoraan tulevien viestien lähettäjältä niiden vastaanottajalle laitakaupungin hämärissä yöneljältä ja varmistettava, ettei kumpaakaan osapuolta seurata. Popliinitakkia suositellaan.