Fehler ohne debug build
Übersicht

battlegorgeBetreff: Fehler ohne debug build |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe ein kleines Programm geschrieben, dass das nächstgelegene Objekt findet.
Im Debugmodus funktioniert es einwandfrei. Aber wieso klappt es ohne Debug nichtmehr? Das mausgesteuerte Quadrat sollte sich wie im Debugmodus mit dem nächsten Quadrat verbinden. Und kann man der Funktion f_nearestenemy() auch einen Type übergeben, damit man nicht für alle Objekte verschiedene Funktionen braucht ? Code: [AUSKLAPPEN] Strict Graphics 800,600,0,85 'lists Global playerlist:tlist=CreateList() Global enemylist:tlist=CreateList() 'crete objects t_player.f_create(400,500) SeedRnd MilliSecs() For Local i:Byte=0 To 9 t_enemy.f_create(100+Rnd(600),100+Rnd(400)) Next 'main loop Repeat Cls f_update() Flip Until KeyHit(key_escape) Or AppTerminate() 'types Type t_player Field x# Field y# Function f_create(x#,y#) Local player:t_player=New t_player player.x=x player.y=y ListAddLast playerlist,player End Function Method m_update() x=MouseX() y=MouseY() Local target:t_enemy= f_nearestenemy(x,y) 'save nearest enemy as target DrawLine x,y,target.x,target.y DrawRect x-10,y-10,20,20 'draw distance For Local enemy:t_enemy=EachIn enemylist DrawText Int(f_distance(x,y,enemy.x,enemy.y)),enemy.x-10,enemy.y-25 Next End Method End Type Type t_enemy Field x# Field y# Function f_create(x#,y#) Local enemy:t_enemy=New t_enemy enemy.x=x enemy.y=y ListAddLast enemylist,enemy End Function Method m_update() DrawRect x-10,y-10,20,20 End Method End Type 'functions Function f_update() 'update objects For Local player:t_player=EachIn playerlist player.m_update() Next For Local enemy:t_enemy=EachIn enemylist enemy.m_update() Next End Function Function f_nearestenemy:t_enemy(x#,y#) 'find nearest enemy object Local distance#=1000 For Local enemy:t_enemy=EachIn enemylist 'get shortest distance (player-enemy) If f_distance(x,y,enemy.x,enemy.y) < distance Then distance= f_distance(x,y,enemy.x,enemy.y) Next For Local enemy:t_enemy=EachIn enemylist 'return nearest enemy If f_distance(x,y,enemy.x,enemy.y) = distance Then Return enemy Next End Function Function f_distance#(x1#,y1#,x2#,y2#) 'distance between 2 points Local a= x1-x2 Local b= y1-y2 If a<0 a= a*-1 If b<0 b= b*-1 Return Sqr(a*a+b*b) End Function |
||
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es kann sein, dass es ohne Debug mode viel schneller läuft... hatte ich auch schon <.< | ||
Starfare: Worklog, Website (download) |
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funktioniert bei mir sowohl mit als auch ohne Debug. | ||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
battlegorge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja ohne debug ist die Performance besser aber daran liegts nicht.
Mit Debug wird die Linie vom t_player Objekt zum nächsten t_enemy Objekt gezogen. Ohne Debug seltsamerweise vom t_player nach links oben zum Punkt 0,0 ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich stell einfach mal die Vermutung auf das deine Art die kürzeste Distanz und zugehörigen gegner zu finden der Grund dafür ist.
Anstatt da 2x durchzulaufen, speicher doch einfach distanz und enemy beim ersten durchlaufen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
mahe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nochmal:
Beim mir (Linux und neuestes BMax) macht Dein Programm sowohl mit als auch ohne Debugger genau das was es soll. |
||
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ, |
battlegorge |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Seltsam dass es bei dir unter Linux funktioniert, ich habe windows xp.
Und eigentlich sollte das Programm ohne Debug genauso laufen wie mit, wenn kein Fehler kommt. ![]() Vielleicht lag es wirklich an den 2 Schleifen hintereinander. Ich habe was geändert und jetzt funktionierts. Code: [AUSKLAPPEN] Strict Graphics 800,600,0,85 'lists Global playerlist:TList=CreateList() Global enemylist:TList=CreateList() 'crete objects t_player.f_create(400,500) SeedRnd MilliSecs() For Local i:Byte=0 To 9 t_enemy.f_create(100+Rnd(600),100+Rnd(400)) Next 'main loop Repeat Cls f_update() Flip Until KeyHit(key_escape) Or AppTerminate() 'types Type t_player Field x# Field y# Field target:t_enemy Function f_create(x#,y#) Local player:t_player=New t_player player.x=x player.y=y ListAddLast playerlist,player End Function Method m_update() DrawText Int(f_objectdistance(x#,y#)),x-10,y+20 For Local enemy:t_enemy=EachIn enemylist If f_distance(x,y,enemy.x,enemy.y)= f_objectdistance(x#,y#) Then target=enemy Next DrawLine x,y,target.x,target.y x=MouseX() y=MouseY() DrawRect x-10,y-10,20,20 End Method End Type Type t_enemy Field x# Field y# Function f_create(x#,y#) Local enemy:t_enemy=New t_enemy enemy.x=x enemy.y=y ListAddLast enemylist,enemy End Function Method m_update() DrawRect x-10,y-10,20,20 End Method End Type 'functions Function f_update() 'update objects For Local player:t_player=EachIn playerlist player.m_update() Next For Local enemy:t_enemy=EachIn enemylist enemy.m_update() Next End Function Function f_objectdistance#(x#,y#) 'find distance to nearest enemy object Local distance#=1000 For Local enemy:t_enemy=EachIn enemylist 'get shortest distance (player-enemy) If f_distance(x,y,enemy.x,enemy.y) < distance Then distance= f_distance(x,y,enemy.x,enemy.y) DrawText Int(f_distance#(x,y,enemy.x,enemy.y)),enemy.x-10,enemy.y+20 Next Return distance End Function Function f_distance#(x1#,y1#,x2#,y2#) 'distance between 2 points Local a= x1-x2 Local b= y1-y2 If a<0 a= a*-1 If b<0 b= b*-1 Return Sqr((a*a)+(b*b)) End Function |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group