Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB.Net] Kuvan siirtäminen ruudulla jouhevasti

Made [07.04.2010 15:32:25]

#

VB.Net 2003 ympäristössä on tekeillä Monopolia muistuttava lautapeli. Pelilauta on kasattu useasta pictureboxista, eli jos Monopolia ajatellaan niin jokainen katu on oma pictureboksinsa. Myös pelinappulat ovat pictureboxeja.

Pienoiseksi ongelmaksi tuntuu muodostuvan pelinappulan liikuttaminen paikasta toiseen. Syö ilmeisesti resursseja ja pelinappula näkyy toisinaan hetken sekä lähtö että maalipaikassa (liikettä ei siis toteuteta animaationa vaan nappula siirtyy kerralla lopulliseen paikkaansa).

PBP1.Location = New Point(x, y)
PBP1.Refresh()

Pitäisikö käyttää me.refresh tai refreshata "ruutuja" joiden päällä nappula oli tai on? Olen ihan pihalla tämän grafiikkapuolen hoitamisen suhteen..

Ilmeisesti picturebox ei ole paras ratkaisu toteuttaa pelinappuloita? Mikä olisi parempi? Vievätkö nuo pelilaudan muodostavat pictureboxit resursseja vaikka ne pelin alettua vain ovat paikoillaan? Eli olisiko parempi ladata vain yksi kuva pelilaudaksi (Alunperin nuo useat boxit tulivat siitä että pelilautaa voidaan conffata..)

Kiitokset etukäteen.

Eki Lehtimäki [07.04.2010 18:23:50]

#

Picturebox ei varmasti ole paras ratkaisu peligrafiikan toteuttamiseen.

En itse ole VB.net-koodari, mutta opetellessani graafisen käyttöliittymän ohjelmointia vuosia sitten Delphillä käytin hyvin sinun ratkaisusi kaltaista ratkaisua Delphin image-komponenttien kanssa ja kohtasin täsmälleen samanlaisia ongelmia.

Jos aiot jatkossakin ohjelmoida pelejä VB.netillä, kannattaa tutustua SDL.NET -kirjastoon (http://cs-sdl.sourceforge.net/index.php/Main_Page) joka sisältää hyvät grafiikkatoiminnot ja kaikenlaista muutakin peliohjelmoinnissa hyödyllistä. Täällä Putkassa on suomenkielinen opas "tavallisen" SDL:n käyttöön C++:n kanssa, ja tuolla nettisivulla on englanninkieliset tutoriaalit siitä miten samat jutut onnistuu VB.netissä. Valitettavasti osa esimerkeistä on vain toiselle .Net-kielelle, C#:lle.

Microsoftin XNA-kirjasto sisältää myös peligrafiikkaan ja muuhun peliohjelmointiin tarvittavia ominaisuuksia ja toimii VB.netin kanssa. Siitä ei putkassa ole oppaita mutta ainakin englanniksi löytyy varmasti netistä vaikka mitä.

Jos et halua alkaa opettelemaan liian montaa uutta asiaa yhtä aikaa, voit myös yrittää piirtää kaiken yhteen pictureboxiin. Olen varma että se toimii paremmin kuin pictureboxien liikuttelu. Selvitä itsellesi mitä tarkoittaa kaksoispuskurointi (putkan SDL-oppaan osassa 2 se ainakin kerrotaan), ja sovella sen periaatetta piirtämällä pictureboxissa näyttämäsi kuva ensin koneen muistissa, ja heittämällä se sitten kerralla pictureboxiin näkyville. Tällä pääset eroon useimmista välkkymisongelmista joita esiintyy kun kone ei ehdi piirtää liikkuvia juttuja ruudulle nopeammin kuin silmä ne rekisteröi.

Lautapelissä jossa ei ole animaatioita tuo viimeinen tapa on varmasti riittävän tehokas. Enemmän animaatiota ja blingblingiä sisältävissä jutuissa kannattaa sitten opetella jompi kumpi mainituista kirjastoista.

Vastaus

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

Tietoa sivustosta