2d Schuss kollision problem, was mache ich falsch?
Übersicht

mafaBetreff: 2d Schuss kollision problem, was mache ich falsch? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi
ich bin neu im forum und habe ein problem mit der Schuss kollision. Die kugel geht einfach durch meine gegner durch. Ich habe mir sorgar eine hilfsvariable gemacht um zu schauen ob eine kollision stattfindet, aber es findet keine kollision statt. Was mache ich falsch? BlitzBasic: [AUSKLAPPEN]
|
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code sieht ja schon mal recht professionell aus, aber das mit dem Einrücken kannst du noch üben. Die Feldbenennung ist ziemlich redundant: Die X-Position eines schuss ist als schuss_x gespeichert, sodass der Zugriff über schuss\schuss_x läuft. Das ist ziemlich unnötige Schreibarbeit und merkwürdig zu lesen - benenne das Feld lieber x. Gleiches natürlich auch für schuss_y, zombie_* und zleben.
Die Felder load sind nicht nur schlecht benannt (img wäre besser), nein, sie sind auch noch überflüssig und Kernstürck eines ziemlich unnötigen Performancefehlers: Du lädst die Schuss/Zombie-Bilder bei jedem Schuss/Zombie, statt sie einmal am Anfang zu laden und mehrmals zu zeichnen. Zitat: Ich habe mir sorgar eine hilfsvariable gemacht um zu schauen ob eine kollision stattfindet
Davon sehe ich nichts. Wäre aber natürlich praktisch. Sowieso sind die Variablen info und info1 herrlich nichtssagend benannt und verschleiern einen Fehler: Wenn die Kollision stattfände (dabei wird sie unnötigerweise gleich zweimal überprüft), wäre entweder info oder info1 Null ![]() Die Funktionen drawzombie und movezombie sind schlecht benannt, drawzombie macht beides und movezombie kümmert sich um Schüsse. Zu deiner Frage, nach einer langen Kritik: Die Variable "ja" ist lokal definiert, wenn du von Funktionen aus darauf zugreifst, findet BB keine globale und mach auch dort eine lokale. Diese lokalen Variablen sind aber voneinander völlig unabhängig, sodass die merkwürdige Bedingung Zitat: BlitzBasic: [AUSKLAPPEN] nie erfüllt wird, da die lokale Variable stats 0 ist.
If ja > 1 [Or ja = 1] Man sieht schon, dass du neu bist... ZEVS |
||
mafa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die schnelle Antwort und sorry ich habe die hilfsvariable
warscheinlich durch das ständige probieren vergessen. ich werde es versuchen zu ändern, mit der ja variable, wenn ich es nicht hinbekomme dann melde ich mich noch mal. |
||
mafa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich bekomme es nicht hin. Wenn ich die Bilder am anfang lade erscheint immer die nachricht das das objekt nicht existiert. Die variable ja geht, wenn ich rauf drücke auf 1. Nur die hilfsvariable kill geht nicht um 1 höher, wenn der Schuss den gegner trifft. Der schuss fliegt immer noch durch.
BlitzBasic: [AUSKLAPPEN]
|
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dass das Objekt nicht existiert, heißt nicht, dass an dem Prinzip etwas falsch ist. Ich empfehle dir daher dringend, dich später noch einmal damit auseinanderzusetzen.
Die Variablen info und info1 haben eine sehr unklare Verwendung. Probiere es doch einmal mit Lokal ![]() Die einzige Kollisionsabfrage steht jetzt ein bisschen verlassen außerhalb jeder Funktion und nach dem Mainloop direkt vor .mapdata. Das musst du ändern. Am besten, du nimmst eine eigene Funktion. Der Sinn der Überprüfung ob ja = 1 verschließt sich mir mit besonderer Hartnäckigkeit: Die Variable ja nenne ich für mich immer "movecounter", d.h., die Kollisionen werden nur überprüft, wenn man sich genau einmal bewegt hat (und die Kollisionsüberprüfung überhaupt stattfindet). Eventuell solltest du dir überlegen, ob statt dem langsamigen, teilweise fehlerhaften ImageCollide ![]() Wegen der Funktion drawzombie und movezombie weise ich jetzt daraufhin, dass movezombie alles macht und drawzombie sich nur um das Erstellen von Zombies kümmert. Auf Englisch: drawzombie creates zombies and movezombie moves and draws zombies. Potenzielle Missverständnisse habe ich kursiv gemacht. Möglicherweise ist es überlegenswert, was mit Schüssen passiert, die keinen Zombie treffen. Das du sie nicht mehr siehst, heißt noch lange nicht, dass es sie nicht mehr gibt, sie weiterhin (wenn auch im nicht sichtbaren Bereicht) gezeichnet werden, aktualisiert werden und weiterhin RAM verbrauchen. Mit anderen Worten: Performancekiller, Memoryleak. Zu korrigieren. ZEVS |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Objekte haben nichts mit Bildern zu tun. Entweder einmal Global laden:
Code: [AUSKLAPPEN] Global zombie_img = LoadImage("obj\grass.bmp")
;[...] DrawImage zombie_img, zombie\x, zombie\y Oder einmal aus der Globalen zuweisen: Code: [AUSKLAPPEN] zombie\img = zombie_img
;[...] DrawImage zombie\img, zombie\x, zombie\y Jedes Bild immer wieder laden ist ein schneller Tod für dein Programm. Das map Array geht von 0 bis einschließlich 30 bzw. 20! Dein Kollisionsblock da über .mapdata steht in keiner Funktion und wird nie erreicht und ausgeführt. Wenn du eine Fehlermeldung bekommst, aktiviere den Debugger, und sag uns die Zeile, in der der Fehler auftritt - Debuglog ![]() ![]() Und bitte: Editiere deine Post anstatt Doppelposts zu machen. Danke. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
mafa |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antworten und ich werde in zukunft meine post editieren.
Es funktioniert immer noch nicht. Die Bilder werden jetzt am anfang geladen und das klappt auch. Die gegner zeigt er auch an, aber sobal ich schieße wird die variable ja = 1 und ich bekomme ich die meldung das das Object nicht existiert und der debugger zeigt die stelle an BlitzBasic: [AUSKLAPPEN]
der ganze code: BlitzBasic: [AUSKLAPPEN]
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group