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.
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.
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).
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.
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.
Mitä noi alaviivat on?
Koodirivin jako usealle riville
Aihe on jo aika vanha, joten et voi enää vastata siihen.