
Ich habe folgenden Vergleich:
Code: Alles auswählen
If distance < (#TILE_HEIGHT * 0.5)
1) #TILE_HEIGHT wird mit 0.5 zur Compile-Zeit (!) multipliziert
2) der Vergleich heißt nun (da #TILE_HEIGHT bei mir 64 ist): If distance < 32
3) wenn distance kleiner als 32 ist, muß der Vergleich "true" zurückgeben.
Leider passiert das so nicht. In der Tat passiert scheinbar folgendes:
1) distance ist ein Long
2) alles, was auf der rechten Seite steht, wird daher als Long gecastet
3) die Multiplikation auf der rechten Seite ergibt folglich 0
4) wenn distance kleiner als 32 ist, heißt das noch lange nicht, daß der Vergleich "true" zurückgibt.
Das ist doch echt kaum zu fassen. Daß von rechts nach links gecastet wird, war mir klar, aber erstens wird sowas doch normalerweise für jede Seite separat gemacht und nicht für den gesamten Vergleich, und zweitens muß doch die rechte Seite zur Laufzeit bereits den konstanten Wert 32 beinhalten.
Ach ja - wenn ich distance vorher als Float deklariere, läuft es!!

Ich versteh das einfach nicht... was ist da los? Hab ich irgendwas übersehen? Oder ist das ein Bug in PB (der mir vorher noch nie untergekommen ist)?