Rect Kollision??
Übersicht

![]() |
Schranz0rBetreff: Rect Kollision?? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi leute,
Folgendes Problem: ich habe 2 Rect´s. das eine ist per Tastertur steuerbar und Bewegt sich immer um 20 weiter (hoch, runter, links, rechts) das andere ist eine "Box" ich hab die so im Code: Code: [AUSKLAPPEN] Function Player() Color 100, 100, 255 Rect P_X, P_Y, P_1, P_1 End Function Function Box1() Color 50, 150, 0 Rect B1_X, B1_Y, 20, 20 End Function Nun will ich erreichen, das wenn ich die "Taste Hoch" drücke, und die Box berühre, die Box um 20 nach oben rutscht. ich wollte das per X,Y vergleich der beiden Sachen machen, was aber nicht funtioniert ![]() Einer eine Idee? Thx im vorraus |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
schau dir mal den Befehl RectsOverlap an!
danach veränderst du, einfach die Box-Werte... oha...das soll n sokoban werden?? (<- bestimmt!) guck dir lieber dim-felder an, damit kann man das wesentlich leichter handhaben!! |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kryan hat Folgendes geschrieben: oha...das soll n sokoban werden?? (<- bestimmt!) Richtig mein lieber ![]() der Level selber ist mit Dim Map gemacht. Ist es nun besser Boxen in der Data mit rein zu bauen, oder doch selber einzeln setzen in den Level? Hier mal der Code bis jetzt: Code: [AUSKLAPPEN] AppTitle "Sokoban 1.0 BETA ..::By Schranz0r::.." Graphics 400, 320, 0, 0 SetBuffer BackBuffer() Global P_1 = 20 Global P_X = 20 Global P_Y = 40 Global Punkte frametimer = CreateTimer (20) Const Weg = 20, rauf = 200, runter = 208, links = 203, rechts = 205 Dim map (20,15) Restore Lev1 For y=0 To 14 For x=0 To 19 Read map(x,y) Next Next Function DrawMap() For y = 0 To 14 For x = 0 To 19 If map(x,y) = 1 Then Color 255, 0, 0 Rect x*20, y*20, 20, 20 EndIf Next Next End Function Function Player() Color 100, 100, 255 Rect P_X, P_Y, P_1, P_1 End Function Function Anzeigen() Locate 0, 300 Print "Punkte: " + Punkte Locate 100, 300 Print "Level: " + Level End Function While Not KeyHit(1) Cls WaitTimer (frametimer) Anzeigen() DrawMap() If KeyHit(rauf) And map( P_X/20 , P_Y/20 -1 )= 0 Then P_Y = P_Y - Weg If KeyHit(runter) And map( P_X/20 , P_Y/20 +1 ) = 0 Then P_Y = P_Y + Weg If KeyHit(links) And map( P_X/20 -1 , P_Y/20 ) = 0 Then P_X = P_X - Weg If KeyHit(rechts) And map( P_X/20 +1 , P_Y/20 ) = 0 Then P_X = P_X + Weg Player() Flip Wend End .Lev1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,1,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 |
||
- Zuletzt bearbeitet von Schranz0r am Do, Mai 18, 2006 19:35, insgesamt einmal bearbeitet
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Müsste dann ja Quasi so sein:
Code: [AUSKLAPPEN] Global Player_X = 100
Global Player_Y = 20 Global Weg = 20 Global XY = 20 ; Breite und höhe des Player und der Box Global Box1_X = 60 Global Box1_Y = 100 If Keyhit(200) And RECTSOVERLAP (Player_X, Player_Y, XY, XY, Box1_X, Box1_Y, XY, XY) Then Box1_Y = Box1_Y - Weg Also so im Prinzip, halt nur in meinen Code?? Das versuch ich jetzt mal ^^ EDIT: Geht nicht ![]() |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
stimmt! eher so:
Code: [AUSKLAPPEN] If RectsOverlap(parameter) then move=richtung:old_x=box_x:old_y=box_y if move=1 then box_x=box_x+1 if move=2 then box_x=box_x-1 ;das gleiche noch mit 3 und 4 für Y if old_x+20=box_x and move=1 then move=0 if old_x-20=box_x and move=2 then move=0 ;ddas gleiche für y If keydown(rechts) then x=x+1:richtung=1 if keydown(linkes) then x=x-1:richtung=2 ;das gleiche für y wie du siehst... ist net mehr ganz sooo leicht... würd übrigends empfehlen es mit Types zu machen also die Kisten.., MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann ich jetzt nich ganz nachvollziehen ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group