![]() |
[Andorra 2D] unbekanntes Problemchen ;)
Einen schönen guten Morgen,
ich habe ein Problem mit Andorra 2D. Es passt perfekt zu meinen Vorhaben und ich hatte bis jetzt auch noch keine Probleme. Nun versuche ich Andorra in mein bereits bestehendes Programm einzubinden und dann ist dann leider auch schon ende... Bei meinem Spiel handelt es sich um ein Echtzeit-Strategiespiel, welches auf Sql aufbaut. Was ich mit Andorra anfangen möchte lassen wir einfach mal in den Raum gestellt ;) - Ist auch alles nicht so wichtig... Nun zu meinem Problem: Wenn ich eine neue Anwendung erstelle und diese laufen lasse, funktioniert dies Problemlos. Wenn ich jetzt allerdings eine neue Form in meiner bestehenden Anwendung erzeuge treten Problme an den seltsamsten Stellen auf.... Also habe ich versucht des Wurzels Übel zu finden und erst einmal alles weggelassen und nach und nach wieder aufgebaut, bis zu folgender Stelle
Delphi-Quellcode:
funktioniert es ohne Fehler, doch sobald
AdDraw := TAdDraw.Create(self);
AdDraw.DllName := 'AndorraDX93D.dll';
Delphi-Quellcode:
aufgerufen wird, gibt es lauter Fehlermeldungen sobald ich im Ursprünglichen Programm etwas verändere. Das Initialisieren selbst macht keine Probleme.
if AdDraw.Initialize then
Das Problem selbst ist das seltsamste... Es werden lauter Zahlen erzeugt, die keinen Sinn ergeben... Folgendes lässt vielelicht klar werden was passiert: Zitat:
Vielen Dank schon einmal... incubus_v |
Re: [Andorra 2D] unbekanntes Problemchen ;)
Hallo,
Welche Delphiversion hast du? Welche Version von Andorra verwendest du (CVS oder die Downloadversion)? Hast du die DLL nochmal selbst kompiliert? Wenn du die CVS version verwendest musst du auf jeden fall die DLL neu kompilieren. Das gleiche gilt wenn du eine Delphiversion kleiner als BDS2005 nimmst. Wenn das nicht hilft, dann setzte mal einen Haltepunkt auf die "initialize" Zeile und steppe das Ganze mal durch und sag mir, wo genau der Fehler kommt. Igel457 |
Re: [Andorra 2D] unbekanntes Problemchen ;)
Guten Abend,
danke für die schnelle Hilfe, benutze BDS 2005 PE und die Andorra Version 2.0a. Leider habe ich aber heute Abend keine Zeit um weiter zu probieren, melde mich dann noch einmal. |
Re: [Andorra 2D] unbekanntes Problemchen ;)
Also,
dll kompilieren wollt ich versuchen, allerdings wird alles möglcihe rot unterstrichen zB fehlt eine dcu (d3dx9, Direct3D9). Nun, ohne das initialisieren von Andorra sind alle Werte richtig, doch sobald es initialisiert wird, spielen alle Werte verrückt... Als Beispiel nehm ich einmal folgende Stelle:
Delphi-Quellcode:
Der Fehler scheint jedoch einen tieferen Grund zu haben, denn es passiert anscheind bei allen möglichen integer werten...IF id <> 0 THEN BEGIN p := floattostr(id); where := 'id'; END ELSE BEGIN p := koord; where := 'koord'; END; Wenn ich mir mittels Debugger die Werte des Beispiels angucke ist das etwas, wie soll ich sagen, seltsam. "id" hat jederzeit den richtigen Wert zB "11", doch p bekommt den Wert "11,000000514569"... Ich versteh einfach nicht was das soll. p ist lokal deklariert, die procedur selbst ist public und die form, welche andorra benutzt, steht noch nicht direkt mit dem hauptprogramm in verbindung... selbst wenn ich der variable einen namen gebe, mit der sich bestimmt nichts überschneidet, tritt der gleiche fehler auf. jedoch nur wenn AdDraw.Initialize aufgerufen wird ;) Irgendwie werd ich nicht schlau daraus. |
Re: [Andorra 2D] unbekanntes Problemchen ;)
*Hokuspokuskristallkugelfidibus*
koord ist eine Reelle Zahl? Die haben immer gewisse Ungenauigkeiten. Ich denke 11,000000514569 its genau genug ;) Sonst nimm, wenn du keine nachkommastellen braucht, Integer. |
Re: [Andorra 2D] unbekanntes Problemchen ;)
nun, koord erfüllt noch keinen zweck :D wird erst später benötigt... außerdem tritt es bei allen möglcihen integer werten an jeder stelle des programms auf. koord wäre in diesen fall auch ein string, id ist jedoch nur integer und dort ist auch der fehler!
|
Re: [Andorra 2D] unbekanntes Problemchen ;)
Ich kann mir nicht vorstellen, das Integerwerte plötzlich Nachkommastellen bekommen. Bei Singles und Doubles ist es mit aber durchaus aufgefallen, das mit dem DirectX Plugin die genauigkeit abnimmt. Versuche einfach mal die Werte mit "round" zu runden.
|
Re: [Andorra 2D] unbekanntes Problemchen ;)
Wenn id eh ein Integer ist, solltest du IntToStr nehmen und nicht FloatToStr.
|
Re: [Andorra 2D] unbekanntes Problemchen ;)
tja, aber es treten nachkommastellen auf... und diese anscheind komplett zufällig, jedoch auch immer die gleichen.
und ob ich jetzt inttostr oder floattostr nehme bzw round benutze, es liefert doch letztlich keine erklärung für das problem. ich meine gut ist es bestimmt nicht, wenn ich es so unterdrücke... ich werd einfach weiter probiern vielleicht find ich ja noch etwas |
Re: [Andorra 2D] unbekanntes Problemchen ;)
Wenn id Float, Real oder eine sonstiger Typ von Zahl ist, der Nachkommastellen kann, gibt es, wie gesagt, immer eine gewisse ungenauigkeit. Was ist denn id für ein Typ?
|
Re: [Andorra 2D] unbekanntes Problemchen ;)
nun id wird aus der sql datenbank ausgelesen und ist ein reiner integerwert. wie ich im ersten post schon geschrieben hab, hat dieser zB den wert 11, wird auch so aus der datenbak ausgelesen und an die an die procedur, aus der der ausschnitt stammt übergeben. id selbst ist auch 11 nur, nachdem floattostr diesen an p übergibt, ist dieser dann plötzlich 11,000000514569... wenn ich an der besagten stelle strtoint verwende, bekomm ich keine fehlermeldung. doch wenn ich so vorgehe, kann ich mir nicht sicher sein, das alles korrekt ist und das ist bei einem strategiespiel extrem wichtig....
so wie es aussieht, muss ich wohl oder übel zwei getrennte programme schreiben oder einfach versuchen alles was ich benötige mit der delphi canvas zu zeichnen... |
Re: [Andorra 2D] unbekanntes Problemchen ;)
Hallo.
Incubus, diese Ungenauigkeit bekommst du einfach nicht weg. Glaub's uns doch endlich. Das hängt damit zusammen, dass der Computer die Zahlen intern imho als a*2^b speichert. Vereinfachtes Beispiel 2^(ln(11)/ln(2)) ist 11 (ln = natürlicher Logarithmus) ln(11)/ln(2) ist etwa 3,459431618 (auf 9 Nachkommastellen gerundet) Wenn wir jetzt zum Beispiel nur 3,459432 nehmen (also auf 6 Nachkommastellen gerundet) kommt aber (2^3,45) etwa 11,00000290 heraus und das ist nicht 11. Ähnlich entsteht auch der Fehler bei dir. Aber nur, wenn du nicht mit Ganzzahlen (integer), sondern mit Kommazahlen arbeitest. Daher: Kommazahlen nur verwenden, wenn es unbedingt sein muss. Also nimm IntToStr, wenn es doch sowieso schon eine Zahl ohne Nachkommastellen ist. FloatToStr wandelt nämlich erst in eine Kommazahl um und dabei entstehen dann Ungenauigkeiten. Gruß, Waldteufel PS: Im Übrigen wird diese Ungenauigkeit nie dafür sorgen, dass aus 11 mal 10 oder 12 wird. So genau sind Computer dann doch schon... ;-) |
Re: [Andorra 2D] unbekanntes Problemchen ;)
Zitat:
FloatToStr ist für Fließkommazahlen da, IntToStr für Integer. Wenn du also einen Integer hast, dann nimm gefälligst auch IntToStr |
Re: [Andorra 2D] unbekanntes Problemchen ;)
@Waldteufel
Danke, so versteh ich das wenigstens ;) Hab mir Delphi komplett selbst beigebracht und sowas wie plötliche nachkommastellen soll man dann erst einmal verstehen... @inherited Sry, meinte natürlich IntToStr ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz