Skyrim:Cast Reference: Unterschied zwischen den Versionen

Aus Skript-Wiki
Wechseln zu: Navigation, Suche
K
K (Textersetzung - „tesscript>“ durch „papyrusscript>“)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 8: Zeile 8:
 
== Casten in einen Boolean ==
 
== Casten in einen Boolean ==
 
'''Compiler auto-cast from''': Anything
 
'''Compiler auto-cast from''': Anything
 +
 
Alles in Papyrus kann in einen Boolean gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.
 
Alles in Papyrus kann in einen Boolean gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.
  
Zeile 33: Zeile 34:
  
 
=== Beispiele===
 
=== Beispiele===
<tesscript>
+
<papyrusscript>
 
; x wird true
 
; x wird true
 
x = 1 as bool
 
x = 1 as bool
</tesscript>
+
</papyrusscript>
 
<br>
 
<br>
<tesscript>
+
<papyrusscript>
 
; x wird false
 
; x wird false
 
x = "" as bool
 
x = "" as bool
</tesscript>
+
</papyrusscript>
 
<br>
 
<br>
<tesscript>
+
<papyrusscript>
 
; x wird true
 
; x wird true
 
x = new int[5] as bool
 
x = new int[5] as bool
</tesscript>
+
</papyrusscript>
  
 
== Casten in einen Int ==
 
== Casten in einen Int ==
Zeile 53: Zeile 54:
 
Floats und Strings können in einen Iinteger gecastet werden. Fließkomma-Werte werden abgeschnitten und Strings werden in ihre Integer-Repräsentation konvertiert, wenn es eine gibt (sonst  0)
 
Floats und Strings können in einen Iinteger gecastet werden. Fließkomma-Werte werden abgeschnitten und Strings werden in ihre Integer-Repräsentation konvertiert, wenn es eine gibt (sonst  0)
 
=== Beispiele===
 
=== Beispiele===
<tesscript>
+
<papyrusscript>
 
; x wird  10
 
; x wird  10
 
x = 10.5 as int
 
x = 10.5 as int
</tesscript>
+
</papyrusscript>
 
<br>
 
<br>
<tesscript>
+
<papyrusscript>
 
; x wird  5
 
; x wird  5
 
x = "5 little dwarves!" as int
 
x = "5 little dwarves!" as int
</tesscript>
+
</papyrusscript>
  
 
== Casten in einen Float ==
 
== Casten in einen Float ==
 
'''Compiler auto-cast from''': Int
 
'''Compiler auto-cast from''': Int
 +
 
Integer und Strings können in einen Float gecastet werden. Integer werden einfach ihr Fließkomma-Äquivalent und Strings werden in ihre Float-Repräsentation konvertiert, wenn es eine gibt (sonst  0.0)
 
Integer und Strings können in einen Float gecastet werden. Integer werden einfach ihr Fließkomma-Äquivalent und Strings werden in ihre Float-Repräsentation konvertiert, wenn es eine gibt (sonst  0.0)
  
 
=== Beispiele===
 
=== Beispiele===
<tesscript>
+
<papyrusscript>
 
; x wird  15.0
 
; x wird  15.0
 
x = 15 as float
 
x = 15 as float
</tesscript>
+
</papyrusscript>
 
<br>
 
<br>
<tesscript>
+
<papyrusscript>
 
; x wird 10.34
 
; x wird 10.34
 
x = "10.34" as float
 
x = "10.34" as float
</tesscript>
+
</papyrusscript>
  
 
== Casten in Strings ==
 
== Casten in Strings ==
 
'''Compiler auto-cast from''': Anything
 
'''Compiler auto-cast from''': Anything
 +
 
Alles kann in einen String gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.
 
Alles kann in einen String gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.
  
Zeile 106: Zeile 109:
  
 
=== Beispiele===
 
=== Beispiele===
<tesscript>
+
<papyrusscript>
 
; x wird "15"
 
; x wird "15"
 
x = 15 as string
 
x = 15 as string
</tesscript>
+
</papyrusscript>
 
<br>
 
<br>
<tesscript>
+
<papyrusscript>
 
; x wird "[0, 0, 0]"
 
; x wird "[0, 0, 0]"
 
x = new int[3] as string
 
x = new int[3] as string
</tesscript>
+
</papyrusscript>
  
 
== Casten zu einem Objekt ==
 
== Casten zu einem Objekt ==
 
'''Compiler auto-cast from''': Child object
 
'''Compiler auto-cast from''': Child object
 +
 
Nur andere Objekte können zu einem Objekt gecastet werden und auch nur wenn das Objekt ein direktes Child oder Parent desjenigen ist, das gecastet wird. Wenn man vom Parent-Objekt zum Child-Objekt castet, mag das Casten nicht gelingen, wenn es nicht aktuell eine Instanz des Child-Objekts ist. In diesem Fall ist das Ergebnis None.
 
Nur andere Objekte können zu einem Objekt gecastet werden und auch nur wenn das Objekt ein direktes Child oder Parent desjenigen ist, das gecastet wird. Wenn man vom Parent-Objekt zum Child-Objekt castet, mag das Casten nicht gelingen, wenn es nicht aktuell eine Instanz des Child-Objekts ist. In diesem Fall ist das Ergebnis None.
  
 
=== Beispiele===
 
=== Beispiele===
<tesscript>
+
<papyrusscript>
 
; x bekommt das Parent-Objekt
 
; x bekommt das Parent-Objekt
 
x = ChildVariable as ParentObject
 
x = ChildVariable as ParentObject
</tesscript>
+
</papyrusscript>
 
<br>
 
<br>
<tesscript>
+
<papyrusscript>
 
; x bekommt das Child-Objekt, wenn es eines gibt, sonst None
 
; x bekommt das Child-Objekt, wenn es eines gibt, sonst None
 
x = ParentVariable as ChildObject
 
x = ParentVariable as ChildObject
</tesscript>
+
</papyrusscript>
  
 
== Casten zu einem Array ==
 
== Casten zu einem Array ==
 
'''Compiler auto-cast from''': Nothing
 
'''Compiler auto-cast from''': Nothing
 +
 
Nichts kann zu einem Array gecastet werden, nicht einmal andere Arrays, bei denen die Basis-Typen normalerweise funktionieren würden.
 
Nichts kann zu einem Array gecastet werden, nicht einmal andere Arrays, bei denen die Basis-Typen normalerweise funktionieren würden.
  
 
== Casten zu unterschiedlichen Typen ==
 
== Casten zu unterschiedlichen Typen ==
 
Das Casten zu unterschiedlichen Typen kann sinnvoll sein, d.h. wenn man den Typ eines Objektes wissen will, dass eine Triggerzone getriggert hat. Man kann aber z.B. eine ObjectReference nicht zu einer Waffe casten. In diesem Fall kann man mit dem "Form"-Typ arbeiten.
 
Das Casten zu unterschiedlichen Typen kann sinnvoll sein, d.h. wenn man den Typ eines Objektes wissen will, dass eine Triggerzone getriggert hat. Man kann aber z.B. eine ObjectReference nicht zu einer Waffe casten. In diesem Fall kann man mit dem "Form"-Typ arbeiten.
 +
 
=== Beispiele===
 
=== Beispiele===
<tesscript>
+
<papyrusscript>
 
Weapon Property MyUberWeapon auto
 
Weapon Property MyUberWeapon auto
  
Zeile 149: Zeile 155:
  
 
EndEvent
 
EndEvent
</tesscript>
+
</papyrusscript>
  
 
Wenn man aber nur den Typ des Objekts feststellen will, könnte man ebenso ein Schlüsselwort nutzen:
 
Wenn man aber nur den Typ des Objekts feststellen will, könnte man ebenso ein Schlüsselwort nutzen:
  
<tesscript>
+
<papyrusscript>
 
Keyword Property IsAnArrow auto
 
Keyword Property IsAnArrow auto
  
Zeile 163: Zeile 169:
  
 
EndEvent
 
EndEvent
</tesscript>
+
</papyrusscript>
  
  

Aktuelle Version vom 13. August 2012, 11:56 Uhr

<cast> ::= <expression> 'as' <type>

Das englische ‚to cast‘ bedeutet (u.a.) jemandem eine Rolle zu geben. In der Programmierung wird damit Zuweisen eines anderen Typs (oder Zuweisen zu einem anderen Typ) gemeint. Im weiteren Text wird der in der Programmierung gebräuchliche englische Begriff benutzt.

Das Casten eines Ausdrücken von einem Typ in einen anderen erlaubt es, zusätzliche Manipulationen an einem Objekt auszuführen oder diesen einer Funktion oder Property zu übergeben, die einen anderen Typen erwarten. Die verschiedenen Möglichkeiten des Castens sind unten aufgeführt:


Casten in einen Boolean

Compiler auto-cast from: Anything

Alles in Papyrus kann in einen Boolean gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.

Typ des Ausdrucks boolesches Ergebnis
Int True wenn der Integer nicht null ist
Float True wenn der Float nicht null ist (unter Berücksichtigung eines kleinen epsilon)
String True wenn der String nicht leer ist
Objects True wenn das Objekt nicht None ist
Arrays True wenn die Größe des Arrays 1 Element oder mehr beträgt

Beispiele

<papyrusscript>

x wird true

x = 1 as bool </papyrusscript>
<papyrusscript>

x wird false

x = "" as bool </papyrusscript>
<papyrusscript>

x wird true

x = new int[5] as bool </papyrusscript>

Casten in einen Int

Compiler auto-cast from: Nothing

Floats und Strings können in einen Iinteger gecastet werden. Fließkomma-Werte werden abgeschnitten und Strings werden in ihre Integer-Repräsentation konvertiert, wenn es eine gibt (sonst 0)

Beispiele

<papyrusscript>

x wird 10

x = 10.5 as int </papyrusscript>
<papyrusscript>

x wird 5

x = "5 little dwarves!" as int </papyrusscript>

Casten in einen Float

Compiler auto-cast from: Int

Integer und Strings können in einen Float gecastet werden. Integer werden einfach ihr Fließkomma-Äquivalent und Strings werden in ihre Float-Repräsentation konvertiert, wenn es eine gibt (sonst 0.0)

Beispiele

<papyrusscript>

x wird 15.0

x = 15 as float </papyrusscript>
<papyrusscript>

x wird 10.34

x = "10.34" as float </papyrusscript>

Casten in Strings

Compiler auto-cast from: Anything

Alles kann in einen String gecastet werden. Das Ergebnis, das man erhält, ist abhängig vom Typ des Objekts, das gecastet wird, wie die folgende Tabelle angibt.


Typ des Ausdrucks Ergebnis-String
Bool "True" oder "False" abhängig vom Wert
Int Die String-Version des Integers
Float Die String-Version des Floats
Objekte Eine String-Repräsentation des Objekts im Format: "[ScriptName <EditorID (FormID)>]"
Arrays Eine Liste von Elementen im Array getrennt durch Kommata, formatiert wie oben, eventuell mit "..." abgeschnitten, wenn ist zu lang für den internen String-Buffer ist.

Beispiele

<papyrusscript>

x wird "15"

x = 15 as string </papyrusscript>
<papyrusscript>

x wird "[0, 0, 0]"

x = new int[3] as string </papyrusscript>

Casten zu einem Objekt

Compiler auto-cast from: Child object

Nur andere Objekte können zu einem Objekt gecastet werden und auch nur wenn das Objekt ein direktes Child oder Parent desjenigen ist, das gecastet wird. Wenn man vom Parent-Objekt zum Child-Objekt castet, mag das Casten nicht gelingen, wenn es nicht aktuell eine Instanz des Child-Objekts ist. In diesem Fall ist das Ergebnis None.

Beispiele

<papyrusscript>

x bekommt das Parent-Objekt

x = ChildVariable as ParentObject </papyrusscript>
<papyrusscript>

x bekommt das Child-Objekt, wenn es eines gibt, sonst None

x = ParentVariable as ChildObject </papyrusscript>

Casten zu einem Array

Compiler auto-cast from: Nothing

Nichts kann zu einem Array gecastet werden, nicht einmal andere Arrays, bei denen die Basis-Typen normalerweise funktionieren würden.

Casten zu unterschiedlichen Typen

Das Casten zu unterschiedlichen Typen kann sinnvoll sein, d.h. wenn man den Typ eines Objektes wissen will, dass eine Triggerzone getriggert hat. Man kann aber z.B. eine ObjectReference nicht zu einer Waffe casten. In diesem Fall kann man mit dem "Form"-Typ arbeiten.

Beispiele

<papyrusscript> Weapon Property MyUberWeapon auto

OnTriggerEnter(ObjectReference Type)

Weapon triggeredWeapon = (type as form) as weapon  ; Castet das getriggerte Objekt erst zu einer Form und dann zu einer Waffe. if(triggeredWeapon == MyUberWeapon)

 ; wenn triggeredWeapon gleich MyUberWeapon mache etwas.

endif

EndEvent </papyrusscript>

Wenn man aber nur den Typ des Objekts feststellen will, könnte man ebenso ein Schlüsselwort nutzen:

<papyrusscript> Keyword Property IsAnArrow auto

OnTriggerEnter(ObjectReference Type)

if(type.haskeyword(IsAnArrow))

 ; wenn der Objekttyp unser Schlüsselwort hat, mache etwas.

endif

EndEvent </papyrusscript>


Links