Voiko QB:llä ladata BMP-kuvia kunnolla ja nopeasti? Entä voisiko niitä pyörittää? Peliohjelmointi kiinnostaa, joten tämä olisi tärkeää.
https://www.ohjelmointiputka.net/koodivinkit/
https://www.ohjelmointiputka.net/koodivinkit/
Näyttäis jotaikin aiheeseen liittyvää olevan.
Suosittelen myös tutustumista siihen mitenkä saada BMP-kuva GET/PUTin ymmärtämään muotoon. Tilejen piirto saattaa nopeutua aika rajusti, kun niitä ei söhritä näytölle pikseli kerrallaan, vaan viskaamalla koko höskä kerralla ruudulle..
-Grey-
Jos samaa kuvaa pitää piirtää sinne tänne nopeasti, kannattaa tosiaan käyttää komentoa PUT. Tällöin kuva pitää olla aiemmin luettu taulukkoon komennolla GET. Yksi tapa on piirtää kuva ensin BMP-tiedostosta näytölle ja lukea se sitten taulukkoon. Kun BMP:n lataaminen on melko hidasta, taulukon sisällön voi tallentaa oikeassa muodossa tiedostoon, jolloin peli pystyy lataamaan kuvan nopeasti suoraan taulukkoon ilman muunnosta BMP-tiedostosta.
Kuvan pyörittäminen on myös hidasta, ja jos kuvan pitää pyöriä pelissä, kannattaa luoda etukäteen kaikki tarvittavat kuvan asennot ja tallentaa ne omiksi kuvikseen. Tämän voi tehdä vaikkapa sopivalla kuvankäsittelyohjelmalla. Tämän jälkeen muistiin voi ladata kaikki kuvan asennot ja oikean kuvan saa piirrettyä ruudulle nopeasti PUT-komennolla. Mitä enemmän kuvia tekee, sitä tarkemmin kuva pystyy pyörimään, mutta pelissä muutama kymmenen kuvaa pitäisi riittää.
Asiat helpottuvat, jos QB:n omien komentojen asemesta käyttää jotain valmista grafiikkakirjastoa. Yksi tällainen on Ohjelmointiputkan projekteissa, LameVGA. Kirjastojen avulla voi ohittaa monet QBasicin rajoitukset.
GETiä ja PUTia en osaa. Miten ne toimii?
Tuolta löytyy noin 600 tutoriaalia QBASIC:lle
http://www.petesqbsite.com/sections/tutorials/
En tarkemmin tutkinut mitkä niistä on juuri noille kahdelle komennolle mutta uskoisin sieltä löytyvän useampia. Mikäli englanti tuottaa ongelmia niin sitten on eri juttu. Pyydä lisätietoja vaikkapa täältä siinä tapauksessa.
Komento GET kopioi kuvan näytöltä taulukkoon:
' määritetään taulukko kuvalle DIM kuva%(10 * 10) ' siirrytään grafiikkatilaan SCREEN 7 ' piirretään sininen neliö LINE (10, 10)-(20, 20), 1, BF LINE (10, 10)-(20, 20), 15, B ' kopioidaan kuva taulukkoon GET (10, 10)-(20, 20), kuva%
Komento PUT piirtää taulukossa olevan kuvan näytölle:
' piirretään kymmenen kuvaa vierekkäin FOR i% = 0 TO 200 STEP 20 PUT (i%, 50), kuva%, PSET NEXT
Kun kuva kopioidaan GET-komennolla, ilmoitetaan vasemman ylänurkan kohta ja oikean alanurkan kohta. Alue annetaan siis samalla tavalla kuin LINE-komennossa. Kun kuva piirretään PUT-komennolla, ilmoitetaan vain, mihin kohtaan tulee kuvan vasen ylänurkka.
Taulukko täytyy määritellä niin suureksi, että kuva mahtuu siihen. Tarvittavan koon laskuun on monimutkainen kaava (löytyy QB:n ohjeesta), mutta hyvä arvio on kuvan leveyden ja korkeuden tulo. Jos QB ilmoittaa "Illegal function call", vikana voi olla taulukon liian pieni koko.
Tässä on vielä esimerkki, joka näyttää liikkuvan neliön:
DIM kuva%(10 * 10) ' näytön voi päivittää PCOPY-komennolla SCREEN 7, , 0, 1 LINE (10, 10)-(20, 20), 1, BF LINE (10, 10)-(20, 20), 15, B GET (10, 10)-(20, 20), kuva% CLS FOR i% = 1 TO 200 ' piirretään kuva PUT (i%, 10), kuva%, PSET ' näytön päivitys PCOPY 0, 1 ' poistetaan kuva PUT (i%, 10), kuva%, PRESET ' nopeuden tahdistus WAIT &H3DA, 8 NEXT
Lisää tietoa löytyy mm. QBasicin ohjeesta ja Ohjelmointiputkan haulla.
Kiitti kaikille! Opetellaanpa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.