Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB-objekteja

Sivun loppuun

Juhko [07.10.2006 16:15:05]

#

Voiko QB:llä ladata BMP-kuvia kunnolla ja nopeasti? Entä voisiko niitä pyörittää? Peliohjelmointi kiinnostaa, joten tämä olisi tärkeää.

Legu [07.10.2006 16:28:43]

#

https://www.ohjelmointiputka.net/koodivinkit/24003-qb-astekääntö
https://www.ohjelmointiputka.net/koodivinkit/23904-qb-bmp-kuvan-näyttäminen

Näyttäis jotaikin aiheeseen liittyvää olevan.

Grey [07.10.2006 16:47:10]

#

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-

Antti Laaksonen [07.10.2006 18:23:04]

#

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.

Juhko [07.10.2006 18:29:03]

#

GETiä ja PUTia en osaa. Miten ne toimii?

E.K.Virtanen [07.10.2006 19:31:02]

#

Tuolta löytyy noin 600 tutoriaalia QBASIC:lle
http://www.petesqbsite.com/sections/tutorials/tutorials.shtml

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.

Antti Laaksonen [07.10.2006 19:32:44]

#

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.

Juhko [08.10.2006 10:12:56]

#

Kiitti kaikille! Opetellaanpa.


Sivun alkuun

Vastaus

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

Tietoa sivustosta