Tein pikaisesti autopelin(kaviaari auttoi), jossa auto ajaa tietä ylöspäin ja väistelee, mutta sitten homma jäikin kesken kun tuli eteen seuraava ongelma:
Auto ei saa mennä yli 30px ja jos se menee niin sitten se pysyy paikallaan tai menee muihin suuntiin.
ja koodi on:
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Dim py As Integer Dim px As Integer Private Sub Form_Load() px = 115 py = 75 End Sub Private Sub Timer1_Timer() If GetAsyncKeyState(40) Then py = py + 5 If GetAsyncKeyState(38) Then py = py - 5 ' If GetAsyncKeyState(39) Then px = px + 5 If GetAsyncKeyState(37) Then px = px - 5 If (px = 30) Then px = px = 30 pPuskuri.Cls Dim z As Long z = BitBlt(pPuskuri.hDC, px, py, 445, 229, maski.hDC, 0, 0, vbSrcAnd) z = BitBlt(pPuskuri.hDC, px, py, 445, 229, kuva.hDC, 0, 0, vbSrcInvert) z = BitBlt(pKuva.hDC, 0, 0, pKuva.Width, pKuva.Height, pPuskuri.hDC, 0, 0, vbSrcCopy) End Sub
kaikki nuo timerit ja pkuvat ja ppuskurit on formilla..
Ota talteen vanhat paikat, eli ennen näppiksen lukemista vaikkapa muuttujiin vpx ja vpy. Ja näppiksen lukemisen jälkeen vertailet onko auto yli sallitun 50 pikselin, näin:
if px>50 then px=vpx
jolloin jos px on suurempikuin 50 se palautetaan vanhaan koordinaatiin jolloin se tavallaan pysähtyy.
ja mitä ihmettä varten sinulla on tälläinen rivi koodissasi
If (px = 30) Then px = px = 30
sen voit ottaa huoletta pois
If (px = 30) Then px = px = 30 tekee sen, että jos px on 30 niin px on -1, koska px = px = 30 on ehtolause ja antaa äärimmäisen truen(-1, siinä on kaikki bitit ylhäällä) eli jos px = 30 niin sitten px on -1. Aika häiritsevä rivi koska tota tuskin tarttee ja jos px on -1 niin sekin varmaan tuottaa jonkinlaista virhettä :P
Aihe on jo aika vanha, joten et voi enää vastata siihen.