Komischer Bug

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

lucifer

Betreff: Komischer Bug

BeitragDo, Mai 27, 2004 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab nen Pathfinding-Algorithmus geschrieben, klappt auch alles ganz gut solange ich ne Text ausgabe in einer For-Schleife mache. Damit ich halt überprüfen kann ob alles klappt. Da das ja an der Performance zieht nehme ich die natürlich weg, dann klappt das ganz nicht mehr. Wenn ich das aber wieder hinmache klappt alles wieder. Aber warum?

BladeRunner

Moderator

BeitragDo, Mai 27, 2004 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Code?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

lucifer

BeitragDo, Mai 27, 2004 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, dann poste ich denn mal. Ich weiß der ist nicht sonderlich gut. Aber ich arbeite noch dran:

Code: [AUSKLAPPEN]

Global waypoint.waypoint
Type waypoint
  Field entity
  Field name$
  Field sphere
End Type

Function findpath(npc.test,endwaypoint$)
    numberofarray = 0
   npc\currentnode = 0
   npcnode = 0
   nexit = 0

   
   npc\targetnode$ = endwaypoint$

    For waypoint.waypoint = Each waypoint
     If waypoint\name$ = endwaypoint$ Then endwaypoinentity = waypoint\entity
    Next

   nextnode = CreatePivot()
   PositionEntity nextnode,EntityX(npc\mesh),EntityY(npc\mesh),EntityZ(npc\mesh)
    .try
   numberofarray = 0
   sortclose(nextnode,npc.test)
   For i = 0 To numberofarray
     For waypoint.waypoint = Each waypoint
      If waypoint\name$ = close(i)
       waypointentity = waypoint\entity
       waypointname$ = waypoint\name
       If numberofarray > 1
        For inp = 0 To numberofarray - 1
           If EntityDistance(closeentity(inp),endwaypoinentity) <= EntityDistance(waypointentity,endwaypoinentity) Then waypointentity = closeentity(inp):npc\way[npc\currentnode] = close(inp):npc\currentnode = npc\currentnode + 1:nextnodename = close(inp):nextnode = closeentity(inp)   
       Next
       Else If numberofarray = 1
       If EntityDistance(closeentity(0),endwaypoinentity) <= EntityDistance(waypointentity,endwaypoinentity) Then npc\way[npc\currentnode] = close(0):npc\currentnode = npc\currentnode + 1:nextnodename = close(0):nextnode = closeentity(0) 
        End If
       End If
    Next
   Next

   If nextnodename <> endwaypoint Then Goto try Else npc\currentnode = 0:Return
End Function

Function sortclose(entity,npc.test)
For waypoint.waypoint = Each waypoint
 haveanode = 0
 For ion = 0 To 200
 If waypoint\name$ = npc\way[ion] Then haveanode = 1
 Next
 If EntityDistance(entity,waypoint\entity) <= 16 And waypoint\name <> nextnodename
  If haveanode = 0 Then close(numberofarray) = waypoint\name:closeentity(numberofarray) = waypoint\entity:numberofarray = numberofarray + 1
      Cls
  End If 
Next
End Function


Und so ist das mit der Textausgabe:

Code: [AUSKLAPPEN]

       Else If numberofarray = 1
       If EntityDistance(closeentity(0),endwaypoinentity) <= EntityDistance(waypointentity,endwaypoinentity) Then npc\way[npc\currentnode] = close(0):npc\currentnode = npc\currentnode + 1:nextnodename = close(0):nextnode = closeentity(0) 
        End If
       End If
    Next
   Next
   Text 0,500,nextnodename
   For ko = 0 To 150
    Text ko*10,ko*10,npc\way[ko]:Flip
   Next
   If nextnodename <> endwaypoint Then Goto try Else npc\currentnode = 0:Return

BladeRunner

Moderator

BeitragDo, Mai 27, 2004 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Frage: was für ein Game soll es werden? Wo hast du die Textausgabe gemacht. was funktioniert nicht? (Gibt er Fehlermeldungen aus ?)

EDIT:
TEXTAUSGABE hab ich übersehen, sorry
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

lucifer

BeitragDo, Mai 27, 2004 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Das soll nen RPG werden, in 3D. Das Pathfinding brauche ich halt für die Tagesverläufe. Und das Problem ist das er sich sozusagen "verläuft". Der chckt halt die Waypoint die in eine Sackkasse gehen und deshalb kann er nicht zurüch und man kommt in eine Endlos-Schleife. Das komische ist nur das es klappt wenn ich die Textausgabe einfüge.

Travis

BeitragDo, Mai 27, 2004 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte auch mal so einen komischen Fehler. Da habe ich mir bei einer Menüsteuerung zu Debugzwecken den aktuell gewählten Menüpunkt anzeigen lassen. Als dann alles funktionierte habe ich's wieder entfernt und danach funktionierte die Steuerung nicht mehr korrekt (ein Menüpunkt wurde immer übersprungen.

Ich konnte das nie lösen, da habe ich diese Ausgabe einfach in der Hintergrundfarbe (also Schwarz auf Schwarz) dargestellt und alles läuft bestens. Dabei handelt es sich nur um den Befehl "Locate 0,0: Print m" und nichts weiter.

Was dein Problem angeht - ich bekomme es überhaupt nicht zum laufen, aber vielleicht habe ich den zweiten Code auch nur an der falschen Stelle eingefügt. Hab es 5 Minuten lang versucht. Nicht böse sein, aber der Code ist echt unübersichtlich.

Er sagt immer Type 'test' not found. Tut mir leid, ich weiss dieser Beitrag ist sinnlos, aber ich wollte das nur loswerden.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

lucifer

BeitragDo, Mai 27, 2004 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja der Test Typ ist der Typ für die Npc und befindet sich in einer anderen Datei. Und wegen der Hintergrund Farbe, ich will ja das das gar nicht mehr ausgegeben wird, weil das das Ganze un so zirak das 10 fache verlangsamt und ich will das ja Real-Time nutzen.
 

Dreamora

BeitragDo, Mai 27, 2004 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
es kann auch sein dass der Algo ein bug hat der nicht auftritt wenn es ausgegeben wird, weil er dann einfach "zu langsam" ist, um den bug zu generieren

Mir kommt ehrlich gesagt dein wegfinde algo eh leicht komisch und konfus vor.

Wenn ich zeit hab werd ich ihn mir mal genauer ansehen. bis dahin kannst du ja theoretisch einen kleinen pfad machen den du manuell traversieren kannst und dann deinen algo drauf ansetzen und gucken ob er ihn gleich traversieren würde


alternativ dazu wären a* ( astar ) und dijkstra - pathfinding vielleicht ne interessante lektüre bis dorthin oder allgemein graphentraversierungsalgorithmen

lucifer

BeitragFr, Mai 28, 2004 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich hab halt noch nie vorher Pathfinding gemacht, und das ist mein erster Versuch. Das mit dem Zu lansam könnte natürlich seien, nur warum sollte der andere Entfernung ausrechenen, wenn das langsamer geht?

Ok hat sich erledigt, aber kennt vieleicht jemand nen gutes Tutorial für Pathfinding im 3d-Raum?

Shodan

BeitragFr, Mai 28, 2004 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ob an der "zu langsam für einen Bug" Theorie was dran ist, kannst du doch testen, indem du statt der Textausgabe ein delay einfügst, welches dein Prog um den selben Wert ausbremst. Code: [AUSKLAPPEN]
   Text 0,500,nextnodename
   For ko = 0 To 150
    Text ko*10,ko*10,npc\way[ko]:Flip
   Next

Mich irritiert auch das Flip in der For-Next-Schleife. wieso nicht nach der Schleife?
www.selfmadegames.de

lucifer

BeitragMo, Mai 31, 2004 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja gut, mit dem Flip das wird schon nichts ändern, oder?

Vulture

BeitragMo, Mai 31, 2004 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich weiss ja nicht nimmst du ohne den Textausgaben auch die "for" schleife und den Flip weg ?
User posted image
Projekte : TerraSE Terranigma - Break Up - Final Round - Survivor Elite - Sequence Basic

lucifer

BeitragMo, Mai 31, 2004 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja nehme ich.

Vulture

BeitragMo, Mai 31, 2004 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If nextnodename <> endwaypoint Then Goto try Else npc\currentnode = 0:Return

Ich würde da Mal eine DebugAusgabe anlegen ob er zurück geht oder nicht ? ist nur mal so als test Rolling Eyes
User posted image
Projekte : TerraSE Terranigma - Break Up - Final Round - Survivor Elite - Sequence Basic

lucifer

BeitragDi, Jun 01, 2004 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ok gute idee.

Also der geht wieder nachoben.

Vulture

BeitragDi, Jun 01, 2004 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
also geht er wieder auf Try zurück und das immer ?
User posted image
Projekte : TerraSE Terranigma - Break Up - Final Round - Survivor Elite - Sequence Basic

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group