"Object does not Exist"-Fehler
Übersicht

GarikBetreff: "Object does not Exist"-Fehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn im folgenden Code das erste Teilchen auf die Tür trifft, erscheint in der Zeile
"If Atom\Ladung=0 And tuer=1 And Atom\Y <=300 Then" die Fehlermeldung "Object does not exist". Wie behebe ich diesen Fehler? Zur besseren Übersicht hab ich mal die für den Fehler möglicherweise relevanten Stellen markiert. Graphics 1280,1024,32,1 SetBuffer BackBuffer() SeedRnd MilliSecs() ;Einlesen der Grafiken Positiv=LoadImage("Positivteilchen.png") Negativ=LoadImage("Negativteilchen.png") Zielbox=LoadImage("Zielbox.png") Global Tuer_Auf=LoadImage("Tür_Auf.png") Global Tuer_Zu=LoadImage("Tür_Zu.png") ;Font Global Lebenfont=LoadFont("Arial",60,1,0,0) Global Gameoverfont=LoadFont("Arial",250,1,0,0) SetFont lebenfont ;Konstanten Const tuer_x=585 Const tuer_y=296 ;Variablen Geschw=2 ;2 Pixel pro Durchlauf Global tuer=1 ;Tür offen Global Leben=4 ;Types Type Teilchen Field X ;X-Position Field Y ;Y-Position Field Ladung ;Negativ/Positiv End Type Global Atom.Teilchen ;Hauptschleife Repeat ClsColor 0,0,0 Cls ;Teilchen werden gezeichnet For Atom.Teilchen = Each Teilchen If Atom\Ladung = 1 Then DrawImage Positiv,Atom\X,Atom\Y End If If Atom\Ladung = 0 Then DrawImage Negativ,Atom\X,Atom\Y End If Atom\Y = Atom\Y - Geschw If Atom\Y <= 300 Then Delete Atom.Teilchen a=a+1 leben Next If MilliSecs() - Timer1 > 500 Then Timer1 = MilliSecs() GenTeilchen End If ;Zeichnen der Zielbox DrawImage Zielbox,490,0 ;Türsteuerung Tuersteuerung Flip Until KeyHit(1) End ;Generierung der Teilchen Function GenTeilchen() Atom.Teilchen = New Teilchen Atom\X = Rand(600,650) ;zufällige X-Pos Atom\Y = 1024 ;Y-Pos Atom\Ladung = Rand(0,1) ;0 = Negativ, 1 = Positiv End Function ;Steuerung der Tür Function Tuersteuerung() ;Tür wird in jeweiligem Zustand gezeichnet If tuer=0 Then DrawImage tuer_zu,tuer_x,tuer_y End If If tuer=1 Then DrawImage tuer_auf,tuer_x,tuer_y End If ;Beim Drücken der Leertaste ändert sich der Zustand der Tür If KeyHit(57) Then tuer=tuer+1 If tuer>1 Then tuer=0 End If End If End Function Function Leben() ;Leben werden angezeigt Text 628,15,Leben ;Game Over, wenn keine Leben mehr If Leben=0 Then SetFont gameoverfont Text 50,350,"Game Over" Delay 3000 End End If ;Leben verlieren, wenn Negativteilchen reinkommt If Atom\Ladung=0 And tuer=1 And Atom\Y <=300 Then Leben=Leben-1 End If End Function Thx im Voraus |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Indem du Atom auch an die Funktion übergibst.
Da eine Funktion ein abgeschlossener Variablenraum ist, hat die Funktionen keinen Schimmer was ausserhalb existiert, falls es nicht global definiert ist. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
If Atom\Y <= 300 Then Delete Atom.Teilchen -> Hier löscht Du den Eintrag und gleich darauf wird in der Function leben() versucht auf diesen Eintrag nochmals zuzugreifen.
Abhilfe verschafft die Function vor dem löschen aufzurufen, oder, wenn dies die Programmfunktion beeinträchtigen würde, die Function nur aufzurufen wenn der Eintrag nicht Null ist: Code: [AUSKLAPPEN] if atom.teilchen<>null leben()
|
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Garik |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Thx für die schnellen Antworten erstmal.
@Dreamora Typeobjekte sind doch automatisch global oder? Außerdem hab ich Atom.Teilchen zur Sicherheit trotzdem globalisiert, daran kann es also nicht liegen, trotzdem thx. ![]() @Hubsi Wenn ich deine Zeile einfüge, kommt keine fehlermeldung mehr, aber die Leben werden immer noch nicht abgezogen, da muss ich nomma genauer gucken, ob ich vllt etwas übersehen hab. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann würde ein aufrufen der Function leben() noch vor dem löschen des Eintrags dem wohl Abhilfe schaffen, bzw. schlicht die Abfrage ob ein Leben gelöscht werden soll aus der Function raus und in die Schleife reinzunehmen.
Und Types sind nicht standardmäßig global (verwechselst Du vielleicht mit Arrays), sonst würde die Zeile Zitat: Global Atom.Teilchen
auch kaum Sinn machen ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Garik |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke ![]() dass ich da nicht selbst draufgekommen bin... |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Stimmt scheint global zu sein
Bitte benutze das nächste mal [ code] [ /code] um den Code richtig formatiert einzufügen. Das heisst Tabulator wenn du in ein If oder eine Schleife oder eine Funktion kommst und so. Einfach damit code lesbar ist. Ach ja: .Teilchen musst du net jedes Mal schreiben. Es reicht wenn du es bei der Definition machst. Danach ist die Variable immer vom Type Teilchen und kann von keinem anderen Type mehr sein. (soll Leute geben die behaupten das erhöhe die Lesbarkeit, was kompletter Blödsinn ist. Dann würden sie besser einen TypeKürzerl vorne anhängen, wie teil für .Teilchen -> teilAtom) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group