Pelien yhteydessä jokin liikkuu ja törmää esteeseen. Tässä esimerkki, kuinka liike koodataan. Liikettä ohjataan hiirellä mutta koodia voi muuttaa erilaisille ohjauksille.
Formilla kaksi PictureBoxia, nimeltään P ja H (pelaaja ja hirviö). ScaleMode = 3, myös formilla. Jos P on H:n päällä se siirretään reunalle Form_Resize-tapahtumassa. Samalla tutkitaan, millä puolen H:ta P on. P:tä liikutellaan hiirellä raahaamalla. Kun se osuu esteseen, P liukuu esteen reunaa myöten hiiren liikkeen mukaan.
Option Explicit Dim L As Integer, T As Integer 'katso koodista Dim PL As Integer, PT As Integer 'pelaajan left ja Top Dim L0 As Integer, T0 As Integer 'hirviön + pelaajan leveys ja korkeus Dim X0 As Integer, Y0 As Integer 'MouseDown-piste Dim X1 As Integer, Y1 As Integer 'paikka vasen reuna, yläreuna Dim X2 As Integer, Y2 As Integer 'paikka oikea reuna, alareuna Dim dx As Integer, dy As Integer 'muutos Dim B As Byte, M As Integer 'tila:0=oik,1=ylh,2=vas,3=alh
Private Sub Form_Load() L0 = H.Width + P.Width T0 = H.Height + P.Height PL = P.Left: PT = P.Top X1 = H.Left - P.Width: X2 = H.Left + H.Width Y1 = H.Top - P.Height: Y2 = H.Top + H.Height End Sub Private Sub Form_Resize() L = PL - H.Left + P.Width T = PT - H.Top + P.Height 'jos P on H:n päällä, se siirretään lähimpään paikkaan 'H:n reunalle. Samalla testataan, millä puolen H:ta P on If L > 0 And L < L0 And T > 0 And T < T0 Then M = L0 - L: B = 0 If T < M Then M = T: B = 1 If L < M Then M = L: B = 2 If T0 - T < M Then M = T0 - T: B = 3 Select Case B Case 0 PL = PL + M Case 1 PT = PT - M Case 2 PL = PL - M Case 3 PT = PT + M End Select End If P.Move PL, PT End Sub
Private Sub P_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) X0 = X: Y0 = Y 'tallennetaan koordinaatit End Sub Private Sub P_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button Then 'liikkuu vain jos painike alhaalla dx = X - X0: dy = Y - Y0 'erotukset 'rajoitetaan dx, jottei mennä esteen läpi If Abs(dx) > H.Width Then dx = Sgn(dx) * H.Width If Abs(dy) > H.Height Then dy = Sgn(dy) * H.Height PL = PL + dx: PT = PT + dy L = PL - H.Left + P.Width T = PT - H.Top + P.Height If L > 0 And L < L0 And T > 0 And T < T0 Then 'tullaan esteen päälle Select Case B 'millä puolen estettä Case 0 PL = X2 Case 1 PT = Y1 Case 2 PL = X1 Case 3 PT = Y2 End Select Else 'tilan B muutokset Select Case B Case 0 If L - L0 < -T Then B = 1 Else If L - L0 < T - T0 Then B = 3 Case 1 If L < T Then B = 2 Else If L - L0 > -T Then B = 0 Case 2 If L > T Then B = 1 Else If L > T0 - T Then B = 3 Case 3 If L < T0 - T Then B = 2 Else If L - L0 > T - T0 Then B = 0 End Select End If P.Move PL, PT 'siirto korjattuun paikkaan End If End Sub
ihan kuin olisit tehnyt tämän juuri sitä ruin baradia tekeville.
Mikä ruin barad ??? Oikeestaan tämä oli jatkoa siihen osuma-keskusteluun. ja muistelin, että joku kyseli joskus jotain vastaavaa
aika kiva. toimii vähän paremmin kuin mun bugaavat yritykset :D
heh. Mukavaa. kiitos paljon nyt ei tartte soheltaa ton sqwiikin ymmärtämättömillä ohjeilla.
Aika purkkaa sanoisinko... kommenointi ei olisi pahasta ja tälläset yleensä blitataan eikä vaan liikuteta objekteja
Joo, nuo kommentit itse asiassa unohtui. Voinhan lisäillä jotakin. Mitäs toi blttaaminen on suomeks???
Kaksoispuskurointi, kuva piirretään puskuriin ja filpataan näytölle... ei vilku kuvat
Elikkä miten tuota liikken ohjausta voisi muuttaa?
Aihe on jo aika vanha, joten et voi enää vastata siihen.