Rect Kollision??

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Schranz0r

Betreff: Rect Kollision??

BeitragDo, Mai 18, 2006 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

Einer eine Idee?
Thx im vorraus

Kryan

BeitragDo, Mai 18, 2006 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 18, 2006 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Kryan hat Folgendes geschrieben:

oha...das soll n sokoban werden?? (<- bestimmt!)


Richtig mein lieber Very Happy

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

BeitragDo, Mai 18, 2006 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

5k41

BeitragDo, Mai 18, 2006 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 18, 2006 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
kann ich jetzt nich ganz nachvollziehen Shocked

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group