Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Kuvan scrollaaminen pelissä kun liikutaan (VB)

Sivun loppuun

Cc [20.03.2005 12:31:19]

#

Olen tekemässä peliä jota kuvataan yläviistosta niin miten kannattaisi tehdä kuvan scrollaaminen? ja miten saisin aina kenttää tulemaan kun liikutaan (esim: liikutaan oikealle niin näkyy jonkun aikaa asfalttia ja sitten tulee seinä.) Kiitos jo etu käteen.

Lumi-ukkeli [20.03.2005 13:55:29]

#

Sinun täytyy tehdä sitten mappi joka on suurempi kuin näyttösi resoluutio, jotta sitä kannattaisi/täytyisi scrollata. Sitten teet kamera-muuttujan ja piirrät mapista ruudulle vain kameran kuvaaman alueen.

Joku saa kyllä selittää paremmin...

Cc [20.03.2005 13:57:42]

#

Pelissä ei tule olemaan koko näytössä pelaamis mahollisuutta joten sitä pelataan ikkunassa niin tuo mapin teko joka on suurempi kuin ikkuna on helppo asia. Tuota loppua en kyllä oikein onnistunnut sisällistämään.

hunajavohveli [20.03.2005 14:05:50]

#

Kai tuo peli nyt siis on tilepohjainen?
Idea on siis se, että jos kenttä on vaikka 100x100 ja kerralla näytettävä alue vaikka 9x9, niin piirretään aina alue (x-4) - (x+4) , (y-4) - (y+4), eli siis jos kamera on keskellä kenttää niin alue (46-54, 46-54)
Jos taas ollaan jossain nurkassa niin (1-9, 1-9)
Toivottavasti tästä tajuaa edes jotain. :P

Cc [20.03.2005 14:15:26]

#

Peli on tämän tapainen http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=23310&lngWId=1

hunajavohveli [20.03.2005 14:22:07]

#

Ei tuosta kuvasta ota selvää. Onko se siis tilepohjainen vai ei?

setä [20.03.2005 15:06:18]

#

Eräs helppo tapa on piirtää taustakuva PictureBoxiin, joka on huomattavasti Formia suurempi. Sitten vaan siirrät PictureBoxia haluttuun paikkaan Move-metodilla tai muuttamalla Left- ja Top-ominaisuuksia.

Lumi-ukkeli [20.03.2005 18:34:12]

#

setä kirjoitti:

Eräs helppo tapa on piirtää taustakuva PictureBoxiin, joka on huomattavasti Formia suurempi. Sitten vaan siirrät PictureBoxia haluttuun paikkaan Move-metodilla tai muuttamalla Left- ja Top-ominaisuuksia.

Mutta tuo on erittäin hidasta.

setä [20.03.2005 20:17:30]

#

Koneesta ja näytönohjaimesta tietenkin riippuu. Omalla koneellani meni 800x600 ikkunassa 3000x2000 pikselin kuvan siirto laidasta laitaan 1,4 s pikseli kerrallaan. Nopeammalla vauhdilla ei taustasta näe enää mitään.

Cc [21.03.2005 00:11:58]

#

hunajavohveli: ei ole tile pohjainen. mikä olisi hyvä keino tähän hommaan?

Meitsi [21.03.2005 18:04:31]

#

Kannattaa kerralla piirtää graffat vaikka directx:llä tai opengl:llä koska vb on _hidas_

Cc [21.03.2005 19:33:43]

#

vbn piirtäminen tulee riittämään aivan hyvin tähän tarkotukseen.

setä [22.03.2005 09:00:16]

#

Tässä on joskus aiemmin tekemäni demo taustan skrollauksesta, joka on toteutettu ylempänä esittämälläni periaatteella. Ikkunaa voi pienentää, jolloin skrollauksen tarve lisääntyy.
http://personal.inet.fi/atk/korant/hawk.zip

Cc [22.03.2005 15:21:34]

#

Juuri tuollaista tarvisin. saisinko mitenkään lähdekoodia?

setä [22.03.2005 17:16:57]

#

En valitettavasti löytänyt tuon demon lähdekoodia. Mutta tässä on testiohjelman koodi, jolla testasin nopeutta. Ehkä voit siitä soveltaa itsellesi.

Option Explicit
Dim T As Single
Dim X0 As Single, Y0 As Single
Dim L As Single, H As Single

Private Sub Form_Load()
    Picture1.Width = Image1.Width
    Picture1.Height = Image1.Height
    Picture1.Top = -500
    Picture1.Picture = Image1.Picture
    H = -500
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    X0 = X: Y0 = Y
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 0 Then Exit Sub
    L = L + X - X0
    H = H + Y - Y0
    Picture1.Move L, H
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button <> 2 Then Exit Sub
    T = Timer
    If Picture1.Left >= 0 Then
      Do While Picture1.Width + Picture1.Left > Me.ScaleWidth
        Picture1.Left = Picture1.Left - 1
        DoEvents
      Loop
    Else
      Do While Picture1.Left < 0
        Picture1.Left = Picture1.Left + 1
        DoEvents
      Loop
    End If
    Me.Caption = Timer - T
End Sub

Lomakkeen ja kuvalootan ScaleMode = 3 (Pixel). Laiskuuttani en ole kommentoinut mutta ehkä saat selvää. Kuva on alunperin ladattuna Image1:een, jonka koko asettuu kuvan mukaan.

Cc [22.03.2005 21:34:41]

#

Setä: miten tuon koodin pitäisi toimia?

setä [22.03.2005 22:49:55]

#

Laita Image1 alimmaiseksi tai näkymättömäksi. Valitse jokin kuva Image1:n Pictureksi. Kun käynnistät ohjelman, kuva kopioidaan Pictureboxiin ja asetetaan koko kuvan mukaan. Tarkoitus on, että kuva on selvästi lomaketta suurempi.
Voit raahata taustaa hiirellä. Jos Klikkaat oikealla hiiripainikkeella PictureBoxia, se siirtyy laidasta laitaan vuoroin vasemmalle ja vuoroin oikealle. Siirtymiseen kuluva aika tulee näkyviin otsikkopalkkiin. Pitäisi toimia VB5:llä ja VB6:lla.

Cc [23.03.2005 17:29:38]

#

En onnistu soveltamaan tuota sinun koodiasi setä mitenkään järkevästi. Sano jos keksit uudestaan tai löydät tuon hawkin lähdekoodin nimittäin juuri tuollaista scrollausta minä tarvitsisin.

setä [23.03.2005 22:34:15]

#

MouseMove-tapahtumassa taustaa siirretään hiirellä. MouseUp-tapahtuma 2-painikkeella käynnistää taustan siirtymisen itsestään pikseli kerrallaan joko vasemmalle tai oikealle. Etkö saa niitä toimimaan. Kerro miten haluat taustaa skrollata. Tuon hawkin lähdekoodin olen ilmeisesti hukannut. Koodin alussa oleva 500 täytyy pienentää, jos kuvan korkeus on alle 1000 pikseliä.

EDIT! Löytyi sittenkin tuosta kannettavasta. Hawk-koodissa on piirretty hävittäjän kuva viivoilla (typerä ratkaisu ja pirullisen pitkä koodi). Hävittäjän liike ja taustan skrollaus on ohajattu ajastimella, joten oleellinen juttu on Timer-tapahtumassa. Lisäsin vähän kommentteja jotta saan itsekin siitä selvää. Koko projektin voi ladata kohtapuoliin tästä:
http://personal.inet.fi/atk/korant/prhawk.zip

Cc [23.03.2005 23:31:49]

#

Setä: Linkki väärin antaa "Not Found"

setä [23.03.2005 23:34:14]

#

Malta hetki, siinä lukee "kohtapuoliin"
EDIT: No ny toimii!

Cc [24.03.2005 15:17:13]

#

Vielä tuosta scrollaus koodista kun en onnistu sitä niin muokkaamaan.

If Cos(a) < 0 Then            'liikutaan vasemmalle
  'jos lähestytään kartan reunaa, kaarretaan takaisin
  If xm < 100 Then e = -0.02 * Sgn(Sin(a))
  'jos lähestytään ikkunan reunaa, siirretään karttaa
  If xm < 150 - pic.Left Then pic.Left = 0.98 * pic.Left + 3 - xm / 50
  'oudolla lausekkeella pehmennetään scrollauksen alkua
  'äkillinen nykäisy näyttää rumalta
End If
If Cos(a) > 0 Then 'samat kujeet kun mennään oikealle
  If xm > pic.Width - 100 Then e = 0.02 * Sgn(Sin(a))
  If xm > ScaleWidth - pic.Left - 150 Then pic.Left = _
  0.98 * pic.Left + (ScaleWidth - xm) / 50 - 3
End If
If Sin(a) < 0 Then 'ja ylös
  If ym < 100 Then e = 0.02 * Sgn(Cos(a))
  If ym < 150 - pic.Top Then pic.Top = 0.98 * pic.Top + 3 - ym / 50
End If
If Sin(a) > 0 Then 'ja alas
  If ym > pic.Height - 100 Then e = -0.02 * Sgn(Cos(a))
  If ym > ScaleHeight - pic.Top - 150 Then pic.Top = _
  0.98 * pic.Top + (ScaleHeight - ym) / 50 - 3
End If
End Sub

Niin tuo pic on se hävittäjä? ja miten minun noitten a, ym ja xm:än kanssa pitäisi tehdä? minulla se "hahmo" on Mainfigure jos tarvitsee tietää.

setä [24.03.2005 16:12:15]

#

Kartta on kuvakehyksessä pic eli kun siirretään karttaa siirretään siis kuvakehystä. Hahmon (tässä siis hävittäjä) koordinaatit ovat xm ja ym, nopeus v, nopeuden muutos eli kiihtyvyys dv, nopeuden suunta a ja suunnan muutosnopeus e.

Cc [24.03.2005 17:18:00]

#

Kiitos setä tuo auttoi ja paljon. Mutta tuo Kuvakehys jäi hämärään mikä se on?

setä [24.03.2005 17:32:42]

#

Kuvakehys on PictureBox eli kuvaloota, johon voi sijoittaa paitsi kuvia myös muita kontrolleja kuten painonappi, tekstiruutu jne. Kuvakehys toimii kuten Formi muiden kontrollien alustana.

Cc [24.03.2005 19:47:44]

#

Hmm tuota pictureboxia en pysty käyttämään tässä työssäni. Olisiko muita vaihto ehtoja scrollaamiseen?

setä [24.03.2005 21:18:28]

#

Mihin tälläät taustan. VB:ssä ei kai ole muita vaihtoehtoja kuin Formi, PictureBox tai Image, joka on huonoin vaihtoehto. Jos voit maalata taustan formille niin voit sen tehdä yhtä hyvin pictureboxiin.

Cc [24.03.2005 21:22:52]

#

Setä: minulla on pelissä imageja aika paljon joita tarvitsen ne ei näy picture boxin takaanta. se on se ongelma.

setä [24.03.2005 22:27:18]

#

Mikset voi laittaa niitä imageja pictureboksiin. Sinnehän ne on laitettava, jotta skrollaus pelaa. Hawk on piirretty pictureboxiin.

Cc [24.03.2005 22:34:38]

#

mulla on tehty valikot imageista nii ne ei näy pictureboxin takaa.

setä [24.03.2005 22:47:29]

#

Tee valikot pictureboxeihin. Siis jos on mahdollista. Imagenhan voi aina pudottaa pictureboxiin, jonka taas voi sijoittaa imagen paikalle. Picturboxit taas voidaan järjestää niin, että tausta on aina alimmaisena.

Cc [25.03.2005 11:08:37]

#

Pitäisi muuttaa sitten noin 100 riviä koodia :S

Blaze [25.03.2005 11:21:06]

#

Search&replace


Sivun alkuun

Vastaus

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

Tietoa sivustosta