![]() |
[C++] Problem mit 2D Kollision
Ich versuchs mal kurz un knapp zu machen.
Ich programmiere derzeit einen 2D Sidescroller, doch ich habe Probleme damit die Kollision umzusetzen. Mein Problem schaut nun so aus, dass die 3 Rechtecke/Objecte gezeichnet werden, ebenso wird auch der text ausgegeben, dass die Kollision statt findet, jedoch wird der bool wert für die Kollision nur bei Code:
obj3.check(); Warum das so ist weiß ich nicht ^^ Zitat:
Code:
obj1.ini(0,0,200,200); // zeichnen der rechtecke/objekte Ich würd mich echt freuen, falls sich jemand die Zeit nimmt mal einen Blick drauf zu werfen um mich mit der Nase ins Code-Häufchen zu drücken ^^ €dit: so, ich hoffe das bild machts anschaulicher. Bild 1: "player im object" aber bewegung nicht eingeschränkt. Bild 2: "Player im "letzten" object, Bewegung wird wie gewollt eingeschränkt. http://img14.imageshack.us/f/test1ij.jpg/ |
Ehrlich gesagt ist es ein wenig mühsam Deine Frage zu verstehen.
Was Du also genau willst ist ein wenig schwammig beschrieben. col ist global. Und obj3 prüfst Du zuletzt. Daher hat nur die letzte Prüfung Einfluss auf "col". P.S.: EIn genereller Hinweis: Um Deinen Code sauberer, lesbarer und wiederverwendbar zu machen, solltest Du (logischer) kapseln. In der check()-Methode, die ja besser einen boolschen Wert zurückgeben müsste (aber nicht tut), hast Du Darstellungs-Elemente und weitere Implikationen. |
Ja, ich lerne nicht großartig nach Büchern/Tutorials. Learning by Doing ^^ Da geht schonmal der en oder andere Fachausdruck / Ordnung verloren.
Zitat:
Zitat:
Code:
class object{ |
Ok, hab übersehen, dass Du Dich ja innerhalb der Klasse befindest.
Aber dennoch verstehe ich nicht, wie man Dir helfen kann. Warum hat Dein Objekt Instanzvariablen von der Spielerfigur(?) ? Wozu die Variablen ox1, ox2 etc? Warum sollte der boolsche Wert "col" bei allen Objekten auf true stehen, wenn Deine Figur nur mit einem Objekt koolidiert? Also, was willst Du genau von uns und was soll der Code genau machen? Wie sieht die Fehlersituation aus? |
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Hoffe diesmal ist es verständlicher :D |
Objekte dürfen nur Instanzvariablen haben, die zu dem Objekt gehören.
Die Koordinaten des Spielers sind keine Eigenschaften des Objekts. Die anderen booleschen "col"-Werte können gar nicht auf true stehen, wenn nur eines der Objekte kollidiert. Da es ja keine globale Variable ist sondern eine Instanzvariable. Wenn Du es aber so haben willst, dann darf col keine Instanzvariable sein oder die überdenkst nochmal Deine gesamte Architektur. z.B. wäre es vielleicht angebracht ein Player-Objekt zu erzeugen, diesem die Umgebung zu übergeben und eventuelle Kollidierung zu überprüfen. Diese Objekt könnte dann eine einzige "col" Instanzvariable besitzen. |
Zitat:
Selbst wenn "col" eine globale variable ist besteht das Problem ohne jegeliche Änderung weiter. Das was ich nur absolut nicht verstehe ist: Wenn sich der Spieler innerhalb eines der drei Objectes befindet (also die if Bedingung zutrifft) wird der text(rot) ausgegeben. Allerdings trifft der rest der Anweisungen nur auf das zu letzt aufgerufene object zu. Obwohl nun alle bool Werte für die Kollision global sind. Code:
if(px>ox1&&px<ox2&&py>oy1&&py<oy2){ // bounding box |
Genau sowas passiert, wenn man einfach drauf los programmiert :)
Wie Du schon sagtest, Learning by Doing... Jetzt hast Du gelernt, dass auch bei kleinen Programmen Planung eine wichtige Rolle spielt... Ohne den gesamten Code kann ich aber leider auch nicht "debuggen". Dabei ist mir immer noch nicht klar, was das eigentliche Problem genau ist... (kann dies nur halbwegs erraten...) |
Ich befürchte, mit dem gesamten Codek annst du auch nicht viel anfangen, weils auf die 2D Lybary Allegro ausgelegt ist, aber wenn du unbedingt was zum grinsen haben willst ^^
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] ist noch alles dort hingeschrieben, wo ich grade dran gedacht hab, dass man es machen könnte, also teils noch functionen, die 12 dinge auf einmal regeln sollen ^^ Würde mich aber trotzdem echt freuen, wenn du mal nen Blick drauf werfen könntest, denn ich verzweifel langsam an dem ding :( |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.