Verfasst: 07.04.2009 18:01
Sowas in der Art?:
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitSprite3D()
; heute mal nur ein Windowed-Screen
; anstatt eines Fullscreens
OpenWindow( 0, #PB_Ignore,0, 800,600, "Animations-Demo")
OpenWindowedScreen( WindowID(0), 0,0, 800,600, 0,0,0 )
; jetzt erzeugen wir einen lustigen bunten Ball als Sprite
BallUmfang.d = 64*2*#PI ;Umfang des Balls ausrechnen
CreateSprite( 2,128,128) ; Schablone für den Ball
TransparentSpriteColor(2,0)
StartDrawing(SpriteOutput(2))
Box(0,0,128,128,RGB(255,0,255))
Circle(64,64,64,0)
StopDrawing()
CreateSprite( 3, 128, 128) ; "Textur für den Ball
TransparentSpriteColor( 3, RGB( 255, 0, 255 ) ) ; Transparenzfarbe PUR
StartDrawing( SpriteOutput(3) )
Box(0,0,128,128, #Blue) ; Hintergrund in PUR
For x = 1 To 10
Circle(Random(128),Random(128),10,#Yellow)
Next
StopDrawing()
UseBuffer(3)
DisplayTransparentSprite(2,0,0) ;Denn Ball mit der Schablone aus der Textur ausschneiden
UseBuffer(#PB_Default)
CopySprite(3,0,#PB_Sprite_Texture) ;Das ganze zu einem Sprite im Texture-Mode kopieren
TransparentSpriteColor(0,RGB(255,0,255))
FreeSprite(2) ;Hilfssprites löschen
FreeSprite(3) ; "
CreateSprite( 1, 128, 128, #PB_Sprite_Texture) ; Lichtreflexion erstellen
StartDrawing( SpriteOutput(1) )
Box(0,0,128,128, 0)
For n=0 To 31
Circle( 64-n, 64-n, 64 - 1.5*n, RGB( 7*n, 7*n, 7*n) )
Next
StopDrawing()
; jetzt machen wir'n Sprite3D draus, um den Ball rotieren zu können
CreateSprite3D( 0, 0 )
CreateSprite3D( 1, 1 )
BallX.d = -128
BallY.d = 170
BallR.d = 0
Mov.d = 1
Way.d = 0
SetFrameRate(60)
Repeat
;************************************
; Eventhandling wird fürn WindowedScreen gebraucht,
; fürn Fullscreen ist das überflüssig.
Repeat
Event = WaitWindowEvent(10)
If Event = #PB_Event_CloseWindow
EXIT = 1
EndIf
Until Event = #Null
;************************************
ClearScreen( $200810 ) ; Screen löschen
; Farbe ist RGB( 16, 8, 32 ) als HEX geschrieben
Mov*1.01 ; Bewegunggeschwindigkeit potenzieren
BallX + Mov ; Waagrechte Bewegung hinzufügen
BallY = BallX*3/4 ; Senkrechte Position im Verhältnis zur Waagrechte Position setzen
Way = Sqr(Pow(Mov,2)+Pow(Mov*3/4,2)) ; Tatsächlich zurückgelegte Strecke in Pixeln
BallR = (BallR + (Way/BallUmfang*360)) ; DrehungsWinkel im Verhältnis zur BallBewegung und Umfang dazurechnen
If BallR > 360 ; ist der Winkel über 360°
BallR-360 ; wieder auf 0 setzen...
EndIf
If BallX > 900 ; rechts unten verschwunden?
BallX = -128 ; links oben hinsetzen
Mov = 1
EndIf
;********
Start3D()
RotateSprite3D( 0, BallR, 0 ) ; aktuelle Rotation
Sprite3DBlendingMode(5,6) ; auf normalen Blendingmode stellen
DisplaySprite3D( 0, BallX, BallY ) ; Ball anzeigen
Sprite3DBlendingMode(5,4) ; Auf Mischmodus stellen
DisplaySprite3D( 1, BallX, BallY ) ; Lichtreflexion drüberlegen
Stop3D()
;********
FlipBuffers( #PB_Screen_SmartSynchronization )
Until EXIT