Ja und zwar gewaltig:
Code: Alles auswählen
#PI2 = #PI * 2
Structure zylinder
r.l
h.l
xStep.d
angle.d
sprite.l
EndStructure
Procedure.d cutVal( val.d , min.d , max.d )
Protected d.d = max - min
While val > max.d
val - d
Wend
While val < min.d
val + d
Wend
ProcedureReturn val
EndProcedure
Procedure zylinder2DW( *zylinderPtr )
Protected *zylinder.zylinder = *zylinderPtr
ProcedureReturn *zylinder\r * 2
EndProcedure
Procedure zylinder2DH( *zylinderPtr )
Protected *zylinder.zylinder = *zylinderPtr
ProcedureReturn *zylinder\h
EndProcedure
Procedure drawZylinder( *zylinderPtr , drawingSprite , bufferSprite )
Protected *zylinder.zylinder = *zylinderPtr, toX.d = (cutVal(*zylinder\angle, 0, 90) / 90) * SpriteWidth(*zylinder\sprite), x.d = zylinder2DW(*zylinder) + toX
Protected angle.d, newX.d, a.d, aa.d, xx.d
Repeat
x - *zylinder\xStep
a + *zylinder\xStep
angle = a/zylinder2DW(*zylinder) * 180
xx = cutVal(x, 0, SpriteWidth(*zylinder\sprite) - 1)
newX = *zylinder\r + Cos(angle * #PI/180) * *zylinder\r
UseBuffer(*zylinder\sprite)
GrabSprite(bufferSprite, xx, 0, 1, SpriteHeight(*zylinder\sprite))
UseBuffer(drawingSprite)
DisplaySprite(bufferSprite, newX, 0)
Until x <= toX
UseBuffer(#PB_Default)
EndProcedure
sprite$ = OpenFileRequester("BMP Laden","","BMP File (*.bmp)|*.bmp",0)
If sprite$
InitSprite()
InitKeyboard()
OpenScreen(1280, 800, 32, "Zylinder Sprite")
LoadSprite(0, sprite$)
zylinder.zylinder
zylinder\h = SpriteHeight(0)
zylinder\r = SpriteWidth(0) / #PI2
zylinder\xStep = 0.5
zylinder\angle = 0
zylinder\sprite = 0
CreateSprite(1, zylinder2DW(@zylinder), zylinder2DH(@zylinder))
CreateSprite(2, zylinder2DW(@zylinder) + 2, zylinder2DH(@zylinder) + 2)
StartDrawing(SpriteOutput(2))
Box(0, 0, zylinder2DW(@zylinder) + 2, zylinder2DH(@zylinder) + 2, RGB(255, 0, 0))
StopDrawing()
Repeat
ExamineKeyboard()
FlipBuffers()
ClearScreen(RGB(0,0,0))
drawZylinder(@zylinder, 1, 3)
zylinder\angle + 1
DisplaySprite(2,49,49)
DisplaySprite(1,50,50)
DisplaySprite(0,400,50)
Delay(1)
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
EndIf
Das hat schon ziehmlich guten Speed...
Besten Ideen kommen erstam Schluss
Edit:
Ich hab mit dem Code jetzt schon Bilder mit 1280 * 800 gedreht.
Geht jetzt schon sehr flüssig.
Zu den Streifen... wie gesagt das ist gewollt das da schwarze Striche sind...
Sonst würde es ja keinen Perforanc-Unterschied geben...
Bei dem Code könnte man noch was ändern hab aber jetzt keine Lust mehr...
Andreas