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 drawZylinderOnSprite( *zylinderPtr , drawingSprite )
Protected *zylinder.zylinder = *zylinderPtr, rotatingAngle = *zylinder\angle, toX.d = Sin(rotatingAngle * #PI/180) * SpriteWidth(*zylinder\sprite), x.d = zylinder2DW(*zylinder) + toX, a.d, angle.d, newX.d
Protected 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
Debug a
For y = 0 To SpriteHeight(*zylinder\sprite)
StartDrawing(SpriteOutput(*zylinder\sprite))
rgb = Point(xx, y)
StopDrawing()
StartDrawing(SpriteOutput(drawingSprite))
Line(newX, y, 1, 1, rgb)
StopDrawing()
Next
Until x <= toX
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))
drawZylinderOnSprite(@zylinder, 1)
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))
drawZylinderOnSprite(@zylinder, 1)
zylinder\angle + 1
DisplaySprite(2,49,49)
DisplaySprite(1,50,50)
DisplaySprite(0,400,50)
Delay(1)
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
EndIf
Ich muss mir eingestehn ich weis nicht wiso sich die Rotation kehrt...
Aber sonst gehts jetzt!
Man kann auch die "genauigkeit" ändern: >>zylinder\xStep = ...
Auf keinen Fall zu große Bilder mit dieser Genauigkeit verwenden!!!
Vil kann mir jemand helfen...
Andreas