Map aus *.dat geladen, wie mache ich die Collision(Rect´s)
Übersicht

![]() |
Schranz0rBetreff: Map aus *.dat geladen, wie mache ich die Collision(Rect´s) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute
Hab mal wieder ein Problem. Und zwar: Ich habe eine Map geladen, 0 = nichts, 1 ist Spielstein, 2 ist wand Habe den werten ein Rect zugweisen, klapt wunderbar. Nur bekomme ich jetzt keine "collision" (RectsOverlap) mehr hin, da ist null peil hat wie ich jetzt den x und y wert angeben soll?!!? Hier die datei: LADE MICH RUNTER für welche die es evtl schon am code erkennen: BlitzBasic: [AUSKLAPPEN]
Danke schonmal für die Hilfe[/code] |
||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wäre es möglich, dass du mal den Inhalt der lvl1.dat postest?
Bin hier gerade an einem anderen Rechner und hier gibts kein Winrar. Wieso arbeitest du eigentlich mit Readline? Ich würde Bytes verwenden, das ist Platzsparender. mfg, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nagut wennst dir hilft:
Die lvl1.dat : Lad mich Einfach im Wordpad oder so öffnen. Wie geht das mit Bytes, ich kenn nur die mit Readline... Aber ist ja in dem fall egal, ich will ja nur eine Kollision zwischen dem Rect, und meinen Player Rect! |
||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der fehler liegt hier:
RectsOverlap (x, y, 20, 20, PlayerX, 560 , 50, 10) Die Rects berühren sich einfach nicht. X geht von 0 - 29 Y geht von 0 - 39 Also kann die Abfrage höchstens RectsOverlap (29, 39, 20, 20, PlayerX, 560 , 50, 10) sein Da liegt der Fehler. mfg, Smily0412 |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Smily0412 hat Folgendes geschrieben: Der fehler liegt hier:
RectsOverlap (x, y, 20, 20, PlayerX, 560 , 50, 10) Die Rects berühren sich einfach nicht. X geht von 0 - 29 Y geht von 0 - 39 Also kann die Abfrage höchstens RectsOverlap (29, 39, 20, 20, PlayerX, 560 , 50, 10) sein Da liegt der Fehler. mfg, Smily0412 Ist mir schon klar, das da der fehler ist. Aber es muss doch gehen zu prüfen, ob ein Rect berührt worden ist ein Wand -rect ist 20x20 Siehe ersten Post: Schranz0r hat Folgendes geschrieben: Nur bekomme ich jetzt keine "collision" (RectsOverlap) mehr hin, da ist null peil hab wie ich jetzt den x und y wert angeben soll?!!? |
||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
![]() |
Spikespine |
![]() Antworten mit Zitat ![]() |
---|---|---|
bei rectsoverlap solltest du die x und y werte auch mit 20 multiplizieren.
Also If RECTSOVERLAP (x*20, y*20, 20, 20, PlayerX, 560 , 50, 10) Then ... |
||
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax |
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst die Rects so Prüfen, wie du sie auch Zeichnest.
Und du zeichnest die Rects doch nicht an der x und y position dann würde der Befehl zum zeichen ja Rect x, y, 20, 20, 1 sein Erkennst du jetzt deinen Fehler? Edit Spikespine war schneller ![]() Schade und ich hoffte, ich kann Schranz0r noch dazu bringen, dass er seinen Fehler selbst erkennt |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
Smily0412 hat Folgendes geschrieben: Du musst die Rects so Prüfen, wie du sie auch Zeichnest.
Und du zeichnest die Rects doch nicht an der x und y position dann würde der Befehl zum zeichen ja Rect x, y, 20, 20, 1 sein Erkennst du jetzt deinen Fehler? Edit Spikespine war schneller ![]() Schade und ich hoffte, ich kann Schranz0r noch dazu bringen, dass er seinen Fehler selbst erkennt Falsch^^ , bzw Halbrichtig So muss ich es in die Case 2 schreiben: Code: [AUSKLAPPEN] If RECTSOVERLAP (x*20, y*20, 20, 20, PlayerX-5, 560 , 50, 10) And KeyDown(203) Then PlayerX = PlayerX +5 da ich einen Lauf von immer 5 habe musste ich bei der abfrage erst PlayerX -5 und danach PlayerX+5 machen, damit der genau bündig abschliesst .....Komisch |
||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, hi
der Code ist ja urschrecklich eingerückt. Übernimmt das Code Gadget hier keine Tabs oder rückst du einfach immer mit der Leertaste ein? Dafür wurde Tab erfunden ^^. Diese verschwendung an Performance via der Keydownbefehle ist nicht nur unnötig, sondern bringt auch richtig schöne unordnung nahezu Chaos mit rein. Wenn du es dann versuchst mit Keyhit zu machen, bei was für einem Spiel auch immer, wirst du dich wundern warum dein Code icht funktioniert wenn du mehrmals in einer Schleife Keyhit abfragst, naja genug geschwafelt, ab zum Code. Code: [AUSKLAPPEN] Apptitle "Tretze"
Graphics 800,600,0,2 Setbuffer Backbuffer() Global PlayerX = 375 Global PlayerY = 275 Dim Level(39,29) datei=ReadFile("lvl1.dat") If datei Then For y=0 To 29 For x=0 To 39 Level(x,y)=ReadLine(datei) Next Next CloseFile datei Else RuntimeError "Datei konnte nicht geladen werden" End If Repeat Cls ;Controls If KeyDown(200) Then PlayerY = PlayerY - 5 ElseIf KeyDown(208) Then PlayerY = PlayerY + 5 EndIf If KeyDown(203) Then oldx=playerx PlayerX = PlayerX - 5 ElseIf KeyDown(205) Then oldx=playerx PlayerX = PlayerX + 5 EndIf For y=0 To 29 For x=0 To 39 Select Level(x,y) Case 0 ;nichts Case 1 ;Spielstein Color 255,255,255 Rect x*20, y*20, 20, 20, 1 Case 2 ; WAND Color 83,83,83 Rect x*20, y*20, 20, 20, 1 ;Kollision SpielerX If RectsOverlap (x*20, y*20, 20, 20, PlayerX, 560 , 50, 10) Then ;Color 255,255,255 ;Text 100,100,"HAB WAS" playerx=oldx End If End Select Next Next Color 255,0,0 Rect PlayerX, 560, 50, 10, 1 ;Spieler unten Rect 760, PlayerY, 10, 50, 1 Flip Until KeyHit(1) EndGraphics End Was der Smiley gesagt hat war vollkommen richtig, deklarier das nicht als falsch, is ja schrecklich. Das deine Kollision nicht funktionierte, würde man ganz leicht raus sehen können wenn der Coide strukturierter gewesen wäre. Man sollte sich immer überlegen ob man erst alles berechnet und dann zeichnet oder umgekehrt. Da kann es zu fiesen Fehlern kommen. (Ausnahmen b d R) Anstatt das Movement komplett zu sperren würde ich auf die gute alte old_x old_y Methode zurück greifen. Funzt wie immer wunderbar. EDIT: Hach ja ^^ der Code in deinem Avatar is auch lustig X) IMurDOOM |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group