Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Peliohjelmointi - CPU tehon käyttäytyminen lautapelissä

HannuTapio [14.02.2021 15:08:29]

#

Hei,

Olen Hannu Särö, olen lautapeli indie, minä suunnittelen suomi nettiin lautapelejä.

Minulla on ongelma tässä jo hieman iäkkäässä lautapelissäni, "meteori sankarit 2312".

Pelin Framerate kulutus on aika voimakasta kun peliä pelaa, tämä eteenkin kun räjähdyksiä on paljon.

Tässä on blogi pelistäni - https://www.lautapelimestari.com/Etusivu.html?sivu=ms2312

Tässä on video ongelmastani - https://www.bittipankki002.com/videot/Video_MS2312.mp4

Ongelma on vaikka videon kohdassa 0:50, siinä näkee ruudun yläreunassa CPU kulutuksen ja Frameraten.

--

Minun lautapelini on rakentuna Javascriptillä jossa on Canvas 2D.

Pelissä on noin 50 meteoria pyörimässä reunoilla.
Pelissä on enintään 1000 savua tai tuli pyörrettä kerralla.
Pelissä on enintään 10 avaruusalusta kerralla.
Pelissä on enintään 555 ammusta kerralla.

Ammo on 24x24 pikseliä.
Tuli ja savu on 32x32 pikseliä.

Nuo ovat piirrossa, piirtäminen on ihan tavallinen drawimage javascript 2d käsky.

Nuo 1000 savu ja tuli ja 555 ammusta käydään läpi seuraavasti ->

For ( 0 to 1000 / 555 ) // savut = 1000 ja ammot = 555;
if ( savu | ammus === alive )
drawimage(savu | ammus)

Osaako joku tietää mistä johtuu nuo pelin tehon vaatimukset, minulla on tuo NVIDIA 730GT käytössä tässä videolla.

:) :) :)

--

_Pete_ [18.02.2021 09:22:23]

#

HannuTapio kirjoitti:

For ( 0 to 1000 / 555 ) // savut = 1000 ja ammot = 555;
if ( savu | ammus === alive )
drawimage(savu | ammus)

Osaako joku tietää mistä johtuu nuo pelin tehon vaatimukset, minulla on tuo NVIDIA 730GT käytössä tässä videolla.

:) :) :)

--

Arvaan että tehon vaatimukset johtuu siitä että for loopissa kutsut tätä:

drawimage(savu | ammus)


Jos siis poistat kyseisen rivin niin tehon kulutus laskee.

Metabolix [18.02.2021 09:37:34]

#

Tietysti ensin kannattaa varmistaa, että vika on todella piirtämisessä. Voit esimerkiksi laittaa napin, josta piirtämisen saa pois päältä (eli tehtäisiin kaikki muu paitsi context.drawImage). Jos tämä ei vähennä kuormitusta, pitää etsiä vikaa muualta. Jos taas kuormitus vähenee hyvin, pitää miettiä parempia tapoja piirtämiseen. Käsittääkseni JS:n 2D-piirtofunktiot ovat hitaita eikä niiden kiihdytyksestä ole takeita. WebGL käyttäisi luultavasti paremmin näytönohjainta.

carabia [18.02.2021 15:16:21]

#

Käsittääkseni ainakin webkittiin ja sen johdannaisiin (mm. blink) perustuvat selaimet piirtänee canvasta graffakortilla kunhan hardiskiihko pistetään päälle asetuksista.

EDIT: Toki ei ole sama asia kun käyttää GL:ää suoraan, jolloin saat optimoitua piirtoa paljon paremmin, mutta vaatii vähän ekstraduunia.

Lebe80 [19.02.2021 14:27:50]

#

Mä en keksinyt oliko tuo for-luuppi ihan pseudokoodia, vai mennäänkö aina 1000 savua ja 555 ammusta läpi, oli niitä olemassa vai ei.

Koska itsellä tulisi mieleen mieluumminkin tehdä jokin array, jossa olisi kaikki elävät objektit ja josta kuolleet objektit poistettaisiin sitä mukaan, kun niitä ei enää tarvita.

Uskoisinkin, että tuossa for-luupissa tehdään jotain muutakin, mikä oikeasti on se, mikä aiheuttaa hidastelua.

Vastaus

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

Tietoa sivustosta