Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Osuma

remontti-reiska [12.01.2004 17:09:29]

#

Onko mitään mahdollisuutta saada muulla koodilla kuin sillä ainaisella tömäysiffareilla. Törmäykseen ei pitäisi pistää yhtäkään image tai pitän kompponenttia van pitäis koodista katsoa että onko hahmo siinä kohdassa ja miten saisi sen niin että se ei yksinkertaisesti menisi siitä läpi vaan jäisi paikoilleen ja jos lähtisi siitä pois päin niin se taas liikkuisi. Antakaa esimerkkikoodia mutta ei sitä ainaista tärmäysjuttua, koska sen jo tiedän.

sooda [12.01.2004 17:14:58]

#

no laita siihen "ainaiseen törmäysifffariin" niitten komppponenttien ominaisuuksien tilalle ne mitä ite käytät. Niin ja kannattaisi kertoa että osuma jossain muuallakin kuin otsikossa. kirjoittaisit vaikka "onko mitään mahdollisuutta saada osumaa muulla..." ite kelasin puoli minuuttia että mitä ihmettä saada muulla koodilla.

remontti-reiska [12.01.2004 17:47:37]

#

Vaikka tämä ei olekkaan ainainen:

If pelaaja.Top < (hirviö.Top + hirviö.Height) Then
If (pelaaja.Top + pelaaja.Height) > hirviö.Top Then
If pelaaja.Left < (hirviö.Left + hirviö.Width) Then
If (pelaaja.Left + pelaaja.Width) > hirviö.Left Then

' OSUMA !!

End If
End If
End If
End If

Tuo on se koodi jota meinasin. Eli tuohonhan tietääkseni tarvitsee jonkun 'pelaaja' ja 'hirviö' nimiset kompponentit. Mutta tässä tilanteessa niitä ei saa käyttää (siis image tai pictureja) vaan pitäisi saada esimerkki koodi, jos pelaaja kävelee vaikka puun kohdalle niin tulisi jotain (vaikka pysähtyisi).

sqwiik [12.01.2004 17:52:49]

#

Itse rakennan törmäysalgoritmin sillä tavalla, että ensin katsotaan voiko hahmo liikkua ja vain jos ei ole estettä, niin liikutaan. Seuraava pätkä on ikivanhasta kaksintappelupelistä KKP (VB-versio)

Sub Liikutahahmoa(kuka As Integer)
Dim estev, esteo As Integer As Integer, r As Integer
  estev = 0 : esteo = 0
  For r = 0 To 8
    If este_(hahmot(kuka).x - 1, hahmot(kuka).y + r) Then _
      estev = 1
    If este_(hahmot(kuka).x + 6, hahmot(kuka).y + r) Then _
      esteo = 1
  Next r
  If esteo = 0 And hahmot(kuka).suunta = 0 Then
    hahmot(kuka).x = hahmot(kuka).x + 1
  ElseIf estev = 0 And hahmot(kuka).suunta = 1 Then
    hahmot(kuka).x = hahmot(kuka).x - 1
  End If
End Sub

Koodin huono puoli oli se, että hahmon täytyi aloittaa vapaalta alueelta ts. ei esteitä missään.

setä [12.01.2004 20:03:14]

#

Täytyyhän koodiin saada jotkut koordinaatit pelaajasta ja hirviöstä. oli ne sitten imagen tai pictureboxin tai muun. Mutta tuon ainaisen if-lauseiden ketjun voisi muuttaa seuraavasti:

If pelaaja.Top < (hirviö.Top + hirviö.Height) And _
   (pelaaja.Top + pelaaja.Height) > hirviö.Top And _
   pelaaja.Left < (hirviö.Left + hirviö.Width) And _
   (pelaaja.Left + pelaaja.Width) > hirviö.Left Then

   ' OSUMA !!

End If

On hiukan nopeampi eikä niitä iffejä niin montaa harmiteltaviksi.

Sharph [12.01.2004 20:36:53]

#

Mitä noi alaviivat on?

setä [12.01.2004 23:47:06]

#

Koodirivin jako usealle riville

Vastaus

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

Tietoa sivustosta