Visual Basic 6, Potrebujem kod na kolizie

Programovacie jazyky, rady, poradňa...
tom1597530
Zablokovaný
Zablokovaný
Príspevky: 170
Registrovaný: 18 okt 2008, 14:28

Visual Basic 6, Potrebujem kod na kolizie

Príspevok od používateľa tom1597530 »

Dobrý deň. Mám dva Štvorce: Shape1 a Shape2.

Shape1 stojí na mieste
Shape2 sa hýbe pomocou WSAD.

Mám Timer1, Timer2, Timer3 a Timer4 ktoré majú interval napr. 10.
Timer1,2,3,4 sú normálne Nefunkčné (Enabled = False)

Ak stlačím W, Timer1 sa povolí a každých 10 milisekúnd sa mi Shape2 posunie hore o 1 pixel. Ak pustím klávesu, Timer1 sa zastaví

S, A, D fungujú tak isto ako Timer1 až na to, že každý pohne Shape2 iným smerom

Od vás potrebujem, aby ste mi napísali kód taký, že keď stlačím napr. S, čo je Timer2 a Shape2 sa dotkne Shape1, Timer2 sa zastaví. Teda ak sa dotkne Shape2 objektu Shape1, Timer sa zastaví, teda vrazím do pevného objektu.

Ďakujem
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

neviem ako sa to presne zapisuje vo VB, tak iba takto slovne:
ak je x,y súradnica lavého horného rohu shapu, tak absolútna hodnota rozdielu x-ových súradnic shapu menšia ako šírka shapu ti určí kolíziu v horizontálnom smere, absolútna hodnota rozdielu y-ových súradnic ak je menšia ako výška shapu tak máš kolíziu vo vertikálnom smere. Ak nastane jeden alebo druhý prípad, zastavší všetky timery.

Ak tie shape nemajú rovnaké rozmery, budeš to musieť rozdeliť na 4 podmienky, kde porovnávaš x+šírka s x druhého shapu a potom x s x+šírka prvého shapu. Takéto dve podmienky budú aj pre y a výšky
manager666
Star
Star
Používateľov profilový obrázok
Príspevky: 642
Registrovaný: 12 aug 2007, 13:29

Príspevok od používateľa manager666 »

Audiotrackove slova v kode :P :
1, ak maju rovnake rozmery:

Kód: Vybrať všetko

Dim CanMove As Boolean
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim rozdiel, rozdiel2 As Integer
rozdiel = Shape1.Top - Shape2.Top
If rozdiel < 0 Then
    rozdiel = rozdiel * -1
End If
rozdiel2 = Shape1.Left - Shape2.Left
If rozdiel2 < 0 Then
    rozdiel2 = rozdiel2 * -1
End If
If rozdiel <= Shape1.Height And rozdiel2 <= Shape1.Width Then
    CanMove = False
End If
If CanMove = True Then
    If KeyCode = vbKeyW Then
    Shape2.Top = Shape2.Top - 20
    ElseIf KeyCode = vbKeyS Then
    Shape2.Top = Shape2.Top + 20
    ElseIf KeyCode = vbKeyA Then
    Shape2.Left = Shape2.Left - 20
    ElseIf KeyCode = vbKeyD Then
    Shape2.Left = Shape2.Left + 20
    End If
Else
    MsgBox ("Booom")
End If
End Sub

Private Sub Form_Load()
CanMove = True
End Sub
Myslim, ze pouzivat 4timery je blbost, ked nemusis pouzivat ani jeden. :P A mimochodom u VB je nastavenie Intervalu na hodnotu mensiu ako 15 zbytocne. Jeho minimum u Timeru je 15, ci nastavis 5 alebo 10. :wink:
tom1597530
Zablokovaný
Zablokovaný
Príspevky: 170
Registrovaný: 18 okt 2008, 14:28

Príspevok od používateľa tom1597530 »

manager666 napísal:Audiotrackove slova v kode :P :
1, ak maju rovnake rozmery:

Kód: Vybrať všetko

Dim CanMove As Boolean
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim rozdiel, rozdiel2 As Integer
rozdiel = Shape1.Top - Shape2.Top
If rozdiel < 0 Then
    rozdiel = rozdiel * -1
End If
rozdiel2 = Shape1.Left - Shape2.Left
If rozdiel2 < 0 Then
    rozdiel2 = rozdiel2 * -1
End If
If rozdiel <= Shape1.Height And rozdiel2 <= Shape1.Width Then
    CanMove = False
End If
If CanMove = True Then
    If KeyCode = vbKeyW Then
    Shape2.Top = Shape2.Top - 20
    ElseIf KeyCode = vbKeyS Then
    Shape2.Top = Shape2.Top + 20
    ElseIf KeyCode = vbKeyA Then
    Shape2.Left = Shape2.Left - 20
    ElseIf KeyCode = vbKeyD Then
    Shape2.Left = Shape2.Left + 20
    End If
Else
    MsgBox ("Booom")
End If
End Sub

Private Sub Form_Load()
CanMove = True
End Sub
Myslim, ze pouzivat 4timery je blbost, ked nemusis pouzivat ani jeden. :P A mimochodom u VB je nastavenie Intervalu na hodnotu mensiu ako 15 zbytocne. Jeho minimum u Timeru je 15, ci nastavis 5 alebo 10. :wink:
Ale potom ked sa zrazia, uz sa neodlepia.
Vies co, skus prepisat tento kod tak, ze ked sa zrazia, tak sa Shape2 uz nepohne na ten smer, kde stoji Shape1 a oprav to trochu, lebo ked sa zrazili, vypisalo to Booom a uz aj ked boli 100 pixlov od seba, stale to vypisovalo

//autoeditácia príspevku ( 27 Jul 2009, 15:45 )
audiotrack napísal:neviem ako sa to presne zapisuje vo VB, tak iba takto slovne:
ak je x,y súradnica lavého horného rohu shapu, tak absolútna hodnota rozdielu x-ových súradnic shapu menšia ako šírka shapu ti určí kolíziu v horizontálnom smere, absolútna hodnota rozdielu y-ových súradnic ak je menšia ako výška shapu tak máš kolíziu vo vertikálnom smere. Ak nastane jeden alebo druhý prípad, zastavší všetky timery.

Ak tie shape nemajú rovnaké rozmery, budeš to musieť rozdeliť na 4 podmienky, kde porovnávaš x+šírka s x druhého shapu a potom x s x+šírka prvého shapu. Takéto dve podmienky budú aj pre y a výšky
:o :shock: Čože? nevieš to aspoň zapísať po slovensky alebo ako vieš zapíš, skúsim si z toho vyvodiť VB štýl ale z tohto si asi nevyvodím nič :D
manager666
Star
Star
Používateľov profilový obrázok
Príspevky: 642
Registrovaný: 12 aug 2007, 13:29

Príspevok od používateľa manager666 »

Co keby si trochu pohol rozumom a upravil si to podla svojich poziadaviek ? Ci ti mam celu aplikaciu urobit ja ?! :twisted:
Mne to funguje uplne skvelo, kedze ti vypisalo Boom aj ked boli az 100px od seba, to znamena, ze nemas rovnake rozmery a ja som sam uviedol na zaciatku, ze to je pre rovnake stvorce.
Ak nechapes, co napisal audiotrack, tak ta prosim, aby si prestal s akymkolvek programovanim a najma cinnostiam, ktore vyzaduju logicke myslenie. Taketo jednoduchucke veci, ked nevies sam bez pomoci, jednoducho nemas na to.
Mozno som bol teraz tvrdy, ale napisal som krutu pravdu.
:wink:
tom1597530
Zablokovaný
Zablokovaný
Príspevky: 170
Registrovaný: 18 okt 2008, 14:28

Príspevok od používateľa tom1597530 »

manager666 napísal:Co keby si trochu pohol rozumom a upravil si to podla svojich poziadaviek ? Ci ti mam celu aplikaciu urobit ja ?! :twisted:
Mne to funguje uplne skvelo, kedze ti vypisalo Boom aj ked boli az 100px od seba, to znamena, ze nemas rovnake rozmery a ja som sam uviedol na zaciatku, ze to je pre rovnake stvorce.
Ak nechapes, co napisal audiotrack, tak ta prosim, aby si prestal s akymkolvek programovanim a najma cinnostiam, ktore vyzaduju logicke myslenie. Taketo jednoduchucke veci, ked nevies sam bez pomoci, jednoducho nemas na to.
Mozno som bol teraz tvrdy, ale napisal som krutu pravdu.
:wink:
Takže takto:
1. Potom nie ja, ale počítač dal zlé rozmery, pretože si myslím, že kopírovať a vložiť nie je moja práca.
2. Už od mojich šiestich rokov mi psychologička povedala, že ja jednoduchým veciam nerozumiem ale zložitým áno. Ale nie je to až tak doslovne myslené.
3. Z jednej stránky ti ďakujem, z druhej stránky vravím "choď do prdele"

//autoeditácia príspevku ( 28 Jul 2009, 8:54 )
To uz clovek nemoze povedat ani chod do prdele a hned mi musia dvaja ko**** znizit karmu, ku***!!! Toto je fakt poj**** fórum a ešte poj******** registrovaní.

Odkaz pre tých, čo mi znížili karmu: Dajte sa vypchať!!!

//autoeditácia príspevku ( 28 Jul 2009, 8:59 )
manager666 napísal:Co keby si trochu pohol rozumom a upravil si to podla svojich poziadaviek ? Ci ti mam celu aplikaciu urobit ja ?! :twisted:
Mne to funguje uplne skvelo, kedze ti vypisalo Boom aj ked boli az 100px od seba, to znamena, ze nemas rovnake rozmery a ja som sam uviedol na zaciatku, ze to je pre rovnake stvorce.
Ak nechapes, co napisal audiotrack, tak ta prosim, aby si prestal s akymkolvek programovanim a najma cinnostiam, ktore vyzaduju logicke myslenie. Taketo jednoduchucke veci, ked nevies sam bez pomoci, jednoducho nemas na to.
Mozno som bol teraz tvrdy, ale napisal som krutu pravdu.
:wink:
To krute bolo, ale nie pravda a s programovanim NIKDY neprestanem, pretoze sa chcem stat programatorom. Pojdem na gympel a potom na vysoku elektro-technicku. Myslis si, ze by som mal prestat s mojim snom, len preto, lebo si to povedal. a stvorce boli rovnake

//autoeditácia príspevku ( 28 Jul 2009, 8:59 )
manager666 napísal:Co keby si trochu pohol rozumom a upravil si to podla svojich poziadaviek ? Ci ti mam celu aplikaciu urobit ja ?! :twisted:
Mne to funguje uplne skvelo, kedze ti vypisalo Boom aj ked boli az 100px od seba, to znamena, ze nemas rovnake rozmery a ja som sam uviedol na zaciatku, ze to je pre rovnake stvorce.
Ak nechapes, co napisal audiotrack, tak ta prosim, aby si prestal s akymkolvek programovanim a najma cinnostiam, ktore vyzaduju logicke myslenie. Taketo jednoduchucke veci, ked nevies sam bez pomoci, jednoducho nemas na to.
Mozno som bol teraz tvrdy, ale napisal som krutu pravdu.
:wink:
To krute bolo, ale nie pravda a s programovanim NIKDY neprestanem, pretoze sa chcem stat programatorom. Pojdem na gympel a potom na vysoku elektro-technicku. Myslis si, ze by som mal prestat s mojim snom, len preto, lebo si to povedal. a stvorce boli rovnake

//autoeditácia príspevku ( 31 Jul 2009, 17:37 )
NO TAK, DO TOHO. EŠTE MI ZNÍŽ KARMU TY HAJZEL! NA ČO ČAKÁŠ? VŠETCI, ČO SI TOTO PREČÍTATE MI JU ZNÍŤE, KU***!!!
Zamknuté