Problem mit "object does not exist"
Übersicht

Razor1994Betreff: Problem mit "object does not exist" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So ich bins schon wieder. Ich weiss kein einfallsreicher Titel aber mir ist nichts passenderes eingefallen.
Mein Problem ist: Ich hatte vor ein kleines Programm zu schreiben das eine Zelle darstellt die "frisst", grösser wird, sich teilt und die 2 neuen Zellen wieder "fressen" usw. Aber wenn sich die Zelle geteilt hat und auf ein Futterteilchen stösst kommt die Fehlermeldung. Und zwar bei der Funktion Zellewachstum bei rectsoverlap. Hier der Code: [AUSKLAPPEN] Global screen_x = 640
Global screen_y = 480 Graphics screen_x, screen_y,0,0 SetBuffer BackBuffer() SeedRnd MilliSecs() ;variablen Global frametimer = CreateTimer(30) Global counter Global richtung = 1 Global anzahlf ;Types Global rund.zellentyp Type zellentyp Field x Field y Field groesse Field counter End Type rund = New zellentyp rund\x = 300 rund\y = 400 rund\groesse = 50 counter = 0 Global rund2.futter Type futter Field x Field y Field groesse Field naehrwert End Type anzahl = Rnd(1,30) For i = 1 To anzahl rund2 = New futter rund2\x = Rnd(10,630) rund2\y = Rnd(10,470) rund2\groesse# = 10 rund2\naehrwert# = Rnd(1,5) Next ;Hauptschleife Repeat WaitTimer(frametimer) Cls ZelleBewegen ZelleWachstum Futter Zeichnen Flip 0 Until KeyHit(1) End ;Funktionen Function ZelleBewegen() For rund.zellentyp = Each zellentyp rund\counter = rund\counter + 1 If rund\counter = 30 Then richtung = Rnd(0,5) rundcounter = 0 EndIf If richtung = 1 Then rund\x = rund\x + Rnd(0,3) rund\y = rund\y - Rnd(0,3) ElseIf richtung = 2 Then rund\x = rund\x + Rnd(0,3) rund\y = rund\y + Rnd(0,3) ElseIf richtung = 3 Then rund\x = rund\x - Rnd(0,3) rund\y = rund\y + Rnd(0,3) ElseIf richtung = 4 Then rund\x = rund\x - Rnd(0,3) rund\y = rund\y - Rnd(0,3) EndIf ;randbegrenzungen If rund\x => screen_x - rund\groesse Then rund\x = rund\x - 5 ElseIf rund\x =< 0 Then rund\x = rund\x + 5 EndIf If rund\y => screen_y - rund\groesse Then rund\y = rund\y - 5 ElseIf rund\y =< 0 Then rund\y = rund\y + 5 EndIf Next End Function Function Futter() If KeyHit(28) Then SetupFutter EndIf End Function Function Zeichnen() For rund2.futter = Each futter Oval rund2\x, rund2\y, rund2\groesse, rund2\groesse Next For rund.zellentyp = Each zellentyp Oval rund\x, rund\y, rund\groesse, rund\groesse Next End Function Function ZelleWachstum() For rund2.futter = Each futter For rund.zellentyp = Each zellentyp If RectsOverlap (rund2\x, rund2\y, rund2\groesse, rund2\groesse, rund\x, rund\y, rund\groesse, rund\groesse) Then rund\groesse = rund\groesse + rund2\naehrwert Delete rund2.futter EndIf Next Next For rund.zellentyp = Each zellentyp If rund\groesse => 100 Then rund\groesse = 50 rund = New zellentyp rund\groesse = 50 rund\counter = 0 EndIf Next End Function Function SetupFutter() anzahlf = Rnd(1,30) For i = 1 To anzahlf rund2 = New futter rund2\x = Rnd(10,630) rund2\y = Rnd(10,470) rund2\groesse# = 10 rund2\naehrwert# = Rnd(1,5) Next End Function edit: da es keine bilder braucht könnt ihr es auch einfach bei euch laufen lassen um zu sehen was ich meine. |
||
User posted image
kommt in meinen Runescape clan |
- Zuletzt bearbeitet von Razor1994 am Mi, Mai 12, 2010 18:38, insgesamt einmal bearbeitet
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
"Object does not exist" ![]() BlitzBasic: [AUSKLAPPEN] For rund2.futter = Each futter Hier hast du eine Sache nicht bedacht: Nachdem rund2 gelöscht wurde, kann es sein, dass weitere Kollisionen geprüft werden, da nach der geprüften Zelle weitere Zellen folgen können. Da das zu prüfende Objekt aber schon gelöscht wurde, gibt es die entsprechende Fehlermeldung. Hier bietet sich ein Exit ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also 1. Natürlich heisst es "object does not exist" welch dummer Fehler ![]() 2. Ich war in der Hilfe wegen Exit aber weiss jetzt nicht ob ich das ganz richtig kapiert habe. Währe der code dann so? So funktionierts nämlich. Code: [AUSKLAPPEN] For rund2.futter = Each futter
For rund.zellentyp = Each zellentyp If RectsOverlap (rund2\x, rund2\y, rund2\groesse, rund2\groesse, rund\x, rund\y, rund\groesse, rund\groesse) Then rund\groesse = rund\groesse + rund2\naehrwert Delete rund2.futter exit EndIf Next Next |
||
User posted image
kommt in meinen Runescape clan |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Halte mal nach diesem Symbol Ausschau: ![]() 2. Warum muss man zweifeln, wenn der Code so funktioniert, wie er funktionieren sollte? ![]() Du scheinst den Befehl richtig verstanden zu haben: Mit Exit ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
- Zuletzt bearbeitet von mpmxyz am Mi, Mai 12, 2010 18:30, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde sicherheitshalber ausschließen, dass rund und rund2 das Selbe Objekt sind... wenn trotzdem klappt - um so besser - aber man kann ja nie wissen...
Code: [AUSKLAPPEN] For rund2.futter = Each futter
For rund.zellentyp = Each zellentyp If rund <> rund2 Then If RectsOverlap (rund2\x, rund2\y, rund2\groesse, rund2\groesse, rund\x, rund\y, rund\groesse, rund\groesse) Then rund\groesse = rund\groesse + rund2\naehrwert Delete rund2.futter Exit EndIf EndIf Next Next |
||
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) |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres:
*HUST* "rund" ist ein "zellentyp" und "rund2" ist ein "futter". Wie hast du es geschafft, dass diese Bedingung mal nicht zutrifft? ![]() mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaub, ich hab in letzter Zeit was an den Augen... ![]() ![]() |
||
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) |
Razor1994 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also Xeres (ich les irgendwie immer Xerxes^^)
Ich nehme rund und rund2 für verschiedene Types weil ich auch noch quadratische plane. Und das mit den Fresszellen ist eine Gute Idee die bau ich gleich ein.(oder versuchs zumindest. Falls ichs nicht schaffen sollte erfahrt ihrs als erste^^) |
||
User posted image
kommt in meinen Runescape clan |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich weiß jetzt nicht, ob der Fehler behoben wurde, aber mir kommt die erste Zeile in diesem Codeblock komisch vor:
BlitzBasic: [AUSKLAPPEN] Global rund2.futter Du deklarierst den Typ Futter erst danach, daran könnte es liegen. Sorry wenn ich Müll rede, habe länger nicht mehr mit BB Types gearbeitet. Lg, M0rgenstern |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
@M0rgenstern
Es ist (fast) egal, wo man seine Types deklariert. Es sind nur Definitionen für ein paar Daten, aber kein echter Code, welcher ausgeführt wird. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, ich hab mich eher an der Deklaration BlitzBasic: [AUSKLAPPEN] Global rund2.futtergestört. Da war ich mir nicht so sicher bei. Lg, M0rgenstern |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group