Unstimmigkeiten (Bug?) in RotateSprite3D()
Verfasst: 23.11.2004 10:30
Folgendes kleines Beispiel:
Nach dem Starten ist erst einmal alles ok. Oben links wird das Original-2D-Sprite gezeigt und unten zwei 3D-Sprites. Drückt man nun die Leertaste, so sollte eigentlich nicht passieren: Das erste 3DSprite dürfte sich überhaupt nicht verändern, dass zweite müsste um Null Grad gedreht werden und auch unverändert zu sehen sein. Pustekuchen! Beide Sprites scheinen sich um etwas mehr als 90 Grad zu drehen (beide!!) und auch nach dem loslassen der Leertaste bleiben sie so und gehen nicht in den 'Normalzustand' zurück!!! 
RotateSprite3D wird mit dem Parameter '0' verwendet, der laut Handbuch das Sprite zurücksetzen müsste: 0: Alle Dimensionen werden auf ihre Original-Werte zurückgesetzt (damit werden alle vorherigen "Zoom" oder "Rotate" Operationen rückgängig gemacht). Dies ist sehr nützlich, wenn mehrere Sprites zur gleichen Zeit aus einem #Sprite3D generiert werden. Dadurch kann jedes Sprite korrekt, mit seinem eigenen Winkel, angezeigt werden.
... ich wundere mich, dass das bisher nicht aufgefallen ist.
Code: Alles auswählen
InitSprite()
InitSprite3D()
InitKeyboard()
OpenScreen(640,480,16,"3D")
CreateSprite(0,128,128,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
DrawingMode(0)
Box(000,000,128,128,$00AA00)
DrawingMode(4)
Box(000,000,128,128,$0000FF) ; Aussenrand
Box(001,001,063,063,$FF0000) ; linke obere Ecke blau
Box(064,001,063,063,$0000FF)
Box(001,064,063,063,$0000FF)
Box(064,064,063,063,$0000FF)
StopDrawing()
CreateSprite3D(0,0)
Repeat
ExamineKeyboard()
ClearScreen(0,0,0)
DisplaySprite(0,10,10)
Start3D()
DisplaySprite3D(0,010,200,255)
If KeyboardPushed(#PB_Key_Space): RotateSprite3D(0,0,0): EndIf
DisplaySprite3D(0,200,200,255)
Stop3D()
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor($FF,$FF,$FF)
Locate(140,10):DrawText("Originalbild")
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)RotateSprite3D wird mit dem Parameter '0' verwendet, der laut Handbuch das Sprite zurücksetzen müsste: 0: Alle Dimensionen werden auf ihre Original-Werte zurückgesetzt (damit werden alle vorherigen "Zoom" oder "Rotate" Operationen rückgängig gemacht). Dies ist sehr nützlich, wenn mehrere Sprites zur gleichen Zeit aus einem #Sprite3D generiert werden. Dadurch kann jedes Sprite korrekt, mit seinem eigenen Winkel, angezeigt werden.
... ich wundere mich, dass das bisher nicht aufgefallen ist.