NNP_DeleteVertex Problem (erledigt)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Broken Arrow

Betreff: NNP_DeleteVertex Problem (erledigt)

BeitragFr, Sep 11, 2009 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo erstmal
irgendwie schaffe ich es nicht das vertex zu löschen. immer wenn es gelöscht werden sollte stürtz das Programm ab mit folgender Fehlermeldung "Object does not exist"

In der Blitzhilfe steht
"Niemals sollte man einen Vertex einfach mit dem BlitzBasic - Befehl 'Delete' entfernen, da das einen sofortigen Absturz zur Folge hat."

HOffe ihr wisst was ich meine Sad

Danke im vorraus
mfg
Broky





BlitzBasic: [AUSKLAPPEN]

Cls
Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
Zeiter = CreateTimer(50) ;Timer initiallisieren
Include "NooNooPhysics.bb"
NNP_CreatePhysics 512, 1024, 1024 ;Physik initialisieren
NNP_SetGravity 0, 0 ;Gravitation setzen
Strecke.TEntity = NNP_CreateEntity( 1 )

Global genauigkeit = 2 ;wie viele Pixel die MAus von der Vertice oder einem anderen Punkt entfernt sein muss
Global Modus = 1 ; Edit Modus 1 => Vertex Zeichnen usw...
Global abstand ;klein Variable um den mit Sqr berechneten Abstand kurz aufzubewahren.

Type ob ;Mein Type für alles

End Type


Repeat
Cls
Color 255,255,255
Text 20,20,"1 => Vertex Zeichnen"
Text 20,40,"2 => Edge Zeichnen"
Text 20,60,""
Text 20,80,"4 => Vertex Loeschen"
Text 20,100,""
Text 20,140,"Derzeit Modus " + Modus


Maustaste=0

If MouseHit(1)
Maustaste=1
EndIf
If MouseHit(2)
Maustaste=2
EndIf
If MouseHit(3)
Maustaste=3
EndIf

If KeyHit(2)
Modus = 1
EndIf

If KeyHit(3)
Modus = 2
EndIf

If KeyHit(4)
Modus = 3
EndIf

If KeyHit(5)
Modus = 4
EndIf



If Modus = 1
If Maustaste=1
ob.TVertex = NNP_CreateVertex( Strecke, MouseX(), MouseY() ) ;Vertex erzeugen
EndIf
EndIf

If Modus = 4
If Maustaste=1

NNP_DeleteVertex( ob.TVertex)
EndIf
EndIf


For ob.TVertex = Each TVertex
abstand = Sqr((MouseX()-ob.TVertex\X#)^2+(MouseY()-ob.TVertex\Y#)^2)


If abstand < genauigkeit
Color 255,0,0
Oval ob.TVertex\X#-3,ob.TVertex\Y#-3,6,6,1
Color 255,255,255
EndIf

If Modus = 4 And Maustaste=1
If abstand < genauigkeit

NNP_DeleteVertex( ob.TVertex)

EndIf
EndIf

Next




NNP_UpdateForces ;Kräfte berechnen
NNP_UpdatePhysics ;Physik berechnen lassen
NNP_DebugRender DEBUG_EDGES + DEBUG_VERTICES ;Zeichnen

Flip
WaitTimer (Zeiter)
Until KeyDown (1)
Menschen sind Menschshlich
und machen Feller
  • Zuletzt bearbeitet von Broken Arrow am Fr, Sep 11, 2009 22:44, insgesamt einmal bearbeitet

Noobody

BeitragFr, Sep 11, 2009 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast in der Hauptschleife folgendes stehen Code: [AUSKLAPPEN]
If Modus = 4
   If Maustaste=1
      NNP_DeleteVertex( ob.TVertex)
   EndIf
EndIf


ob.TVertex ist aber die meiste Zeit Null; das liegt daran, dass du in der Hauptschleife eine Schleife stehen hast, die per For-Each durch alle Vertices durchgeht und als Schleifenvariable ebenfalls ob.TVertex verwendet. Nach Ende einer For-Each-Schleife ist die Schleifenvariable aber immer Null, daher stürzt das Programm auch mit der Fehlermeldung ab, weil du in der oben geposteten Abfrage NNP_DeleteVertex mit einem nicht-existenten Vertex aufrufst.

Die Lösung ist eigentlich ganz simpel - das obige auskommentieren (oder gleich ganz löschen). Du hast nämlich genau denselben Code in deiner For-Each-Schleife stehen, also kannst du trotzdem noch Vertices löschen.
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

Broken Arrow

BeitragFr, Sep 11, 2009 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Danke
Noobody des is mir jetzt wirklich ein bisschen peinlich
Ich wollte oben bei dem ersten DeleteVertex eine zweite For Each schleife bauen.
Dachte mir aber das dies sehr langsam ist und so habe ich es in die erste For schleife eingebaut
und habe vergessen dass erste zu löschen.
Danke Nochmals
ich glaub ich hätte noch ewig gesucht
Menschen sind Menschshlich
und machen Feller

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group