cncrete Geschrieben 12. Januar 2019 Melden Share Geschrieben 12. Januar 2019 Hallöchen, Ich bin ein Anfänger und mache mein erstes Pong spiel. Nun wollte ich das bei jeder Kollision die Geschwindigkeit des Balles vergrössert wird. Also habe ich den float speed = speed +0.1 gesetzt. Da kam die Fehlermeldung. Float kann nicht explizit in double umgewandelt werden. Als ich dann den float in einen double umgewandelt habe gab es immer noch probleme(und auch im restlichen code). Dann habe ich einfach geschrieben speed = speed +(1/10) Und es funktionierte. Kann mir das bitte einer erklären. Ich versteh es einfach nicht, es ist doch das gleiche??? Schonmal danke für alle Antworten Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. Januar 2019 Melden Share Geschrieben 13. Januar 2019 float und double sind ähnliche Typen. Beides sind Gleitkommazahlen. float allerdings wird im Speicher mit 32 bits dargestellt, double hat - wer hätt's gedacht - 64 bits. Damit sind sowohl größere, als auch genauere kleine Zahlen darstellbar. Braucht man aber für Spiele in der Regel nicht. Wenn man eine Kommazahl aufschreibt, muss diese ja einem dieser beiden Typen entsprechen. Mal davon abgesehen, dass er noch mehr geben kann. Und für C# ist eben definiert, dass ein Kommazahl-Literal ein double ist und kein float. Um ein Literal zu schreiben, das stattdessen ein float ist, musst du am Ende ein f anfügen: speed = speed + 0.1f; // bzw speed += 0.1f; Dein anderer Versuch funktioniert übrigens nicht - er kompiliert zwar, aber 1/10 = 0. Wenn du ein Zahlliteral schreibst, das kein Komma hat, dann handelt es sich um ein int, also eine Ganzzahl. Und eine int-Division ergibt immer wiederum ein int. Sollte die Division eigentlich ein Ergebnis mit Nachkommastellen haben (also 0.1), werden diese abgeschnitten (also 0), was einem Abrunden entspricht. Du rechnest also immer 0 obendrauf, was den Compiler nicht stört, aber dir nichts bringt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
cncrete Geschrieben 13. Januar 2019 Autor Melden Share Geschrieben 13. Januar 2019 Danke, also fehlte mir letztendlich nur das f👍 Ich hab das beim erstellen der variable gehabt aber nicht beim addieren.😵 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.