Aktuelle Zeit: 19.11.2019 08:01

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: [Mini-Tut] Animation per Sprite3D: rollender Ball
BeitragVerfasst: 06.04.2009 16:23 
Offline

Registriert: 10.11.2004 03:22
nur mal ein winziges Beispielchen für Neueinsteiger.

Code:
InitSprite()
InitKeyboard()
InitSprite3D()

; heute mal nur ein Windowed-Screen
; anstatt eines Fullscreens
OpenWindow( 0, #PB_Ignore,0, 400,300, "Animations-Demo")
  OpenWindowedScreen( WindowID(0), 0,0, 400,300, 0,0,0 )

; jetzt erzeugen wir einen lustigen bunten Ball als Sprite

CreateSprite( 0, 128, 128, #PB_Sprite_Texture )
  TransparentSpriteColor( 0, RGB( 255, 0, 255 ) ) ; Transparenzfarbe PUR
  StartDrawing( SpriteOutput(0) )
    Box(0,0,128,128, RGB( 255, 0, 255 ) ) ; Hintergrund in PUR
    For n=0 To 31
      Circle( 64+n, 64+n, 64 - 2*n, RGB( 0, 8*n, 248) )
    Next
  StopDrawing()

; nur mal vorzeigen, wie der Ball aussieht
DisplayTransparentSprite( 0, 136, 86 )
; für 1.5 sec
FlipBuffers()
Delay( 1500 )

; jetzt machen wir'n Sprite3D draus, um den Ball rotieren zu können
CreateSprite3D( 0, 0 )

BallX.l = -128
BallY.l = 170
BallR.l = 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
 
  BallR = (BallR + 1) % 360  ; Ball Rotation um #PI erhöhen und auf 360° beschränken
  BallX +1                        ; BallX um 1 erhöhen
  If BallX > 400                  ; rechts verschwunden?
    BallX = -128                  ; links außen hinsetzen
  EndIf
;********
  Start3D()
    RotateSprite3D( 0, BallR, 0 )       ; aktuelle Rotation
    DisplaySprite3D( 0, BallX, BallY )  ; anzeigen
  Stop3D()
;********
  FlipBuffers( #PB_Screen_SmartSynchronization )
Until EXIT

[edit] Drehungsschritte auf 3° geändert.

[edit2] Drehungsschritte auf 1° geändert.

_________________
... machts gut und danke für den fisch ...


Zuletzt geändert von Kaeru Gaman am 07.04.2009 00:26, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 06.04.2009 16:47 
Offline
Benutzeravatar

Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte
Neiß. :D

_________________
Windows 10 Pro, 64-Bit / Outtakes | Derek


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 06.04.2009 16:48 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Deutschland::Berlin()
@KG
Bild

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 06.04.2009 17:50 
Offline
Benutzeravatar

Registriert: 10.09.2004 20:51
Wohnort: Ansbach
Damit das ganze bei allen Roll-Geschwindigkeiten gut aussieht sollte man die Rotation vom Radius und der Bewegung abhängig machen, so kann man zum Beispiel schön Beschleunigungen simulieren, zum Beispiel wie auf einer schiefen Ebene:


Code:
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( 0, 128, 128, #PB_Sprite_Texture )
  TransparentSpriteColor( 0, RGB( 255, 0, 255 ) ) ; Transparenzfarbe PUR
  StartDrawing( SpriteOutput(0) )
    Box(0,0,128,128, RGB( 255, 0, 255 ) ) ; Hintergrund in PUR
    For n=0 To 31
      Circle( 64+n, 64+n, 64 - 2*n, RGB( 0, 8*n, 248) )
    Next
  StopDrawing()


; jetzt machen wir'n Sprite3D draus, um den Ball rotieren zu können
CreateSprite3D( 0, 0 )

BallX.d = -128
BallY.d = 170
BallR.d = 0
Mov.d = 1
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.02                        ; Bewegunggeschwindigkeit potenzieren
  BallX + Mov                     ; Waagrechte Bewegung hinzufügen
  BallY = BallX*3/4               ; Senkrechte Position im Verhältnis zur Waagrechte Position setzen
  BallR = (BallR + (Mov*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
    DisplaySprite3D( 0, BallX, BallY )  ; anzeigen
  Stop3D()
;********
  FlipBuffers( #PB_Screen_SmartSynchronization )
Until EXIT

_________________
(\/) (°,,,°) (\/)


Zuletzt geändert von KeyKon am 07.04.2009 16:07, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2009 15:08 
Offline

Registriert: 10.11.2004 03:22
nette idee.

... ich habe den eindruck, dass die bewegung abschnittsweise schneller wird, sehe allerdings in dem code nichts, was das erklären könnte.

bei so berechnungen wie
Code:
(BallR + (Mov*BallUmfang/360))
musst du echt mit dem typecasting aufpassen, da das bei PB nicht immer völlig selbsterklärend ist.
für BallUmfang auch eine Float zu nehmen, würde schon helfen, ich würde sogar für ALLE Werte Doubles vorziehen.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2009 15:16 
Offline

Registriert: 08.02.2009 19:52
Code:
Mov*1.02

sollte für die Beschleunigung sorgen, oder?

[edit] Komma durch Punkt ersetzt...


Zuletzt geändert von Crawler am 07.04.2009 15:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2009 15:41 
Offline

Registriert: 10.11.2004 03:22
Crawler hat geschrieben:
Code:
Mov*1,02

sollte für die Beschleunigung sorgen, oder?

1.02 ist die Beschleunigung, allerdings solltest du einen Dezimalpunkt verwenden, kein Komma.

_________________
... machts gut und danke für den fisch ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2009 16:08 
Offline
Benutzeravatar

Registriert: 10.09.2004 20:51
Wohnort: Ansbach
Jo, hab mal noch alles auf Double umgeschrieben, stimmt schon, bei solchen Single-Berechnungen kann man eigentlich immer getrost Double statt Float nehmen...

_________________
(\/) (°,,,°) (\/)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2009 16:31 
Offline
Moderator
Benutzeravatar

Registriert: 15.06.2008 18:22
Wohnort: Dresden
nette Sache :D

_________________
Win10 x64 | PB 5.71 (x86 und x64)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 07.04.2009 16:43 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
Noch netter wär's, wenn der Ball aus 2 Bällen bestünde. Einer
der sich dreht (Gittermuster z.B.) und einer der fix mitläuft (Reflexion)

_________________
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye