semmonen kysymys tuli että miten saa niin että kun mulla on kaksi PictureBoxia ja sitä toista liikutellaan nuolinäppäimistä.(sen oon tehny jo) ni miten sais sillee et kun se liikuteltava kuva osuu siihen toiseen ni sitten se pysähtyy(eli siit ei pääsis mistää suunnasta läpi)??
..lyösin täält jo yhen esimerkin mut siin oli paljon mulle turhaa sälää ja se oli sekava ni en saanu siit mitää irti.
ja oon yrittäny tehä ite mut aina tulee joku pikku pulma.
=( .. sain kyllä sillee et se pysähtyy sen toisen kuvan kohalla mut se pysähtyy myös jos yrittää mennä vierestä.
....Neuvoja????
Pistä niitä ehtoja tarpeeks siihen if lauseeseen.
Eli kun x on tarpeeks pieni ja x on tarpeeksi suuri ja y on tarpeeksi pieni ja y on tarpeeksi suuri niin sitten pysähtyy.
ei se oikee toimi sillee ku sitte se pysähtymis paikka on niinku koko formin laajunen, eikä vaan sen kuvan laajunen minkä pitäs pysäyttää se toinen.. =(
Kyllä se toimii! Venaa sekka niin pistän esimerkkikoodin.
Ok.... muuten irckaatsä?
if picture1.left > picture2.left+picture2.width then if picture1.left+picture1.width < picture2.left then if picture1.top > picture2.top+picture2.height then if picture1.top+picture1.height < picture2.top then 'Tähän kaikki liikkumisjutut end if end if end if end if
Edit: Meni vähän kauan kun en ollu käyttäny kovin noita vb:n omia säätöhommia(piti meinaa eka vääntää ihan kokonainen esimerkki ohjelma). Oon lähinnä käyttäny api kutsuja. Sitten piti saada mahdollisimman selkeälukuinen koodi.
Toivottavasti toi on oikein ajateltu :)
En irkkaa varsinaisesti mutta kyllä irkissä tulee roikuttua joskus.
Edit: Koodi oli ajateltu päin jotain kun yks 2V kakara huutaa kurkkusuorana vieressä ja muut kailottaa jostain turhanpäiväsestä, mutta nyt koodin pitäs toimia niin kuin pitäisikin.
Tuleeks tohon 'Tähän kaikki liikkumis jutut ni ihan kaikki liikkumis jutut? niinku se normaali liikkuminen ja sitte sitä liikkeen pysäyttämistä koskevat jutut? =)
....sori ku oon näi daiju mut en oo koodaillu pitkään aikaan :)
edit: ja mihin toi koodi ois parasta laittaa?
Tossa on siis ehto millon voidaan liikkua. No olis parasta erotella jokaiselle suunnalle erikseen, mutta tossa oon yrittäny selvittää ideaa...
Koitan yrittää saada tehtyä vb:n omilla jutuilla esimerkkiohjelman.
Tai no sama se. Onhan siihen tietty toinenkin tapa, jota en itse kylläkään koskaan käytä :)
elikkä tallennat picture1:en sijainnin ennen liikkumisjuttua x ja y muuttujiin ja sitten vaan jos ollaan alueella, jolla ei sais olla, niin palautetaan picture1:en edellinen sijainti muuttujista.
Törmäystesti(tämäkin on testaamaton):
if picture1.left + picture1.width > picture2.left then if picture1.left < picture2.left + picture2.width then if picture1.top + picture1.height > picture2.top then if picture1.top < picture2.top + picture2.height then picture1.left = x picture1.top = y end if end if end if end if
ok. ilmottele sit.
Lähen vähäks aikaa menee
Tässä vielä tönköhkö esimerkkiohjelma(joka siis ei ole mikää paras mahdollinen). Käyttää näppäimistön lukemiseen getasynckeystate API kutsua mutta ne rivit on kommentoitu...
Tarvitset formille:
timer1
picture1
picture2
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Dim abc As Boolean 'Tätä ei ole pakko käyttää, mutta suositeltavaa Private Sub Timer1_Timer() abc = True If GetAsyncKeyState(39) And abc Then 'Oikealle x = Picture1.Left y = Picture1.Top Picture1.Left = Picture1.Left + 1 abc = False End If If GetAsyncKeyState(37) And abc Then 'Vasemmalle x = Picture1.Left y = Picture1.Top Picture1.Left = Picture1.Left - 1 abc = False End If If GetAsyncKeyState(38) And abc Then 'ylös x = Picture1.Left y = Picture1.Top Picture1.Top = Picture1.Top - 1 abc = False End If If GetAsyncKeyState(40) And abc Then 'alas x = Picture1.Left y = Picture1.Top Picture1.Top = Picture1.Top + 1 abc = False End If If Picture1.Left + Picture1.Width > Picture2.Left Then If Picture1.Left < Picture2.Left + Picture2.Width Then If Picture1.Top + Picture1.Height > Picture2.Top Then If Picture1.Top < Picture2.Top + Picture2.Height Then Picture1.Left = x Picture1.Top = y End If End If End If End If End Sub
Jep! pari pikku juttuu tohon piti lisätä mut kyl se sit toimi =)
edit: ja otin tost viel sen timerin pois ni nyt se o viel parempi :):) ... thx!!
Ite pyöritän ohjelmani omissa loopeissani enkä käytä mitään vb:n visualominaisuuksia(esim. picturebox, timer, yms.), sillä ne hankaloittavat mielestäni ohjelmointia varsinkin peleissä(en osaa ajatella niitä järjestelmällisesti tjsp.).
no kaipa jokainen ohjelmoi niinkuin lystää :)
... semmosta oisin viel kysässy et mitä hyötyy tost abc muuttujasta on ja mitä se tarkalleen ottaen tekee?
Näköjään abc-muuttujan avulla varmistetaan, että kuva liikkuu kerrallaan vain yhteen suuntaan. Muuttuja on kuitenkin tarpeeton, jos käytetään ElseIf-ehtoja erillisten ehtorakenteiden sijasta. Kuvan sijainti kannattaa myös lukea muuttujiin vain kerran. Tässä Timer-koodin alkuosa lyhennettynä:
If GetAsyncKeyState(39) Then 'Oikealle Picture1.Left = Picture1.Left + 1 ElseIf GetAsyncKeyState(37) Then 'Vasemmalle Picture1.Left = Picture1.Left - 1 ElseIf GetAsyncKeyState(38) Then 'ylös Picture1.Top = Picture1.Top - 1 ElseIf GetAsyncKeyState(40) Then 'alas Picture1.Top = Picture1.Top + 1 End If x = Picture1.Left y = Picture1.Top
joo. mut kato viel toi mun x juttu ku oot nii viisas. =)
Aihe on jo aika vanha, joten et voi enää vastata siihen.