Varmaan kaikki ovat joskus pelanneet peliä jossa näytettään paras aikasi siten että samalla kun pelaat siinä liikkuu auto sen mukaan miten olit parhaan pelin pelannut. Haluaisin tietää miten tämä on toteutettu ja miten voin toteuttaa sen netin kautta. Minun pitäisi saada se toimimaan siten etää ensin yksi pelaaja pelaa kierroksen sitten tulee toisen pelaajan vuoro ja kun hän ajaa kierrostaan hän näkee haamu auton joka liikkuu tismalleen samalla tavalla kuik pelaajan 1 auto. Ainoa idea mikä tuli mieleen oli että tallennan tietokantaan autob paikan sekunnin välein ja sitten seuraava pelaaja lukee niitä ja syöttää niitä tietoja haamuautolle.
IP1917,
Minulla on peli tallenne ilmojein pilotit pelissä, minä voin pelin jälkeen katsella, videon pelistä, pelissä on aina 3 - 7 kaksitasokonetta molemmin puolin ja kaikki ammukset ja savuhattarat myös.
Tämän videon minä tallennan seuraavasti.
Minä teen peli rungon joka työntää lentokoneita savuja ja ammuksia eteenpäin, tämä peli runko sisältää satunnais lukuja, omasta random functiostani, nämä random juuri arvot on hyvä tallentaa video headeriin.
Ainoa mitä minun täytyy tallentaa pelin aikana on pelaajan tekemät hiiri liikkeet, tämä sama peli runko työntää kaikkea grafiikka eteenpäin aina vaan ja pelaajan liikkeet sitten muuttavat grafiikan kulkua.
Eli, tallenna vain pelaajan näppäin taikka gamepad liikkeet, ja tee itse autopelistä sellainen että siinä on tietyt säännöt jotka työntävät grafiikkaa eteenpäin ja pelaaja valinnat sitten muokkaavat pelin kulkua.
Riittää kun tallennat pelaajan toimet ja vielä videon headerin satunnaisluku juurille ja autojen alku tilanteille x,y,(z?).
:)
--
Kiitos! Tuo onkin helppo tehdä.
Itse tallentaisin pelaajan koordinaatit (ja vaikka auton suunnan) aikaleiman perusteella. Tällöin haamun ei tarvitsisi jokaisella ruudunpäivityksellä tietää haamun oikeaa sijaintia, vaan välivaiheet voisi vaikka interpoloida edellisen ja seuraavan aikaleiman perusteella.
Tällöin voisi juuri tallentaa vaikka sekunnin välein auton sijainnin... Tai miksei vaikka satunnaisesti max. sekunnin välein.
Kun lasket "sijainnin" kierrosjan mukaan, ei haittaa vaikka pelaajilla olisi eri lähtökohdat.
Pitää miettiä kumman teen. Tuo idea on ihan hyvä mutta uskon että hannun idea toimii paremmin pelissäni.
Mun mielestä toi Hannun idea kuulostaa huomattavasti vaikeammalta toteuttaa varmatoimisesti. Miten saada esim. varmistettua että pelaajan tallennetut ohjausliikkeet toteutetaan täsmälleen samassa kohdassa kuin alunperin. Ainakaan kellonaikaa ei voine käyttää järkevästi referenssinä, koska jos kone jostain syystä hidastelee ajoa toistettaessa, niin sen jälkeen kaikki siitä eteenpäin tapahtuu väärässä kohti jne.
Lisäksi jos jossain kohti muutetaan ohjauslogiikkaa tai mitä tahansa juttua viilataan pelimoottorissa, niin kaikki tallennetut ajot muuttuu käyttökelvottomiksi.
Mä uskon myös, että Hannun tavalla on helpompi saada haamu epäsynkkaan. Se myös vaatii että haamun ihan jokainen liike on varmasti tallennettuna ja jokainen liike pitää myös toteuttaa pelin aikana.
Tuo mun versio toimii myös koneilla, jotka eroavat toisistaan. Haamun sijainti näytetään kuluneen kierrosajan perusteella.
IP1917 videot,
IP1917 videot ja muut peli videoni, eivät ole epäsynkassa.
Tuon unohdin kirjoittaa, että, älkää tallentako kellon aikoja, kun tallennatte pelaajan toimia, vaan tallentakaan tick.
Tämä minun tick on niin, että minulla on tietty määrä tickkejä sekunnissa, vaikka 256 kappaletta.
Lisänä minulla on timer joka kuvaa pelin kulkua, ihan alusta.
Tuo timer joka kuvaa peli aikaa, niin, jaetaan sitten tuolla 256 määrällä, joka on ne ticksit.
Ja itse pelin kulku voi olla myös se sama video sitten play tilassa.
Kun pelaat, niin, sinulla onkin se video tallenne josta vain otat peli ajan mukaiset sijainnit.
Ja aina kun lisäät koordinaatteja, niin, lisäät niitä ticksien mukaan, ei sekunnin.
Hannun videot eivät ole epäsynkassa.
:)
--
Hannun tapa on periaatteessa erittäin hyvä tietynlaisiin peleihin. Pelin pitää olla tarpeeksi yksinkertainen ja varmasti deterministinen (toimii joka kerta samalla tavalla). Pelin pitää kulkea joka koneella samalla tavalla, eli peliä jannattaa ajaa vakiomittainen aika-askel (”tick”) kerrallaan. Siis esimerkiksi ajetaan peliä 0,01 sekuntia kerrallaan, kunnes pelin kello saavuttaa nykyajan. Koneiden nopeuserot kompensoidaan sillä, että turhat välivaiheet jätetään piirtämättä. Lisäksi peli pitää käytännössä toteuttaa kokonaisluvuilla, koska liukulukuihin voi tulla pyöristysvirheitä hieman eri tavalla käännöksestä ja koneesta riippuen. Tallenteiden kohdalla fysiikan pitää myös olla varmasti sama jokaisessa pelin versiossa, tai tallenne lakkaa toimimasta.
Paljon rajoituksia tuli jo, mutta ei siinä kaikki! Pelkän auton lisäksi pitää tallentaa (tai simuloida uudestaan) koko se ympäristö, jossa auto ajoi. Pitää simuloida haamuauton rata, muut kuljettajat, törmäykset ym. Täydellisen pelitallenteen kohdalla tämä on tietenkin hyvä ja väistämätön asia, mutta jos halutaan pelkästään haamuauton liikerata, joudutaan ihan turhaan suorittamaan koko aiempi peli uudestaan taustalla.
Eli vaikka tietyillä ehdoilla Hannun tapa tuottaa ns. täydellisen lopputuloksen, siitä on paljon vaivaa ja monta kompastuskohtaa.
Sen sijaan auton sijainnin ja asennon tallentaminen määrätyin välein on yksinkertaista ja nopeaa eikä vaadi juuri lainkaan laskuja enää haamun näyttämisen yhteydessä. Interpolaatio voi aiheuttaa pieniä virheitä, auto saattaa vaikka mennä osittain seinän läpi jossain tiukassa mutkassa. Ongelmat pienenevät tallennusta tihentämällä, ja joka tapauksessa voi olla varma, että haamuauto pääsee maaliin virheistä huolimatta.
Eli Hannun tapa on joskus hyvä nimenomaan täydellisiin pelitallenteisiin mutta tässä tapauksessa luultavasti vaikea.
HannuTapio: voihan tuossa "mun versiossa" käyttää sun tickiä aikayksikon tilalla, kunhan sitten haamun sijaintia piirtäessä käyttää samaa aikayksikköä. Se ei myöskään ota kantaa siihen, kuinka usein sijaintia päivitetään
Aihe on jo aika vanha, joten et voi enää vastata siihen.