[B3D] Camera Shake

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ZaP

Betreff: [B3D] Camera Shake

BeitragFr, Aug 10, 2007 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho!

Der Code an sich ist zwar simpel, ich dachte mir aber ich stells mal trotzdem hier rein:

Mit diesem Code kann man die Kamera schütteln lassen, wenn man z.b. ein Erdbeben simuliert, oder neben einer Explosion steht. Das ganze läuft Frame-unabhängig, und man kann die Schüttelstärke einstellen.

Man muss vorm einbau einige Variablen übernehmen, und die Update() Funktion in die Hauptschleife einbauen.
Schütteln tut man mit dieser Funktion:


Shake_Cam(Camera, [Strenght])

Camera: Das Kamera-entity, welches geschüttelt werden soll
Strenght: Die Stärke des Schüttelns (Standard: 1000)

Viel Spaß damit ^^

Code: [AUSKLAPPEN]
;Camera-Shaker by ZaP =)

Graphics3D 640,480,16,2
SetBuffer BackBuffer()

;random map erstellen
l = createLight()
PositionEntity l,0,20,0

CreatePlane()

For i=0 To 20
   c = CreateCube()
   PositionEntity c,rnd(-10,10),rnd(1,3),rnd(-10,10)
   EntityColor c,rnd(0,255),rnd(0,255),rnd(0,255)
Next

;camera machen
Global cam = CreateCamera()
PositionEntity cam,0,5,-10

;globale variablen für die Delta-Zeit
Global Delta_Time# = 0
Global oldtime = MilliSecs()

;globale variablen für das shaken ^^
Global shake# = 0
Global CamCenterX# = 0
Global CamCenterY# = 0
stren = 1000

Repeat
   
   UpdateWorld
   RenderWorld
   
   update()
   
   If KeyHit(57) ;leertaste
      shake_cam(cam, stren)
   endif
   
   If KeyHit(78) ;+
      stren = stren+100
   EndIf
   
   If KeyHit(74) ;-
      stren = stren-100
   endif
   
   Text 0,0,"Space drücken, um kräftig durchgeschüttelt zu werden,"
   Text 0,16,"+/- (Ziff. Bl.), um Stärke zu ändern."
   Text 0,32,"Stärke: "+stren
   
   Flip
   
Until keyhit(1)


Function Update()
   
   ;Zeitänderung seit dem letzten Frame berechnen
   Delta_Time# = MilliSecs()-oldtime
   oldtime = MilliSecs()
   
   ;Schütteln, wenn Shake > 0
   If shake# > 0
      
      ;von Shake die Delta-Zeit abziehen, um es FPS unabhängig zu machen
      shake# = shake#-Delta_Time#
      
      ;camera zufällig um den Zentralpunkt drehen lassen
      RotateEntity cam,CamCenterX#+rnd(shake#/100),CamCenterY#+rnd(shake#/100),0
      
   endif
   
End function


Function Shake_cam(camera, strenght# = 1000)

   shake# = strenght# ;shake bestimmt Stärke und Dauer des Schüttelns
   CamCenterX# = EntityPitch(camera)
   CamCenterY# = EntityYaw(camera)
   
End function

End
Starfare: Worklog, Website (download)

The_Nici

BeitragFr, Aug 10, 2007 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Länge und Stärke sollten getrennt werden.
Wenn man mehrmals während dem schütteln die Leertaste drückt, dreht sich die Kamera so, dass sie nichtmehr zurückdreht.

ZaP

BeitragFr, Aug 10, 2007 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte befürchtet dass jemand so kleinlich ist =)
Dann musst du es so ändern dass man nur Shaken kann wenn grad nicht geshakt wird ^^
Starfare: Worklog, Website (download)

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group