Skyrim:Cast Reference: Unterschied zwischen den Versionen

Aus Skript-Wiki
Wechseln zu: Navigation, Suche
K (Die Seite wurde neu angelegt: ==Links== {{Übersetzung|ckwiki|Cast Reference}} Cast Reference Cast Reference [[Category:Papyrus Sprachreferenzen|C...)
 
K
Zeile 1: Zeile 1:
 +
<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.
 +
 +
<div class=edztable>
 +
{|
 +
! 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
 +
|}
 +
</div>
 +
 +
=== Beispiele===
 +
<tesscript>
 +
; x wird true
 +
x = 1 as bool
 +
</tesscript>
 +
<br>
 +
<tesscript>
 +
; x wird false
 +
x = "" as bool
 +
</tesscript>
 +
<br>
 +
<tesscript>
 +
; x wird true
 +
x = new int[5] as bool
 +
</tesscript>
 +
 +
== 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===
 +
<tesscript>
 +
; x wird  10
 +
x = 10.5 as int
 +
</tesscript>
 +
<br>
 +
<tesscript>
 +
; x wird  5
 +
x = "5 little dwarves!" as int
 +
</tesscript>
 +
 +
== 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===
 +
<tesscript>
 +
; x wird  15.0
 +
x = 15 as float
 +
</tesscript>
 +
<br>
 +
<tesscript>
 +
; x wird 10.34
 +
x = "10.34" as float
 +
</tesscript>
 +
 +
== 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.
 +
 +
 +
<div class=edztable>
 +
{|
 +
! 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.
 +
|}
 +
</div>
 +
 +
=== Beispiele===
 +
<tesscript>
 +
; x wird "15"
 +
x = 15 as string
 +
</tesscript>
 +
<br>
 +
<tesscript>
 +
; x wird "[0, 0, 0]"
 +
x = new int[3] as string
 +
</tesscript>
 +
 +
== 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===
 +
<tesscript>
 +
; x bekommt das Parent-Objekt
 +
x = ChildVariable as ParentObject
 +
</tesscript>
 +
<br>
 +
<tesscript>
 +
; x bekommt das Child-Objekt, wenn es eines gibt, sonst None
 +
x = ParentVariable as ChildObject
 +
</tesscript>
 +
 +
== 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===
 +
<tesscript>
 +
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
 +
</tesscript>
 +
 +
Wenn man aber nur den Typ des Objekts feststellen will, könnte man ebenso ein Schlüsselwort nutzen:
 +
 +
<tesscript>
 +
Keyword Property IsAnArrow auto
 +
 +
OnTriggerEnter(ObjectReference Type)
 +
 +
if(type.haskeyword(IsAnArrow))
 +
  ; wenn der Objekttyp unser Schlüsselwort hat, mache etwas.
 +
endif
 +
 +
EndEvent
 +
</tesscript>
 +
 +
 +
 
==Links==
 
==Links==
 
{{Übersetzung|ckwiki|Cast Reference}}
 
{{Übersetzung|ckwiki|Cast Reference}}
Zeile 5: Zeile 173:
 
[[Category:Scripting Wissen|Cast Reference]]
 
[[Category:Scripting Wissen|Cast Reference]]
 
[[Category:Papyrus Sprachreferenzen|Cast Reference]]
 
[[Category:Papyrus Sprachreferenzen|Cast Reference]]
[[Category:Unvollständige_Artikel|Cast Reference]]
 

Version vom 3. August 2012, 18:35 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

<tesscript>

x wird true

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

x wird false

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

x wird true

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

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

<tesscript>

x wird 10

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

x wird 5

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

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

<tesscript>

x wird 15.0

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

x wird 10.34

x = "10.34" as float </tesscript>

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

<tesscript>

x wird "15"

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

x wird "[0, 0, 0]"

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

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

<tesscript>

x bekommt das Parent-Objekt

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

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

x = ParentVariable as ChildObject </tesscript>

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

<tesscript> 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 </tesscript>

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

<tesscript> Keyword Property IsAnArrow auto

OnTriggerEnter(ObjectReference Type)

if(type.haskeyword(IsAnArrow))

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

endif

EndEvent </tesscript>


Links