TurnEntity

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

megabyte

Betreff: TurnEntity

BeitragMi, Apr 19, 2006 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi @ all
und wieder ein neuer noob im Forum Smile

Ich habe ein Problem mit dem Befehl TurnEntity.

Mein Vorhaben vorweg

Ich versuche eine Sphere in abhängikeit der Zeit zu drehen.
Ich versuche also eine Sphere in 24 Stdunden einmal um sich selbst drehen zu lassen.

Nun meine Frage zu dem TurnEntity:
Ich habe mir die OH von http://www.blitzbase.de/ kopiert.
In dieser steht follgendes: Yaw = Yawwinkel 0-360 Grad (Y-Achse)
Verstehe ich das Richtig das wenn ich den Yaw auf 0.1 setze -> TurnEntity Sphere, 0, 0.1, 0 -> das dies der Winkel ist um den die Sphere gedreht wird? (immer wieder - den unterschied zu RotateEntity habe ich mir auch schon angesehen, funktioniert aber leider auch nicht)

Damit ihr Euch einen überblick verschaffen könnt ist hier mein Code:

MAIN
Code: [AUSKLAPPEN]
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Include "globalvar.bb"
Include "functions.bb"

Global kamera = CreateCamera()
EntityType kamera, 1
PositionEntity kamera, 0,0,0

Include "erde.bb"


While Not KeyDown(1) ;ESC

   zeit
   move_cam
   wframe
   ;TurnEntity erde, 0, rotation#(1440,erde), 0 ;rotation#(tester%,erde)
   TurnEntity erde, 0, rotation#(1440), 0
   
   
   Collisions 1, 2, 2, 2
   
   UpdateWorld
   RenderWorld
   
   Text 0,0, "Zeit   = " + zeit_jahre + " Jahre  " + zeit_monate + " Monate  " + zeit_tage + " Tage  " + zeit_stunden + " Stunden  " + zeit_minuten + " Minuten  " + zeit_sekunden + " Sekunden"
   Text 0,15,"Faktor = x" + zeit_multiplayer_value

   
   Flip

Wend

End



FUNCTIONS
Code: [AUSKLAPPEN]
;Globale Variablen für Funktionen

;move_cam (Bewegt die Kamera)
Global move_cam_schwenken_runter = 200            ;Pfeil rauf
Global move_cam_schwenken_rauf = 208            ;Pfeil runter
Global move_cam_schwenken_links = 203            ;Pfeil links
Global move_cam_schwenken_rechts = 205            ;Pfeil rechts
Global move_cam_schwenken_rolle_links = 44         ;Y
Global move_cam_schwenken_rolle_rechts = 45         ;X

Global move_cam_bewegen_vor = 17               ;W
Global move_cam_bewegen_zurueck = 31            ;S
Global move_cam_bewegen_links = 30               ;A
Global move_cam_bewegen_rechts = 32               ;D
Global move_cam_bewegen_hoch = 18               ;A
Global move_cam_bewegen_runter = 46               ;D

Global move_cam_speed_multiplayer_key_up = 201      ;Bild rauf
Global move_cam_speed_multiplayer_key_down = 209   ;Bild runter
Global move_cam_speed_multiplayer_value = 10      ;um wie viel schneller
Global move_cam_speed_multiplayer_hits = 1
Global move_cam_schwenken_speed = 1               ;Wie schnell soll die Kamera geschwenkt werden
Global move_cam_bewegen_speed = 1               ;Wie schnell soll die Kamera bewegt werden

;wframe (Schaltet den Wireframe-Modus an/aus)
Global wiframe

;zeit (Die Zeit)
Global zeit_sekunden = 0
Global zeit_minuten   = 0
Global zeit_stunden = 0
Global zeit_tage = 0
Global zeit_monate = 0
Global zeit_jahre = 0
Global zeit_millisecs = MilliSecs()
Global zeit
Global zeit_multiplayer_up = 199               ;Pos1
Global zeit_multiplayer_down = 207               ;Ende
Global zeit_multiplayer_value = 1
Global exp_multiplayer

;rotation (berechnet die Drehgeschwindigkei)
;Global rotation_speed#
Global tmp_zeit_minuten = zeit_minuten



;Funktionen---------------------------------------------------------------------------------------------

Function move_cam()
   
   If KeyDown(move_cam_speed_multiplayer_key_up) And KeyHit(move_cam_speed_multiplayer_key_up) And move_cam_speed_multiplayer_hits < 10 Then
      move_cam_schwenken_speed = move_cam_schwenken_speed * move_cam_speed_multiplayer_value
      move_cam_bewegen_speed = move_cam_bewegen_speed * move_cam_speed_multiplayer_value
      move_cam_speed_multiplayer_hits = move_cam_speed_multiplayer_hits + 1
   End If
   
   If KeyDown(move_cam_speed_multiplayer_key_down) And KeyHit(move_cam_speed_multiplayer_key_down) And move_cam_speed_multiplayer_hits > 1 Then
      move_cam_schwenken_speed = move_cam_schwenken_speed / move_cam_speed_multiplayer_value
      move_cam_bewegen_speed = move_cam_bewegen_speed / move_cam_speed_multiplayer_value
      move_cam_speed_multiplayer_hits = move_cam_speed_multiplayer_hits - 1
   End If

   
   
   If KeyDown(move_cam_schwenken_runter) Then ;Kamera nach unten schwenken
      TurnEntity kamera, move_cam_schwenken_speed, 0, 0
   End If
   
   If KeyDown(move_cam_schwenken_rauf) Then ;Kamera nach oben schwenken
      TurnEntity kamera, -move_cam_schwenken_speed, 0, 0
   End If

   If KeyDown(move_cam_schwenken_links) Then ;Kamera nach links schwenken
      TurnEntity kamera, 0, move_cam_schwenken_speed,0
   End If

   If KeyDown(move_cam_schwenken_rechts) Then ;Kamera nach rechts schwenken
      TurnEntity kamera, 0, -move_cam_schwenken_speed,0
   End If
   
   If KeyDown(move_cam_schwenken_rolle_links) Then ;Kamera nach links schwenken
      TurnEntity kamera, 0, 0, move_cam_schwenken_speed
   End If

   If KeyDown(move_cam_schwenken_rolle_rechts) Then ;Kamera nach rechts schwenken
      TurnEntity kamera, 0, 0, -move_cam_schwenken_speed
   End If
   


   If KeyDown(move_cam_bewegen_vor) Then ;Kamera nach vorne bewegen
      MoveEntity kamera, 0, 0, move_cam_bewegen_speed
   End If
   
   If KeyDown(move_cam_bewegen_zurueck) Then ;Kamera nach hinten bewegen
      MoveEntity kamera, 0, 0, -move_cam_bewegen_speed
   End If

   If KeyDown(move_cam_bewegen_links) Then ;Kamera nach links bewegen (strafen)
      MoveEntity kamera, -move_cam_bewegen_speed, 0, 0
   End If

   If KeyDown(move_cam_bewegen_rechts) Then ;Kamera nach rechts bewegen (strafen)
      MoveEntity kamera, move_cam_bewegen_speed, 0, 0
   End If

   If KeyDown(move_cam_bewegen_hoch) Then ;Kamera nach oben bewegen (strafen)
      MoveEntity kamera, 0, move_cam_bewegen_speed, 0
   End If

   If KeyDown(move_cam_bewegen_runter) Then ;Kamera nach unten bewegen (strafen)
      MoveEntity kamera, 0, -move_cam_bewegen_speed, 0
   End If


End Function

Function wframe()

   If KeyHit(88) Then      ;88 = F12
      wiframe = 1 - wiframe
      WireFrame wiframe
   End If
   
End Function

Function zeit()
   
   If KeyDown(zeit_multiplayer_up) And KeyHit(zeit_multiplayer_up) And zeit_multiplayer_value < 20 Then
      zeit_multiplayer_value = zeit_multiplayer_value + 1
   End If
   
   If KeyDown(zeit_multiplayer_down) And KeyHit(zeit_multiplayer_down) And zeit_multiplayer_value > 0 Then
      zeit_multiplayer_value = zeit_multiplayer_value - 1
   End If

   
   zeit = MilliSecs() - zeit_millisecs
   If zeit >= 1000 Then
      If zeit_multiplayer_value = 0 Then
         exp_multiplayer = 0
      ElseIf zeit_multiplayer_value = 1 Then
         exp_multiplayer = 1
      Else
         exp_multiplayer = exponent(2,zeit_multiplayer_value)
      End If
      zeit_sekunden = zeit_sekunden + exp_multiplayer
      zeit_millisecs = MilliSecs()
   End If

   
   
   While zeit_sekunden > 59
      zeit_sekunden = zeit_sekunden - 60
      zeit_minuten = zeit_minuten + 1
   
      If zeit_minuten > 59 Then
         zeit_minuten = zeit_minuten - 60
         zeit_stunden = zeit_stunden + 1
      End If
   
      If zeit_stunden > 23 Then
         zeit_stunden = zeit_stunden - 24
         zeit_tage = zeit_tage + 1
      End If
      
      If zeit_tage > 29 Then
         zeit_tage = zeit_tage - 30
         zeit_monate = zeit_monate + 1
      End If
      
      If zeit_monate > 11 Then
         zeit_monate = zeit_monate - 12
         zeit_jahre = zeit_jahre + 1
      End If
   Wend
   
End Function

Function rotation#(volle_drehung_in)
   
   If tmp_zeit_minuten <> zeit_minuten Then
      tmp_zeit_minuten = zeit_minuten - tmp_zeit_minuten
      Return rotation_speed# = 360 / volle_drehung_in * tmp_zeit_minuten
      tmp_zeit_minuten = zeit_minuten
   Else
      Return rotation_speed# = 0
   End If

End Function

Function exponent#(Basis#,Exponent#)   ;Exponentialrechner

   If Exponent# = 0 Then   ;Ist der Exponent 0 ist das Ergebnis immer 1
      Basis# = 1
   Else
      tmp_Basis# = Basis#
      While exponent# > 1
         Basis# = Basis# * tmp_Basis#
         exponent# = exponent# - 1
      Wend
   End If
   Return Basis#

End Function


ERDE
Code: [AUSKLAPPEN]
Global erde = CreateSphere(32)
EntityType erde, 2
ScaleEntity erde, 200 ,200, 200
Global erde_tex = LoadTexture("texturen/erde/erde.jpg")
EntityTexture erde, erde_tex, 0, 0

PositionEntity erde, 0, 0, 300


Ich weis, es kann sein das es noch ein Par Variablen gibt die ich deklariert habe die nichts zu bedeuten haben. Ich bin halt schwer am rumtesten.

Über hilfe würde ich mich sehr freuen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 19, 2006 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das soll wohl eine Weltkugel sein. Um sie genau einmal in 24h um 360° zu drehen, gibt es verschiedene Wege... Aber eines vorweg:

RotateEntity setzt einen bestimmten Winkel absolut

TurnEntity dreht um einen relativen Winkel um

Speziel für dein Anliegen, würde ich RotateEntity dafür nehmen. Den Winkel kannst du dann ganz einfach so ausrechnen winkel=zeit*360/24 oder kürzer winkel=zeit*15... Um die Zeit herrauszufinden, kannst du ql:CurrentTime benutzen. Die Summen musst du dann allerdings noch aus dem String noch parsen. Siehe dazu ql:left, ql:mid und ql:right... Die Strings kannst du einfach in Integerzahlen umwandel, wenn du sie in eine Variable mit Int(string) einsetzt. Die Zeit muß dann noch komplett umgerechnet werden. zB zeit#=stunden+minuten/60...

megabyte

BeitragDo, Apr 20, 2006 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi hectic

erstmal danke das du dich bemühst mir zu helfen.

Vieleicht kannst du mir auch sagen warum ich bei follgender Function immer das Ergebnis = 1 zurückbekomme

Code: [AUSKLAPPEN]
Function rotation#(volle_drehung_in)
   
   Return rotation_speed# = ((360 / volle_drehung_in) * zeit_stunden)   

End Function


Wobei ich hier die Variable "volle_drehung_in" auf 24 setze und die Variable "zeit_stunden" wird automatisch icrementiert.
Aber die Function Returnt immer 1 und ich sehe nicht warum.

megabyte

BeitragDo, Apr 20, 2006 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
oki sorry ich habs

Ist natürlich Laughing totaler humbug wies scheint
Code: [AUSKLAPPEN]
Function rotation#(volle_drehung_in)
   
   Return rotation_speed# = ((360 / volle_drehung_in) * zeit_stunden)   

End Function


Jetzt habe ich das so gemacht und es geht
Code: [AUSKLAPPEN]
Function rotation#(volle_drehung_in)
   
   Return ((360 / volle_drehung_in) * zeit_stunden)   

End Function


Nochmals danke für deine hilfe

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group