![]() |
Gleitkommadivision durch Null
ich habe bislang meine Bilddateien ganz gerne als Icon geladen, wollte jetzt aber mal mit Transparenz arbeiten. Dazu verwende ich eine bitmap. Zur animation eines Schußes, verwende ich ein case ereignis und lasse die phasen durchlaufen:
[DELPHI]1: begin Image7.Picture.Bitmap.LoadFromFile(path+'gun2.bmp' ); Phase:=2; end; 2:begin Image7.Picture.Bitmap.LoadFromFile(path+'gun1.bmp' ); Phase:=1;[DELPHI] Path ist ein String und wird beim fromcreate intialisiert //Path:=ExtractFilePath(ParamStr(0)) Jetzt bekomme ich aber die Fehlermeldung, es gäbe eine Gleitkommadivision. Weiß jemand hier Rat? |
AW: Gleitkommadivision durch Null
Kann nicht in dem gezeigten Code liegen. Was ist ein "case Ereignis"? Tipp: Das Bild immer wieder neu von der Festplatte zu laden ist herzzerreißend ineffizient. Lade dir die beiden Bilder zu Programmstart in 2 Bitmaps, und weise diese dann dem Image jeweils zu.
|
AW: Gleitkommadivision durch Null
Liste der Anhänge anzeigen (Anzahl: 1)
Woran liegt es dann?
Kann es an der Bitmap liegen? Weil path ist schon korrekt und die loadfromfile aussage doch auch? danke für den tipp mit dem laden am programmstart. Vielleicht ist auch die Bilddatei mal ganz interessant, ich hänge sie einfach mal an, falls es daran liegt.(Delphipraxis wird das Format automatisch in eine jpg ändern) p.s: ![]() |
AW: Gleitkommadivision durch Null
An dem Bitmap liegt es bestimmt nicht.
Hast Du mal einen Haltepunkt gesetzt und den Quelltext schrittweise durchlaufen? |
AW: Gleitkommadivision durch Null
Zitat:
Zitat:
Hier war es recht eindeutig, aber da du auch in deinem Geschwindigkeits-Thread gehäuft Begriffe im falschen Zusammenhang benutzt hast, vermute ich, dass du noch in der frühen Lernphase bist. Das ist ja auch keine Schande, im Gegenteil. Sich präzise auszudrücken ist in der Informatik (und auch Mathematik) allerdings verflucht wichtig, weswegen es sich lohnen dürfte hier auch ein wenig Energie hineinzustecken. Selbsbewusst mit Fachwörten an den falschen Stellen um sich zu werfen ist in jedem Falle eine schlechte Idee: Die, die es auch nicht besser wissen werden verwirrt, und die "Cracks" denken sich wohlmöglich "argh, Wichtigtuer mit 0 Plan". Daher: Nimm dir lieber etwas mehr Zeit deine Anliegen mit mehr Worten zu beschreiben, die du dafür aber gesichert definiert hast. Anders als an vielen anderen Stellen "im Netz" hören hier die wenigsten nach 5 Zeilen auf zu lesen :dp: |
AW: Gleitkommadivision durch Null
@DelphiUser1
Delphi-Quellcode:
Geh mit dem Cursor in diese Zeile und drücke F5. Du setzt damit einen Haltemunkt. Noch mal drücken un der ist wieder weg.
1: begin
... Starte das Programm normal (meinetwegen mit F9) Kommt die Fehlermeldung bevor das Programm den Haltepunkt erreicht, liegt der Fehler wo anders. Wenn nicht, bleibt das Programm an der Stelle stehen. Jetzt kannst du mit F7 eine einzelne Zeile ausführen (bzw. Anweisung) Jetzt so lange drücken bis die Zeile mit dem Fehler kommt. |
AW: Gleitkommadivision durch Null
Zitat:
|
AW: Gleitkommadivision durch Null
Das war schon beabsichtigt. F7 geht eine einzelne Anweisung durch (steht auch da), F8 geht eine Routine durch. Und wenn der Fehler in einer Funktion ist, dann kriegt er bei F8 die Meldung vom Aufruf und ist auch nicht schlauer.
|
AW: Gleitkommadivision durch Null
Ja, aber lass ihn mal durch Image7.Picture.Bitmap.LoadFromFile(path+'gun2.bmp' ) mit F7 durchsteppen ... Am Ende landet er in irgendwelchen VCL-Units und weiß garnicht mehr weiter. :mrgreen:
|
AW: Gleitkommadivision durch Null
Zitat:
Solange er nicht im CPU-Fenster landet, geht das alles noch. Hat doch keiner behauptet Debugging wäre ein Kindergeburtstag. Gruß K-H |
AW: Gleitkommadivision durch Null
Zitat:
Und alle glücklichen Besitzer einer Starter/Explorer/Personal/Standard haben dieses Problem sowieso nicht. |
AW: Gleitkommadivision durch Null
Okay also ich habe jetzt mal die Bilder als Bitmap laden lassen und es kann nur an dem Ladeprozess liegen, der Fehler wird im Debugging hier ganz klar an dieser Stelle angezeigt.
Delphi-Quellcode:
Mir ist aber immer noch nicht klar, worin der Fehler liegt..
path:=ExtractFilePath(ParamStr(0));
PFeuer:=TPistol.Create(self); PNormal:=TPistol.Create(self); PFeuer.Picture.Bitmap.LoadFromFile(path+'gun1.bmp'); |
AW: Gleitkommadivision durch Null
Setze mal einen Haltepunkt in der ersten Zeile.
Dann mit F7 weiter. Wenn Du F7 in der LoadFromFile-Zeile durchführst kommt der Fehler? Kann/Sollte eigentlich nicht sein! Welches Delphi hast Du? Hast Du ein anderes Bild versucht? Wie sieht die Fehlermeldung genau aus - Screenshot? |
AW: Gleitkommadivision durch Null
Zitat:
Delphi-Quellcode:
gibt es noch nicht, dass wird (intern von TPicture wenn benötigt) beim Laden des Bildes erzeugt.
PFeuer.Picture.Bitmap
Ändern auf
Delphi-Quellcode:
(Hoffentlich hast du Picture in der Klasse TPistol auch erzeugt)
PFeuer.Picture.LoadFromFile(path+'gun1.bmp');
|
AW: Gleitkommadivision durch Null
Da würde ich aber eher EAccessViolation statt EDivByZero erwarten, oder? Allerdings wurde die genaue Fehlermeldung sowie die verursachende Zeile noch nicht genannt (oder ich habe es überlesen).
|
AW: Gleitkommadivision durch Null
@stahli: Haltepunkt setzten bringt mich nicht sonderlich weiter, der fehler ist immer der Selbe. Ich benutze die Delphi 7 Testversion..
@DeddyH: Nein es ist EDivByZero und die Zeile ist oben angegeben, das Ganze findet im FormCreate statt @Sir Rufo: Das hat leider genau den selben Effekt :? |
AW: Gleitkommadivision durch Null
Was ist denn TPistol? Bei dem bisschen gezeigten Code ist das das reinste Rätselraten hier, wie soll man da helfen?
|
AW: Gleitkommadivision durch Null
TPistol ist natürlich TImage. Als TPicture habe ich es auch schon probiert, aber das problem muss wohl wo anders liegen, denn ohne TPistol gab es ja genau den selben Fehler
|
AW: Gleitkommadivision durch Null
Ohne Code kann man nicht helfen, sry.
|
AW: Gleitkommadivision durch Null
Pack Dein Projekt mal in eine Zip und hänge es hier an...
|
AW: Gleitkommadivision durch Null
|
AW: Gleitkommadivision durch Null
Hast du es schonmal mit (in Unit1)
Delphi-Quellcode:
probiert?
procedure TForm1.FormCreate(Sender: TObject);
begin path := ExtractFilePath( ParamStr( 0 ) ); PFeuer := TPistol.Create( Self ); // neu PNormal := TPistol.Create( Self ); // neu PFeuer.Picture.LoadFromFile( path + 'gun1.bmp' ); // Änderung PNormal.Picture.LoadFromFile( path + 'gun2.bmp' ); // Änderung Image7.Picture.Bitmap.PixelFormat := pf24Bit; Start:=50; Phase:=1; a := 0; Punkte:=0; randomize; doublebuffered := true; end; |
AW: Gleitkommadivision durch Null
ja habe ich. dann bekomme ich eine Zugriffsverletzung
|
AW: Gleitkommadivision durch Null
Jetzt häng mal noch deinen kompletten Monitor hier an.
|
AW: Gleitkommadivision durch Null
War das Ironie oder ist die Zugriffsverletzung auf dem Monitor gemeint?
|
AW: Gleitkommadivision durch Null
Sorry, ich meinte einen kompletten Screenshot (oder auch mehrere).
So könnten wir mal sehen, wo der Debuger steh, welche Fehlernachricht etc. |
AW: Gleitkommadivision durch Null
Liste der Anhänge anzeigen (Anzahl: 2)
okay alles klar, dann habe ich mal zwei Screenshots angehängt.
|
AW: Gleitkommadivision durch Null
Könntest du den noch etwas kleiner machen? Man kann ja fast etwas erkennen :mrgreen:
|
AW: Gleitkommadivision durch Null
Mach das Bitmap zwischen Picture und LoadFromFile weg!
|
AW: Gleitkommadivision durch Null
Lange Rede, kurzer Sinn, ich kann mich auch täuschen, aber du erzeugst aus TImage Komponente deine eigene TPistol Komponente, die du später als PFeuer und PNormal deklarierst (1) aber nicht zu Laufzeit einbindest. Aber das war es schon mit der Höflichkeit, da du davon ausgehst, dass die beiden Komponenten schwuppdiwupp auf dem Formular landen. Tun sie aber nicht. Man kann Komponenten zur Laufzeit einbinden, dann aber richtig. Solltest du das irgendwo in deinem Code (bei Göttern, wie blickst du da durch) es getan haben, dann ignoriere es.
Es kann der Fehler sein, muß aber nicht. ------------- 1) das P ist etwas unglücklich gewählt, da es in der Regel für Pointer steht, ist aber kein Fehler, könnte aber missverstanden werden |
AW: Gleitkommadivision durch Null
@mkinzler: Tut mir leid, das liegt nicht an mir
@Sir Rufo: Wie gesagt, dann bekomme ich eine Zugriffsverletzung @Popov: Nicht ganz. Die Bilder werden später Image7 zugeordnet und dort sind sie dann sichtbar, aber das ist ja im Grunde auch nicht das Problem, sondern die Gleitkommadivision beim Laden der Bilder :? |
AW: Gleitkommadivision durch Null
Nicht ganz:
a := 1; b := a; das klappt. Hier wird der Wert von a an b übergeben. bei TImage1 := TImage2 wird nur die Adresse übergeben, nicht der Inhalt. Ein Tipp, schon mal was von TBitmap gehört? Du missbrauchst eine Image als Speicherplatz für eine Bitmap? |
AW: Gleitkommadivision durch Null
Ok, die Lösung
:bouncing4: :bouncing4: :bounce1: :bounce1: :bounce2: :bounce2: Die beiden Bitmaps sind korrupt (irgendwie, keine Ahnung was). Andere Programme können sie lesen und fangen den Fehler ab, TBitmap anscheinend nicht. Kann auch sein, dass sie nicht korrupt sind, nur TBitmap kommt damit nicht klar. Keine Ahnung was es ist, aber es ist es. Konvertiere es z. B. mit IrfanViewer. |
AW: Gleitkommadivision durch Null
Liste der Anhänge anzeigen (Anzahl: 1)
Übriges, kann es sein, dass du sowas in der Art programmierst?
siehe Anhang |
AW: Gleitkommadivision durch Null
Nicht ganz.
es werden Kreise erzeugt und die muss man zerstören. Ich nutze dafür gerade eine Pistole. Wäre es möglich, das ich mir den Sourcecode zu deinem Programm mal anschauen kann, das Zerstören der Kreise könnte ich eventuell gut für mein Programm benutzen :-D Ich habe nun einen anderen (sogar besseren) Weg gefunden, die Schüsse zu animieren. Trotzdem danke an alle, die mitgeholfen haben und sich die Mühe gemacht haben. P.s: Soll ich die Exe der Beta-Version des Spiels mal hier posten? |
AW: Gleitkommadivision durch Null
Auch wenn das Spiel kein Knaller ist und ich nichts dagegen habe den Code zu veröffentlichen, das Spiel ist noch nicht fertig. Wenn es fertigt ist, eventuell, aber nicht vorher.
Wenn du aber spezielle Fragen hast, dann frag. |
AW: Gleitkommadivision durch Null
ja, mich würde interessieren, wie die Blockzerstörung funktioniert?
|
AW: Gleitkommadivision durch Null
Du könntest ja mal die Bilder hochaladen. :roll:
Bitmap ist ein sehr einfaches Format und solange die paar wenigen Kontrolldaten korrekt sind, erzeugen Fehler in den Bildinhalten keinerlei Probleme (außer daß die Farben der betreffenden Pixel nicht stimmen. Fazit: Wenn TBitmap das Bitmap nicht lesen kann, dann ist das Bild zu 99,99995 % defekt. |
AW: Gleitkommadivision durch Null
Zitat:
|
AW: Gleitkommadivision durch Null
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 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