|
| Autor |
Nachricht |
pudel 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

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

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

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

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

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

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

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

Anmeldedatum: 17.09.2008 Beiträge: 7
|
Verfasst am: 18.09.2008, 13:44 |
|
|
| funktioniert auch net -.- |
|
| |
|
 |
r4z3r 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

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

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

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!  |
|
| |
|
 |