ein seltsamer bug, x koordinate viel zu riesig

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bobbleboy

Betreff: ein seltsamer bug, x koordinate viel zu riesig

BeitragSo, Aug 01, 2010 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso reißt die x koordinate ab und an so hoch?
sie ist markiert...
hier ist die ganze funktion zu sehen, in der ein gegner sich bewegt.
damit er diagonal nicht schneller läuft als horizontal, spalte ich seine geschwindigkeit in x und y auf.

beim addieren / multiplizieren buggt er sich und fetzt ihn astronomisch aus der karte, was bei einer tilemap karte von dim 100,100 zum absturz führt.

hier mit lasse ich den debugger stoppen: (teilweise im code zu sehen)
BlitzBasic: [AUSKLAPPEN]
If g\x<0 Or g\x> 3199 Or g\y<0 Or g\y> 3199 Or g\zielx<0 Or g\zielx> 3199 Or g\ziely<0 Or g\ziely> 3199 Then Stop ;der Test ob sie aus der karte fetzen


link:
http://img194.imageshack.us/img194/6481/bugwm.jpg
user posted image

nochmal der relevante code als code:
BlitzBasic: [AUSKLAPPEN]
Function movegegner(g.gegner,a.player,s.stinkeknoten)
;sieht er uns?
g\wziel = ATan2((g\ziely-g\y),(g\zielx-g\x))
g\wplayer = ATan2((a\y-g\y),(a\x-g\x))
If g\wziel <0
g\wziel=g\wziel+360
EndIf
g\sicht = False
If (a\x-g\x)^2+(a\y-g\y)^2<250000 ;sichtweite player zombie
g\sicht = rectline(g\x,g\y,a\x,a\y)
End If

;line of sight
If g\sicht = True
modus(1,g,a,s)
If g\x<0 Or g\x> 3199 Or g\y<0 Or g\y> 3199 Or g\zielx<0 Or g\zielx> 3199 Or g\ziely<0 Or g\ziely> 3199 Then Stop ;der test ob sie aus der karte fetzen
End If
If g\sicht = True Or (a\x-g\x)^2+(a\y-g\y)^2<22500
drawgegner(g)
End If
If g\sicht = False And (g\zielx-g\x)^2+(g\ziely-g\y)^2<25
modus(2,g,a,s)
If g\x<0 Or g\x> 3199 Or g\y<0 Or g\y> 3199 Or g\zielx<0 Or g\zielx> 3199 Or g\ziely<0 Or g\ziely> 3199 Then Stop ;der test ob sie aus der karte fetzen
End If

;zum ziel gehen
If g\x<0 Or g\x> 3199 Or g\y<0 Or g\y> 3199 Or g\zielx<0 Or g\zielx> 3199 Or g\ziely<0 Or g\ziely> 3199 Then Stop ;der test ob sie aus der karte fetzen

If (g\zielx-g\x)^2+(g\ziely-g\y)^2>25

xspeed#=g\speed# * Cos(g\wziel)
yspeed#=g\speed# * Sin(g\wziel)
g\x = g\x + calc_speed(xspeed) ;GENAU HIER SPRINGT ER WAHNSINNIG HOCH

g\y = g\y + calc_speed(yspeed)

End If
If g\x<0 Or g\x> 3199 Or g\y<0 Or g\y> 3199 Or g\zielx<0 Or g\zielx> 3199 Or g\ziely<0 Or g\ziely> 3199 Then Stop ;der test ob sie aus der karte fetzen
;Line g\zielx,g\ziely,g\x,g\y
End Function

dt ist zur bug zeit immer 0 !
was einfach bedeuten würde, das g\x nicht größer werden dürfte Sad
BlitzBasic: [AUSKLAPPEN]

Function calc_speed#(spd#)
Return dt*spd/20
End Function
 

Bobbleboy

BeitragSo, Aug 01, 2010 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
niemand da der mir helfen kann?
gehört das noch zu beginner?

Xeres

Moderator

BeitragSo, Aug 01, 2010 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Vollständigen Code kann vermutlich niemand nachvollziehen, wo ein Fehler entsteht...
Benutze Debuglog um alle wichtigen Variablen vor dem Fehlerpunkt mit zu schreiben.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Bobbleboy

BeitragMo, Aug 02, 2010 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
mehr code?
ist das ein witz?
kompletter debug screenshot und du willst noch mehr?
alles relevante ist hier im thread.

Silver_Knee

BeitragMo, Aug 02, 2010 1:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If (g\zielx-g\x)^2+(g\ziely-g\y)^2>25

      xspeed#=g\speed# * Cos(g\wziel)
      yspeed#=g\speed# * Sin(g\wziel)
      g\x = g\x + calc_speed(xspeed) ;GENAU HIER SPRINGT ER WAHNSINNIG HOCH

      g\y = g\y + calc_speed(yspeed)

   End If


->

Code: [AUSKLAPPEN]
If (g\zielx-g\x)^2+(g\ziely-g\y)^2>25

      xspeed#=g\speed# * Cos(g\wziel)
      yspeed#=g\speed# * Sin(g\wziel)
      g\x = g\x + calc_speed(xspeed) ;GENAU HIER SPRINGT ER WAHNSINNIG HOCH
  Debuglog "x: "+g\x+" xs:"+xspeed+" s:"+g\speed
      g\y = g\y + calc_speed(yspeed)

   End If


und dann guck dir mal die zahlen bei debuglog an vllt fällt dir irgendein muster auf

Holzchopf

Meisterpacker

BeitragMo, Aug 02, 2010 9:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Bobbleboy, darf ich dich bitten, in Zukunft mehr Geduld an den Tag zu legen? Schon nach knapp zwei Stunden den eigenen Thread wieder zu pushen, ist ziemlich hart an der Grenze...

Ich erinnere dich, dass hier alles auf freiwilliger Basis abläuft - niemand ist gezwungen, dir zu helfen. Vielleicht geht's den meisten einfach so wie mir: Ich hab mir deinen Code und den Screenshot nun ziemlich lange und genau angeschaut und es gelingt mir nicht, dabei auf die Ursache deines Problems zu schliessen Confused
Wahrscheinlich geht das vielen anderen auch so (auch Silver_Knee konnte dir lediglich Unterstützung bieten, wie DU den Fehler ausmachen kannst (denselben Rat gab dir Xeres übrigens auch)). Dann ist's logisch, dass keine Antwort kommt, weil keiner den Fehler findet. Natürlich kannst du nicht ahnen, dass wir in dem Code da den Fehler nicht finden, wenn wir es dir nicht sagen.
Allerdings tat Xeres genau das und alles, was von dir zurückkommt, ist eine ziemlich harsche Antwort, die schon geradezu frech ist.

Natürlich ist der Screenshot gut gemeint - aber der geübte Hilfeleistende kopiert einen Code (wenn der Fehler nicht offensichtlich ist), lässt's zum Fehler laufen, setzt ein paar DebugLogs, debuggt und schaut sich die Werte selber an. Wie kann ich anhand des Screenshots und deiner Aussage wirklich 100% sicher sein, dass dt=0 ist? Nicht, dass ich dir nicht vertrauen würde, aber wie du schon selber sagtest: x dürfte sich in dem Falle nicht verändern.
(Ich persönlich würde auch gerne wissen, in welcher Zeile der Debugger stand, als das Bildchen gemacht wurde - ist ja ziemlich seltsam, dass nur g\x ausrudert, g\y aber nicht Confused )

Und dann möchte ich schlussendlich noch darauf hinweisen, dass Doppelposts hier nicht gerne gesehen sind. Solche, die dem Zweck, den eigenen Thread zu pushen, dienen, erst recht nicht. An einem Sonntag Abend sollte man sich schon mal mehr als zwei Stunden auf eine Antwort von den Menschen im Forum gedulden können.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group