Oblivion:Lineare Bewegung: Unterschied zwischen den Versionen
Keris (Diskussion | Beiträge) K |
Keris (Diskussion | Beiträge) K |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 5: | Zeile 5: | ||
== Anwendung == | == Anwendung == | ||
=== Aufgabenstellung === | === Aufgabenstellung === | ||
− | + | Ein Apfel soll sich einmalig 5 Meter in x-Richtung, 1 Meter in Y-Richtung und 0,5 Meter in Z-Richtung bewegen. Nach vier Sekunden soll der Apfel am Endpunkt angekommen sein und herunter fallen. | |
Zeile 42: | Zeile 42: | ||
float Timer | float Timer | ||
short Start | short Start | ||
+ | short Init | ||
short Movement | short Movement | ||
− | Begin | + | Begin GameMode |
− | set XDist to | + | if Init == 0 |
− | set YDist to | + | set XDist to 350 ;(ca. 500 cm wie vorgegeben ) |
− | set XDist to | + | set YDist to 70 ;(ca. 100 cm wie vorgegeben ) |
− | set Duration to | + | set XDist to 35 ;(ca. 50 cm wie vorgegeben ) |
− | set dx to XDist / Duration ; die Strecke, die in einer Sekunde zurückgelegt wird | + | set Duration to 4 ;(wie vorgegeben) |
− | set dy to XDist / Duration | + | set dx to XDist /Duration ; die Strecke, die in einer Sekunde zurückgelegt wird |
− | set dz to XDist / Duration | + | set dy to XDist /Duration |
− | + | set dz to XDist /Duration | |
− | + | set Init to 1 | |
− | |||
set Start to 1 | set Start to 1 | ||
− | + | endif | |
− | |||
− | |||
− | |||
if Start == 1 | if Start == 1 | ||
set Start to 0 | set Start to 0 | ||
Zeile 90: | Zeile 87: | ||
=== Handhabung === | === Handhabung === | ||
Das Script liegt auf einem neuen Apfel-Objekt. | Das Script liegt auf einem neuen Apfel-Objekt. | ||
− | Es wird in obigem Script nicht bei jeder Bewegung ein Inkrement zur aktuellen Position addiert sondern die neue Position von der Ausgangsposition aus bestimmt. | + | Es wird in obigem Script nicht bei jeder Bewegung ein Inkrement zur aktuellen Position addiert sondern die neue Position von der Ausgangsposition aus über die abgelaufene Zeit und die Geschwindigkeit bestimmt. |
Zeile 102: | Zeile 99: | ||
− | {{ Scriptkategorie |Bewegung | | + | {{ Scriptkategorie |Bewegung |Level_1_Scripts|Lineare Bewegung}} |
Aktuelle Version vom 11. Juni 2009, 22:41 Uhr
Inhaltsverzeichnis
Thema
Lineare kontinuierliche Bewegungen eines Objektes sind mittels Script zu simulieren.
Anwendung
Aufgabenstellung
Ein Apfel soll sich einmalig 5 Meter in x-Richtung, 1 Meter in Y-Richtung und 0,5 Meter in Z-Richtung bewegen. Nach vier Sekunden soll der Apfel am Endpunkt angekommen sein und herunter fallen.
Theorie
Für die Bewegung wird das Objekt nicht kontinuierlich bewegt, sondern mit SetPos immer wieder an einen neuen Ort gesetzt. Dadurch, dass das menschliche Auge ab etwa 15 Bildern pro Sekunde die Bilder nicht mehr einzeln wahrnimmt, entsteht die Illusion einer flüssigen Bewegung. Liegt das Script auf einem Objekt und die Versetzung mit SetPos geschieht in einem GameMode-Block (oder MenuMode bzw. ScriptEffectUpdate), hängt der Eindruck der flüssigen Bewegung an der Framerate.
Kollisionen werden mit dem vorgestellten Algorithmus nicht bearbeitet.
Realisierung
Umgebung
Der Player muss den Apfel (ein neues Apfelobjekt mit Script) im Inventar haben.
Script
<tesscript>ScriptName AppleShot
- Written by keris
- 25.05.09
float xPos float yPos float zPos float zPosStart float xPosStart float yPosStart float dx float dy float dz float dDist float XDist float YDist float ZDist float Duration float Timer short Start short Init short Movement
Begin GameMode
if Init == 0
set XDist to 350 ;(ca. 500 cm wie vorgegeben )
set YDist to 70 ;(ca. 100 cm wie vorgegeben )
set XDist to 35 ;(ca. 50 cm wie vorgegeben )
set Duration to 4 ;(wie vorgegeben)
set dx to XDist /Duration ; die Strecke, die in einer Sekunde zurückgelegt wird
set dy to XDist /Duration
set dz to XDist /Duration
set Init to 1
set Start to 1
endif
if Start == 1
set Start to 0
set Movement to 1
set Timer to 0
endif
if Movement == 1 ; Startposition set XposStart to GetPos x set YposStart to GetPos y set ZposStart to GetPos z set Movement to 2 elseif Movement == 2 ; neue Position set Timer to Timer + getSecondsPassed Set Xpos to XposStart + dx * Timer Set Ypos to YposStart + dy * Timer Set Zpos to ZposStart + dz * Timer SetPos X XPos SetPos Y YPos SetPos Z ZPos If Timer >= Duration set Movement to 3 endif endif
End</tesscript>
Handhabung
Das Script liegt auf einem neuen Apfel-Objekt. Es wird in obigem Script nicht bei jeder Bewegung ein Inkrement zur aktuellen Position addiert sondern die neue Position von der Ausgangsposition aus über die abgelaufene Zeit und die Geschwindigkeit bestimmt.
Weiterführende Hinweise
Weitere Scripts aus dieser Kategorie
Level 2
{{#if: Bewegung | }}
{{#if: Level_1_Scripts | }}