Typekollision funktionert mal und mal nicht! - erledigt!
Übersicht

GargaMelBetreff: Typekollision funktionert mal und mal nicht! - erledigt! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, ich hab mich jetzt mal ein bisschen mit Types auseinandergesetzt und bin nu leider auf ein Problem gestoßen, des mich noch innen wahnsinn treibt. Da ich durch die SuFu keine Lösung gefunden hab, hoff ich, dass ihr mir weiterhelfen könnt. Folgendes Problem:
Ich hab das Type Code: [AUSKLAPPEN] Type komet
Field x# Field y# Field vx# Field vy# End Type und weiter: Code: [AUSKLAPPEN] Function komet_erstellen()
komet1.komet = New komet komet1\x = Rand(200,400) komet1\y = Rand(200,400) komet1\vx = Rnd(-0.4,0.4) komet1\vy = Rnd(-0.4,0.4) End Function Function komet_zeichnen() For komet1.komet = Each komet komet1\x = komet1\x + komet1\vx komet1\y = komet1\y + komet1\vy Color 255,255,255 Oval komet1\x,komet1\y,13,13 Next End Function Function kollision() For komet1.komet = Each komet For komet2.komet = Each komet If komet1.komet <> komet2.komet Then If RectsOverlap(komet1\x,komet1\y,13,13,komet2\x,komet2\y,13,13) Then Delete komet2.komet Delete komet1.komet EndIf EndIf Next Next End Function Wenn ich nu alles in mein Programm hau: Code: [AUSKLAPPEN] Graphics 1024,768,16,1
SetBuffer BackBuffer() SeedRnd MilliSecs() Type komet Field x# Field y# Field vx# Field vy# End Type Repeat Cls If KeyHit(9) Then komet_erstellen() komet_zeichnen() kollision() Flip Until KeyHit(1) End Function komet_erstellen() komet1.komet = New komet komet1\x = Rand(200,400) komet1\y = Rand(200,400) komet1\vx = Rnd(-0.4,0.4) komet1\vy = Rnd(-0.4,0.4) End Function Function komet_zeichnen() For komet1.komet = Each komet komet1\x = komet1\x + komet1\vx komet1\y = komet1\y + komet1\vy Color 255,255,255 Oval komet1\x,komet1\y,13,13 Next End Function Function kollision() For komet1.komet = Each komet For komet2.komet = Each komet If komet1.komet <> komet2.komet Then If RectsOverlap(komet1\x,komet1\y,13,13,komet2\x,komet2\y,13,13) Then Delete komet2.komet Delete komet1.komet EndIf EndIf Next Next End Function dann hab ich das Problem, dass die Kollision nur manchmal funktioniert. Wenn nicht, dann kommt die Fehlermeldung "Object does not exist". Ich hab die vermutung, dass die Kollision nur zwischen zwei hintereinander erstellten Kometen abläuft, andere melden den Fehler. Aber eig dürfte des doch auch nicht sein, da ich doch die Bedingung 'If komet1.komet <> komet2.komet Then . . .' drinne hab. Andererseits hab ich leider auch kp, wie ich des anders machn könnt. Helft mir doch bitte, ich bin hier am durchdrehn . . . thx GargaMel |
||
- Zuletzt bearbeitet von GargaMel am So, Jan 17, 2010 13:35, insgesamt einmal bearbeitet
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Exit![]() Du musst also aus der inneren Schleife springen, wenn du beide Kometen gelöscht hast. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem liegt da:
Code: [AUSKLAPPEN] Delete komet2.komet
Du Löschst beide Kometen, dann macht die innere Schleife weiter, Komet2 enthält wieder ein Objekt, aber Komet1 ist Null -> auf Felder zugreifen gibt einen Fehler.
Delete komet1.komet Ein Zusätzliches Feld im Type benutzen, das angibt, ob der Komet bei nächster Gelegenheit gelöscht werden soll, z.B. nach dem Zeichnen... Code: [AUSKLAPPEN] Oval komet1\x,komet1\y,13,13
if komet1\killMe = True then delete komet1 Next Edit: Uh,okay, Exit sollte natürlich auch gehen... |
||
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) |
GargaMel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey danke Leute für die schnellen Antworten! Funktioniert nu einwandfrei ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group