 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 01.06.2003, 16:25 Titel: |
|
|
Sry für den dreifachpost
Hi,
Ich hab jetzt einen Fehler - wenn auch einen unerklärlichen – in der Künstlichen Intelligenz gefunden
Code: | //Variablen: ist der Gegner genau auf dem Feld?
BOOL GenauAufX=FALSE;
BOOL GenauAufY=FALSE;
float XPos=(float)Enemy[Gegner].GetX();
float YPos=(float)Enemy[Gegner].GetY();
//Test: ist Gegner genau auf dem Feld?
if((XPos/50.0f)==((int)XPos/50))
{
GenauAufX=TRUE;
}
if((YPos/50.0f)==((int)YPos/50))
{
GenauAufY=TRUE;
} |
Dieses Codestück berechnet, ob der Gegner sich genau auf dem „50*50-Raster“ befindet. Komischerweise funktioniert der Code nicht in der Releaseversion, aber ohne Veränderung in der Debugversion.
Dieses Problem hab ich jetzt mit % umgangen:
Code: | if(XPos%50==0)
{
GenauAufX=TRUE;
}
if(YPos%50==0)
{
GenauAufY=TRUE;
} |
Dieses eine Problem wäre gelöst. Allerdings spinnt jetzt die KI – wie immer nur in der Releaseversion. Also, entweder muss ich die Version mit besoffenen Gegnern rausgeben, oder ihr müsst noch ein paar Tage(vielleicht mehr, vielleicht weniger) warten. Was haltet ihr davon? Haltet ihrs noch ein paar Tage aus? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 01.06.2003, 17:37 Titel: |
|
|
Der Code überprüft ja ob wie du schon gesagt, sich das "Ding" auf 50/50 befindet.
Aber laut diesem Code bleibt das ja immer so, auch wenn er wieder nicht auf 50/50 ist - vielleicht wird das im Debug-Modus automatisch wieder zurückgesetzt?
Daher ein else dass den Wert wieder auf FALSE setzt? Dass wäre eine logische Antwort auf besoffene Gegner
Oder wird das schon irgendwo irgendwie anderst in einem andern Code gemacht - was ich eigentlich schon vermute, da ich kaum glaube, dass dir so was passiert
Warten kann ich noch, aber ob ich es überleben werde?  |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 01.06.2003, 20:40 Titel: |
|
|
Wenn du floats benutzt kannst du == vergessen. Du musst eine Epsilonumgebung um den Punkt legen. Hier mal ein Beispiel:
Code: |
const float EPSILON = 0.001;
if(fabs(irgendein_abstand_zwischen_zwei_punkten) < EPSILON)
// Ja, die Punkte liegen aufeinander
|
_________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
The Lord of Programming Living Legend

Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 01.06.2003, 21:05 Titel: |
|
|
nepomuk hat Folgendes geschrieben: | Aber laut diesem Code bleibt das ja immer so, auch wenn er wieder nicht auf 50/50 ist |
Die beiden boolesischen Variablen werden ja am Anfang mit FALSE initialisiert.
Aber das Prob mit den besoffenen Gegnern liegt irgendwo in der KI. Ich muss sie zumindest ein wenig nüchterner machen. Wenn die Alpha dann drausen is, muss ich sie sowieso noch mal überarbeiten  _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|