Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
pudel
Newbie
Newbie

Anmeldedatum: 17.09.2008
Beiträge: 7

[HELP] Kollision oder Farbe auslesen....
Verfasst am: 17.09.2008, 17:06

HI,
ich habe eine dringende Frage, ich hab schon ewig gegoogelt rumgefragt, aber keiner konnte mir so richtig helfen:

Also, ich hab eine picturbox, die ich mit der tastatur steuere, nur soll es manche bereiche in der form geben, wo man die picturebox nicht hineinbewegen darf.... also eine kollision (zb. eine Wand, oder ende der Form)

Wie mach ich das jetzt^^
Also ich hab die picturbox "spieler" und eine picturebox/shap "baum".
Der spieler darf über den baum nicht drüber laufen,logisch^^, aber wie frage ich das ab...
Weil ich da nicht weitergekommen bin, hab ich mir überlegt es vllt so zu machen:

Ein hintergrund bild machen, das der spieler nicht sieht. Das bild is komplett schwarz bis auf ein paar rote flecken.
So nun willl ich abfragen wo der spieler (die picturbox ist), also ob sie über einem schwarzen pixel ist oder rot.
Wenn rot dann kann es sich nicht bewegen, wenn schwarz schon!
Sozusagen indirekte kollision => über die roten flecken kommen wände etc


Wäre echt super wenn mir endlich mal jemand helfen könnte!
DANKE

Pudel [img]/ohmy.gif[/img]
 
BlAcKfINAl.aT
Poster
Poster

Anmeldedatum: 26.07.2008
Beiträge: 162


Verfasst am: 17.09.2008, 17:30

vllt mit nem timer, interval 1 der das schnell merkt

einfach mit ner if abfrage

if pictureplayer.width= ' mit was ersetzen , was halt passt then
else
end if

und dan halt noch mit width und heigth oder so...
 
pudel
Newbie
Newbie

Anmeldedatum: 17.09.2008
Beiträge: 7


Verfasst am: 17.09.2008, 17:33

ja... das zeigste mir mal weil ich habs bis jetzt noch net hingebracht -.-


is mir schon klar was du meinst, aber des funzt irgendwie net, aber vllt hab ich auch was falsch gemacht^^ also mal bitte den genauen code aufschreiben
 
BlAcKfINAl.aT
Poster
Poster

Anmeldedatum: 26.07.2008
Beiträge: 162


Verfasst am: 17.09.2008, 17:34

gib ma deine teamviewer daten ich optimier dirs kurz auf die andre pic box
 
pudel
Newbie
Newbie

Anmeldedatum: 17.09.2008
Beiträge: 7


Verfasst am: 17.09.2008, 17:39

add mich pls in icq

375 787 788

bin mal gespannt obs funzt

würde eig meine 2.te idee mit dem farben au gehn oder
is des zu umständlich?
 
bla
Coder
Coder

Anmeldedatum: 02.05.2008
Beiträge: 267


Verfasst am: 17.09.2008, 17:46

Visual Basic: [code]if (spieler.left + spieler.width) >= baum.left then exit sub[/code]

und das in die sub packen, womit du den spieler bewegst
 
pudel
Newbie
Newbie

Anmeldedatum: 17.09.2008
Beiträge: 7


Verfasst am: 17.09.2008, 18:01

geht nicht!

weil ich dann bis zu der line laufen kann aber net weiter
also auch bis zu der verlängerten linie der box!
Hier einfach dargestellt:

-----------------!_____---
-----------------!_____---
-----------------!_____---
-----------------!----------
-----------------!----------
-----------------!----------
-----------------!----------
-----------------!----------


Die unterstriche sollen die box sein,
aber der spieler hält bei den ausrufezeichen.... also auch wenn man unter der box vorbei fahren will :confused:
 
bla
Coder
Coder

Anmeldedatum: 02.05.2008
Beiträge: 267


Verfasst am: 17.09.2008, 20:12

aso, ich verstehe, dann geht das so (ungefähr):


if (spieler.left + spieler.width) >= baum.left then
if (spieler.top + spieler.height) <= baum.top then
exit sub
end if
end if

 
pudel
Newbie
Newbie

Anmeldedatum: 17.09.2008
Beiträge: 7


Verfasst am: 18.09.2008, 13:44

funktioniert auch net -.-
 
r4z3r
Poster
Poster

Anmeldedatum: 16.04.2008
Beiträge: 173


Verfasst am: 18.09.2008, 14:02

Ein bisschen Eigeninitiative wäre vielleicht mal angebracht...

Visual Basic: [code]If Player.Left >= Baum.Left And Player.Left <= Baum.Left + Baum.Width Then
If Player.Top >= Baum.Top And Player.Top <= Baum.Top + Baum.Height Then
'Laufen oder was auch immer
Else
' Exit Sub oder ähnliches
End If
End If[/code]


Der Code sollte funktionieren, rein von der Logik her. (Hab ihn nicht getestet)
Der Code ist natürlich nicht perfekt, weil die Koordinaten von der oberen linken Ecke des Objektes ausgehen... wirst schon merken was ich meine, wenn du den Code testest. (Falls er funktioniert^^)
 
pudel
Newbie
Newbie

Anmeldedatum: 17.09.2008
Beiträge: 7


Verfasst am: 18.09.2008, 14:26

der code funktioniert so aber nicht!
weil die figur sich dann gar nicht mehr bewegen kann -.-

also entweder mach ich was gewaltig falsch
oder des geht so net, oder da is n logikfehler drin...

Bitte helft mir bevor ich verzweifle xD
ICQ 375 787 788
 
bla
Coder
Coder

Anmeldedatum: 02.05.2008
Beiträge: 267


Verfasst am: 18.09.2008, 15:15

hab mich da spaßeshalber mal mit auseunandergesetzt und die lösung (hat auch seine zeit gedauert...)

dieser code beinhaltet 2 pictureboxen namens sp (spieler) und ba (baum)

man bewegt den spieler mit den pfeiltasten. dieser bewegt sich dann 1000 twips in die gewünschte richtung. der src ist sehr ausbaufähig, aber ich hab jetzt keinen bock mehr -.-

viel spass damit:cool:

Visual Basic: [code]Private Sub Form_Load()
Me.KeyPreview = True
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)

Select Case KeyCode
'rechts
Case 39
Sp.Left = Sp.Left + 1000
If Kollision = True Then Sp.Left = Sp.Left - 1000
'links
Case 37
Sp.Left = Sp.Left - 1000
If Kollision = True Then Sp.Left = Sp.Left + 1000
'oben
Case 38
Sp.Top = Sp.Top - 1000
If Kollision = True Then Sp.Top = Sp.Top + 1000
'unten
Case 40
Sp.Top = Sp.Top + 1000
If Kollision = True Then Sp.Top = Sp.Top - 1000
End Select

End Sub


Public Function Kollision() As Boolean
Kollision = False

If Sp.Top > Ba.Top And Sp.Top < Ba.Top + Ba.Height Then
If Sp.Left + Sp.Width > Ba.Left And Sp.Left + Sp.Width < Ba.Left + Ba.Width Then Kollision = True
If Sp.Left > Ba.Left And Sp.Left < Ba.Left + Ba.Width Then Kollision = True
End If

If (Sp.Top + Sp.Height) > Ba.Top And (Sp.Top + Sp.Height) < Ba.Top + Ba.Height Then
If Sp.Left + Sp.Width > Ba.Left And Sp.Left + Sp.Width < Ba.Left + Ba.Width Then Kollision = True
If Sp.Left > Ba.Left And Sp.Left < Ba.Left + Ba.Width Then Kollision = True
End If

If Sp.Top < 0 Then Kollision = True
If Sp.Left < 0 Then Kollision = True
If Sp.Left + Sp.Width > Me.Width Then Kollision = True
If Sp.Top + Sp.Height > Me.Height Then Kollision = True
End Function[/code]
 
pudel
Newbie
Newbie

Anmeldedatum: 17.09.2008
Beiträge: 7


Verfasst am: 18.09.2008, 16:08


vielen dank,
endlich funktioniert mal etwas
echt ich dachte schon ich dreh durch

super! DANKE! Wink
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: kollision, picturebox, farbe, auslesen, pixel

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie mach ich ein fake msn cracker programm 873 18.06.2009, 15:33
Keine neuen Beiträge Könnt ihr mir beim Programmieren helfen?Bitte helft mir 425 10.08.2004, 12:23
Keine neuen Beiträge ActiveX User Control (Bitte helfen)??? 530 08.09.2003, 13:21
Keine neuen Beiträge über Proxy laufen 697 11.09.2008, 22:19
Keine neuen Beiträge Wie mach ich mehr als einen Add in eine Listview?^^ 266 27.02.2008, 18:46
 


[ Time: 0.0796s ][ Queries: 118 (0.0321s) ][ GZIP on - Debug on ]