Oblivion:Lineare Bewegung: Unterschied zwischen den Versionen

Aus Skript-Wiki
Wechseln zu: Navigation, Suche
K (Die Seite wurde neu angelegt: == Thema == Lineare kontinuierliche Bewegungen eines Objektes sind mittels Script zu simulieren. == Anwendung == === Aufgabenstellung === Wenn ein Apfel...)
 
K
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 5: Zeile 5:
 
== Anwendung ==
 
== Anwendung ==
 
=== Aufgabenstellung ===
 
=== Aufgabenstellung ===
Wenn ein Apfel aus dem Inventar des Players abgelegt wird, soll er sich 3 Meter in x-Richtung, 1 Meter in Y-Richtung und 0,5 Meter in Z-Richtung bewegen. Nach drei Sekunden soll der Apfel am Endpunkt angekommen sein und herunter fallen.
+
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 ===
 
=== Theorie ===
  
Für die Bewegung wird das Objekt nicht kontinuierlich bewegt, sondern mit [[ob:SetPos|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 [[ob:SetPos|SetPos]] geschieht in einem [[ob:GameMode|GameMode]]-Block (oder [[ob:MenuMode|MenuMode]] bzw. [[ob:ScriptEffectUpdate|ScriptEffectUpdate]], hängt der Eindruck der flüssigen Bewegung an der [[http://de.wikipedia.org/wiki/Framerate Framerate]].
+
Für die Bewegung wird das Objekt nicht kontinuierlich bewegt, sondern mit [[ob:SetPos|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 [[ob:SetPos|SetPos]] geschieht in einem [[ob:GameMode|GameMode]]-Block (oder [[ob:MenuMode|MenuMode]] bzw. [[ob:ScriptEffectUpdate|ScriptEffectUpdate]]), hängt der Eindruck der flüssigen Bewegung an der [[wikipedia:de:Framerate|Framerate]].
  
 
Kollisionen werden mit dem vorgestellten Algorithmus nicht bearbeitet.  
 
Kollisionen werden mit dem vorgestellten Algorithmus nicht bearbeitet.  
Zeile 18: Zeile 18:
 
=== Umgebung ===
 
=== Umgebung ===
 
Der Player muss den Apfel (ein neues Apfelobjekt mit Script) im Inventar haben.
 
Der Player muss den Apfel (ein neues Apfelobjekt mit Script) im Inventar haben.
 +
  
 
=== Script ===
 
=== Script ===
  
<tesscript> ScriptName AppleShot
+
<tesscript>ScriptName AppleShot
 +
;Written by keris
 +
;25.05.09
 +
 
 
float xPos
 
float xPos
 
float yPos
 
float yPos
Zeile 38: Zeile 42:
 
float Timer
 
float Timer
 
short Start
 
short Start
 +
short Init
 
short Movement
 
short Movement
  
  
Begin OnLoad
+
Begin GameMode
set XDist  to  420 ;(ca. 300 cm)
+
if Init == 0
set YDist  to  140 ;(ca. 100 cm )
+
set XDist  to  350 ;(ca. 500 cm wie vorgegeben )
set XDist  to  70 ;(ca. 50 cm )
+
set YDist  to  70 ;(ca. 100 cm wie vorgegeben )
set Duration to 3 ;(3 Sekunden)
+
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 dx to XDist /Duration ; die Strecke, die in einer Sekunde zurückgelegt wird
 
set dy to XDist /Duration
 
set dy to XDist /Duration
 
set dz to XDist /Duration
 
set dz to XDist /Duration
End
+
set Init to 1
 
 
Begin OnDrop
 
 
set Start to 1
 
set Start to 1
End
+
endif
 
 
Begin GameMode
 
 
 
 
if Start == 1
 
if Start == 1
 
set Start to 0
 
set Start to 0
Zeile 77: Zeile 78:
 
SetPos Z ZPos
 
SetPos Z ZPos
 
If Timer >= Duration
 
If Timer >= Duration
set Movement to 3
+
set Movement to 3
 
endif
 
endif
 
endif
 
endif
Zeile 86: 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.
  
  
 
== Weiterführende Hinweise==
 
== Weiterführende Hinweise==
* [[ob:Timer|Timer]]
+
* [[ob:Einfacher Timer|Einfacher Timer]]
 
* [[:kategorie: Blocktypen| Blocktypen]]
 
* [[:kategorie: Blocktypen| Blocktypen]]
 
* [[Oblivion:Quest_Scripts#Quest_Scripts|Quest Scripts]]
 
* [[Oblivion:Quest_Scripts#Quest_Scripts|Quest Scripts]]
Zeile 98: Zeile 99:
  
  
{{ Scriptkategorie |Bewegung |Level_2_Scripts|Lineare Bewegung}}
+
{{ Scriptkategorie |Bewegung |Level_1_Scripts|Lineare Bewegung}}

Aktuelle Version vom 11. Juni 2009, 22:41 Uhr

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 | }}