[Erledigt!] Object doesn´t exist! Problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Hendy

Betreff: [Erledigt!] Object doesn´t exist! Problem

BeitragSo, Sep 06, 2009 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Gemeinschaft,

ich habe folgendes Problem, das ich auch nach mehreren durchgängen des Codes nicht lösen konnte.
Ein Code erklärt alles:
Code: [AUSKLAPPEN]
[quote]Graphics 1024, 768
SetBuffer BackBuffer()

 
Type Inf
   Field xpos
   Field ypos
   Field leben
   Field speed
End Type


Type schuss
   Field x_Pos
   Field y_Pos
   Field winkel#
End Type

Global s.schuss
Global a.Inf


Global trigger = 0
;------------------------------------------------------------Hauptschleife------------------------------------------------------------------

Repeat
Cls

gegner()
schuss()
Turm()



Flip
Until KeyHit(1)
End


;------------------------------------------------------------Funktionen---------------------------------------------------------------------
Function schuss()
x1= MouseX()
y1= MouseY()

w# = ATan2(x1-505,y1-205)



If MouseDown(1) Then


      s = New schuss
      s\x_Pos = 505
      s\y_Pos = 205
      s\winkel# = w# + Rnd(0,6)

EndIf


For s = Each schuss
   
   
   
   For a = Each Inf
      Color 255,0,0
      
      
      If s\x_Pos = a\xpos Then
            
            Delete a
      EndIf
         
      If s\y_pos = a\ypos Then                    
         
            Delete a
      EndIf

      
      
      
      Line s\x_Pos,s\y_Pos,s\x_Pos+Sin(s\winkel#)*10,s\y_Pos+Cos(s\winkel#)*10
      s\x_Pos = s\x_Pos + Sin(s\winkel#) * 20
      s\y_Pos = s\y_Pos + Cos(s\winkel#) * 20
      Color 255,255,255
      
      
      
      If s\x_Pos = a\xpos Then        ;FEEEHLEEER???

            
            Delete a
      EndIf
         
      If s\y_pos = a\ypos Then                                
            Delete a
      EndIf
   Next
Next





End Function






Function Turm()                     
   x1= MouseX()
   y1= MouseY()

   Oval 500, 200, 10, 10 ,1          


   Color 255,0,0                  
   Line 505,205,x1, y1               
   Color 255,255,255


End Function

Function Gegner()
   
If MouseHit(3) Then    
   a.Inf = New Inf
   a\xpos# = Rnd(0,1024)
   a\ypos# = 0
   a\leben = 100
   a\speed = Rnd(1,3)
End If

If MouseHit(2) Then
   Delete Each Inf
   anz=0
End If

For a.Inf = Each Inf
   anz = anz +1
   Line a\xpos,a\ypos,a\xpos+10,a\ypos+10
   Line a\xpos,a\ypos+10,a\xpos+10, a\ypos
   a\ypos = a\ypos + a\speed
   Text a\xpos,a\ypos, "Health: " + a\leben +" Speed: "+a\speed
   If a\ypos > 768 Then
      Delete a.inf
      anz = anz -1
   End If
Next

Print anz




End Function

Linke Maustaste schießen,
Mittlere "gegner" erstellen,
linke Alle gegner Löschen.

An der Stelle wo ich den Kommentar Fehler beigefügt habe, stoppt das Programm mit der Fehlermeldung Object doesn't exist.


Woran liegt das?
  • Zuletzt bearbeitet von Hendy am Mo, Sep 07, 2009 21:54, insgesamt 2-mal bearbeitet
 

tobias12

BeitragSo, Sep 06, 2009 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
bist du dir sicher, dass auch ein objekt erstellt wird??
Mein Projekteforum
  • Zuletzt bearbeitet von tobias12 am So, Sep 06, 2009 20:03, insgesamt einmal bearbeitet
 

Hendy

BeitragSo, Sep 06, 2009 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
tut mir leid.^^

hab ich schon berichtigt als ich das ebenfalls sah, hatte mich verdrückt.

EDIT: in Zeile 48

EDIT2: Ziemlich bei mousedown(1)

Eingeproggt

BeitragSo, Sep 06, 2009 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem liegt in der Schuss-Funktion, in Zeile 68 bis 76. Dort wird a gelöscht bzw. kann gelöscht werden unter bestimmten Bedingungen und dann kommt in Zeile 88 der Fehler weil du nochmal darauf zugreifen willst.

Ich würde den ganzen For-Block so umschreiben, scheint zu funktionieren auf den ersten Blick:

Code: [AUSKLAPPEN]
Color 255,0,0
   
   For s = Each schuss
      
      For a = Each Inf
         
         If s\x_Pos = a\xpos Then
            
            Delete a
         ElseIf s\y_Pos = a\ypos Then                     
            
            Delete a
         EndIf
         
         
         Line s\x_Pos,s\y_Pos,s\x_Pos+Sin(s\winkel#)*10,s\y_Pos+Cos(s\winkel#)*10
         s\x_Pos = s\x_Pos + Sin(s\winkel#) * 20
         s\y_Pos = s\y_Pos + Cos(s\winkel#) * 20
         
      Next
   Next
   
   Color 255,255,255


Und es wird dir damit auch ein bisserl Rechenleistung gespart weil die Color-Befehle nur einmal ausgeführt werden und nciht für jedes Objekt einzeln Wink

mfG; Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

mpmxyz

BeitragSo, Sep 06, 2009 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Color 255,0,0

For s = Each schuss

For a = Each Inf

If s\x_Pos = a\xpos Then

Delete a
ElseIf s\y_Pos = a\ypos Then

Delete a
EndIf



Next
Line s\x_Pos,s\y_Pos,s\x_Pos+Sin(s\winkel#)*10,s\y_Pos+Cos(s\winkel#)*10
s\x_Pos = s\x_Pos + Sin(s\winkel#) * 20
s\y_Pos = s\y_Pos + Cos(s\winkel#) * 20
Next

Color 255,255,255


Was auch immer Inf ist, aber die Zeichenfunktion von den Schüssen sollte nicht noch in einer zweiten, unabhängigen Schleife wiederholt werden.
Entweder wird das Programm langsam oder wird kein Geschoss gezeichnet, wenn kein Inf-Objekt existiert.
Außerdem hängt die Geschwindigkeit von der Anzahl der Inf-Objekte ab.
Und das sollte natürlich nicht sein.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Hendy

BeitragSo, Sep 06, 2009 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die schnellen antworten werde es direkt versuchen, umzusetzen.

@ mpmxyz
Inf soll so viel heißen wie Infanterie denn nach und nach will ich mehr objekte einbauen.

Da hast du natürlich recht, fällt dir eine Alternative ein, für dieses Geschwindigkeits Problem?
Smile Very Happy Very HappyD

mpmxyz

BeitragSo, Sep 06, 2009 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hendy, schaue doch mal in meine Code-Modifikation.
Die Bewegung ist schon aus der Schleife heraus.
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Hendy

BeitragMo, Sep 07, 2009 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja hast du. Embarassed hatte ich erst nicht gesehen.
Smile Very Happy Very HappyD

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group