<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.aquasoft.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mark.lorenz</id>
	<title>AquaSoft Wiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.aquasoft.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mark.lorenz"/>
	<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php/Spezial:Beitr%C3%A4ge/Mark.lorenz"/>
	<updated>2026-05-16T13:01:35Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1175</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1175"/>
		<updated>2014-06-27T11:59:32Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Partikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt. Die Werte verstehen sich als Winkeladditionen eines Basisvektoren, der die Standardrichtung angibt. Bei X = 0, Y = 0 und Z = 0 zeigt dieser Basisvektor nach rechts. Als erstes wird um Z rotiert, dann um Y, dann um X.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Maximale Stärke der Abweichungsbewegung. Die Stärke ist in Prozent der maximalen Partikelgröße angegeben. Stärke = 100 heißt also, dass ein Partikel nach oben unten so weit ausschlägt, wie es selbst groß ist. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt die Anzahl der Bildwechsel pro Sekunde an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird. Mindestwert = 100ms&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet. Angabe in Prozent des Bildschirms.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen. Einige Optionen sind nur für [[TParticleEnvironment|Environment]] = peGlobal sinnvoll:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1174</id>
		<title>TParticleMove</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1174"/>
		<updated>2014-06-27T11:57:21Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Werte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Move&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Move gibt die Bewegungsart an, die Partikel zusätzlich zur eigentlichen Bewegungsrichtung des Partikels ausführen.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmNone&amp;#039;&amp;#039;&amp;#039;: Keine zusätzliche Bewegung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmSinus&amp;#039;&amp;#039;&amp;#039;: Sinusbewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmCircle&amp;#039;&amp;#039;&amp;#039;: Kreisbewegungen in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomX&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXY&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in XY-Ebene&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXYZ&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in alle Richtungen&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1173</id>
		<title>TParticleOptions</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1173"/>
		<updated>2014-06-27T11:56:22Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Werte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set vom Aufzählungstyp &amp;#039;&amp;#039;&amp;#039;TParticleOption&amp;#039;&amp;#039;&amp;#039; für Methode &amp;#039;&amp;#039;Options&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Options kann generell alle möglichen Schalter für das Partikelsystem haben.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterDirection&amp;#039;&amp;#039;&amp;#039;: Partikel in Bewegungsrichtung des Emitters drehen. Partikelrotation bleibt unbeeinflusst. &amp;#039;&amp;#039;Nur [[TParticleEnvironment]] = peGlobal!&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterRotation&amp;#039;&amp;#039;&amp;#039;: Partikel erben den Rotationswinkel des Emitters. Bewegungsrichtung der Partikel bleibt unbeeinflusst.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterSize&amp;#039;&amp;#039;&amp;#039;: Partikel skalieren mit dem Emitter mit. &amp;#039;&amp;#039;Nur [[TParticleEnvironment]] = peGlobal!&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poRotateParticleInDirection&amp;#039;&amp;#039;&amp;#039;: Partikel drehen sich in Bewegungsrichtung des Emitters. &amp;#039;&amp;#039;Nur [[TParticleEnvironment]] = peGlobal!&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poBlendSprites&amp;#039;&amp;#039;&amp;#039;: Partikelanimation ist normal ein einfacher Wechsel der Bilder. Mit dieser Option werden die Einzelbilder per Alphablending ineinander übergeblendet.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1172</id>
		<title>TParticleOptions</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1172"/>
		<updated>2014-06-27T11:56:02Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Werte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set vom Aufzählungstyp &amp;#039;&amp;#039;&amp;#039;TParticleOption&amp;#039;&amp;#039;&amp;#039; für Methode &amp;#039;&amp;#039;Options&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Options kann generell alle möglichen Schalter für das Partikelsystem haben.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterDirection&amp;#039;&amp;#039;&amp;#039;: Partikel in Bewegungsrichtung des Emitters drehen. Partikelrotation bleibt unbeeinflusst. &amp;#039;&amp;#039;Nur [[TParticleEnvironment]] = peGlobal!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterRotation&amp;#039;&amp;#039;&amp;#039;: Partikel erben den Rotationswinkel des Emitters. Bewegungsrichtung der Partikel bleibt unbeeinflusst.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterSize&amp;#039;&amp;#039;&amp;#039;: Partikel skalieren mit dem Emitter mit. &amp;#039;&amp;#039;Nur [[TParticleEnvironment]] = peGlobal!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poRotateParticleInDirection&amp;#039;&amp;#039;&amp;#039;: Partikel drehen sich in Bewegungsrichtung des Emitters. &amp;#039;&amp;#039;Nur [[TParticleEnvironment]] = peGlobal!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poBlendSprites&amp;#039;&amp;#039;&amp;#039;: Partikelanimation ist normal ein einfacher Wechsel der Bilder. Mit dieser Option werden die Einzelbilder per Alphablending ineinander übergeblendet.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1171</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1171"/>
		<updated>2014-06-27T11:55:04Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Maximale Stärke der Abweichungsbewegung. Die Stärke ist in Prozent der maximalen Partikelgröße angegeben. Stärke = 100 heißt also, dass ein Partikel nach oben unten so weit ausschlägt, wie es selbst groß ist. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt die Anzahl der Bildwechsel pro Sekunde an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird. Mindestwert = 100ms&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet. Angabe in Prozent des Bildschirms.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen. Einige Optionen sind nur für [[TParticleEnvironment|Environment]] = peGlobal sinnvoll:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1170</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1170"/>
		<updated>2014-06-27T11:53:53Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Emitter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Maximale Stärke der Abweichungsbewegung. Die Stärke ist in Prozent der maximalen Partikelgröße angegeben. Stärke = 100 heißt also, dass ein Partikel nach oben unten so weit ausschlägt, wie es selbst groß ist. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt die Anzahl der Bildwechsel pro Sekunde an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird. Mindestwert = 100ms&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet. Angabe in Prozent des Bildschirms.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1169</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1169"/>
		<updated>2014-06-27T11:53:13Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Partikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Maximale Stärke der Abweichungsbewegung. Die Stärke ist in Prozent der maximalen Partikelgröße angegeben. Stärke = 100 heißt also, dass ein Partikel nach oben unten so weit ausschlägt, wie es selbst groß ist. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt die Anzahl der Bildwechsel pro Sekunde an&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird. Mindestwert = 100ms&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1168</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1168"/>
		<updated>2014-06-27T11:51:25Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Partikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Maximale Stärke der Abweichungsbewegung. Die Stärke ist in Prozent der maximalen Partikelgröße angegeben. Stärke = 100 heißt also, dass ein Partikel nach oben unten so weit ausschlägt, wie es selbst groß ist. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird. Mindestwert = 100ms&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1167</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1167"/>
		<updated>2014-06-24T11:27:10Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Partikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Maximale Stärke der Abweichungsbewegung. Die Stärke ist in Prozent der maximalen Partikelgröße angegeben. Stärke = 100 heißt also, dass ein Partikel nach oben unten so weit ausschlägt, wie es selbst groß ist. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1166</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1166"/>
		<updated>2014-06-24T11:03:39Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Emitter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Exclude: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleEnvironment&amp;diff=1165</id>
		<title>TParticleEnvironment</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleEnvironment&amp;diff=1165"/>
		<updated>2014-06-24T07:50:06Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Werte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Environment&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Environment gibt an, ob die Partikel lokal im Partikelsystem-Objekt existieren, oder sich auch außerhalb bewegen können.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;: Partikel leben innerhalb des Partikelobjekts. Sie skalieren mit, sie werden mitverschoben und rotiert und sterben, wenn sie die Partikelobjekt-Bounds verlassen. Beispielsweise ist ein Partikel mit der Größe = 100 so groß wie die Bounds des Partikelsystems.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;: Partikelobjekt gibt die Emitterbounds an. Einmal emittiert sind die Partikel vom Partikelobjekt unabhängig, solange dieses angezeigt wird. Bei Skalierung oder Verschiebung werden Partikel nicht beeinflusst. Es sei denn, besondere [[TParticleOptions|entsprechende Optionen]] wurden gesetzt.  Beispielsweise ist ein Partikel mit der Größe = 100 so groß wie der Bildschirm. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1164</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1164"/>
		<updated>2014-06-24T07:48:50Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Partikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;). Der Wert versteht sich in Prozent zu seinem Bezugssystem (siehe [[TParticleEnvironment]]):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1163</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1163"/>
		<updated>2014-06-24T07:43:16Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Partikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender Beispiele herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1162</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1162"/>
		<updated>2014-06-24T07:42:51Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Partikel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung: Die Werte modifizieren einen Bewegungsvektor, der nach rechts zeigt. Die jeweiligen Richtungen geben Winkel an, um die der Vektor gedreht wird. Wichtig ist dabei die Reihenfolge. Als erstes wird der Winkel um die Z-Achse addiert, dann wird der Vektor um die Y-Achse gedreht und dann um die X-Achse. &lt;br /&gt;
Die Drehwinkel kann man sich anhand folgender herleiten:&lt;br /&gt;
** Drehwinkel um X und Y = 0 zeigt der Vektor bei Z = 0 (also der Basisvektor) nach rechts, bei Z = 90 zeigt der Vektor nach unten&lt;br /&gt;
** Bei X = 0 und Z = 0, zeigt der Vektor bei Y = 90 nach hinten&lt;br /&gt;
** Bei Z = 0 und Y = 90 zeigt der Vektor bei X = 90 nach oben &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1161</id>
		<title>TParticleEmitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1161"/>
		<updated>2014-06-23T15:44:41Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Werte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Emitter&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Emitter gibt den Emittertypen des Partikelobjekts an.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectEdge&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig an den Kanten des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectArea&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig innerhalb des Boundsrect des Partikelsystems emittiert. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPoint&amp;#039;&amp;#039;&amp;#039;: Partikel werden im Mittelpunkt des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPath&amp;#039;&amp;#039;&amp;#039;: Dem Partikelsystem wird ein Bewegungspfad gegeben. Die Partikel werden dann auf dem Pfad emittiert. Dadurch kann sich der Emitter aber nicht bewegen, da der Bewegungspfad für das Emittieren zuständig ist. Abhilfe schafft hier, indem man das Partikelsystem in eine [[Flexicollage]] legt und diese mit einem Bewegungspfad versieht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IRangeValue&amp;diff=1160</id>
		<title>IRangeValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IRangeValue&amp;diff=1160"/>
		<updated>2014-06-23T15:43:48Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Beispiele */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;IRangeValue&amp;#039;&amp;#039;&amp;#039; ist ein Datentyp, der es ermöglicht, einen Wertebereich anzugeben, anstelle eines konkreten Wertes. Dieser Wertebereich wird über zwei begrenzende Kurven definiert. Die Kurven geben Werte zu einem bestimmten Zeitpunkt an. Ist nur eine Kurve definiert, gibt der RangeValue die Werte dieser Kurve zu einem bestimmten Zeitpunkt aus. Sind zwei Kurven definiert, gibt der RangeValue einen zufälligen Wert zwischen den Werten der beiden Kurven zum gegebenen Zeitpunkt aus. Siehe [[#Beispiele|Beispiele]]. Möglich ist auch, dass anstelle eines Zufallswertes eine Wichtung genommen wird, siehe [[IParticleRangeValue]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IRangeValue&lt;br /&gt;
    function GetValue (const Time: Double): Double;&lt;br /&gt;
    procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IScripting_IRangeValue);&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe [[IRangeValue|hier]]. SetValueXYZ gibt allen Dimensionen den gleichen Wert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wert zum Zeitpunkt Time ausgeben, analog zum Setter.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetValue (const Time: Double): Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Alle Werte löschen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Clear;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Werte von anderem IParticleRangeValue übernehmen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 1&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Ein RangeValue soll eine konstante Funktion werden. Dann wird ausschließlich nur die erste Kurve mit Werten gefüllt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10); //Parameter: KurvenIndex, Zeitpunkt, Wert&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dieser Code sagt, dass die beschränkende Kurve 0 zum Zeitpunkt 0 den Wert 10 erhält. Aufgrund der Interpolation hat die Kurve zu jedem anderen Zeitpunkt ebenfalls den Wert 10.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 2&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Dem RangeValue werden zwei Werte zugewiesen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(0, 1000, 20);&lt;br /&gt;
&amp;lt;/code&amp;gt;  &lt;br /&gt;
Der RangeValue hat weiterhin nur eine beschränkende Kurve. Doch sie ist keine Konstante mehr: Zum Zeitpunkt 0 liefert sie den Wert 0, zum Zeitpunkt 1000 und höher den Wert 20. Die Werte zwischen 0 und 1000 werden interpoliert. Zum Zeitpunkt 500 könnte der RangeValue also 15 liefern. So lassen sich beliebige Kurven konstruieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der RangeValue kann aber eben auch Bereichsangaben haben. Gibt man jetzt Werte für zwei beschränkende Kurven an, erhält man einen Bereich. Der RangeValue liefert nun einen zufälligen Wert zwischen den Werten der beiden Schranken (andere Fälle: siehe Wichtung bei [[IParticleRangeValue]]).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 3&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
RangeValue mit Bereichsangeben:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(1, 0, 100);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Der RangeValue erhält hier zwei beschränkende Kurven. Beide Kurven sind Konstanten, in dem Fall mit den Werten 10 und 100. Der RangeValue wird also als Wert zu jedem beliebigen Zeitpunkt einen zufälligen Wert zwischen 10 und 100 ausgeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 4&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Nichtkonstante Schranken:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(1, 0, 100);&lt;br /&gt;
  RangeValue.SetValue(0, 1000, 20);&lt;br /&gt;
  RangeValue.SetValue(1, 500, 50);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Der RangeValue hat nun zwei nichtkonstante Kurven als Schranken erhalten. Er wird beim Zeitpunkt 500 also beide Kurvenwerte interpolieren. Die Kurve 0 hat zum Zeitpunkt 500 den Wert 15. Die Kurve 1 hat zum Zeitpunkt 500 den Wert 50. Demnach liefert der RangeValue zum Zeitpunkt 500 einen zufälligen Wert zwischen 15 und 50. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IRangeValue&amp;diff=1159</id>
		<title>IRangeValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IRangeValue&amp;diff=1159"/>
		<updated>2014-06-23T15:42:58Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;IRangeValue&amp;#039;&amp;#039;&amp;#039; ist ein Datentyp, der es ermöglicht, einen Wertebereich anzugeben, anstelle eines konkreten Wertes. Dieser Wertebereich wird über zwei begrenzende Kurven definiert. Die Kurven geben Werte zu einem bestimmten Zeitpunkt an. Ist nur eine Kurve definiert, gibt der RangeValue die Werte dieser Kurve zu einem bestimmten Zeitpunkt aus. Sind zwei Kurven definiert, gibt der RangeValue einen zufälligen Wert zwischen den Werten der beiden Kurven zum gegebenen Zeitpunkt aus. Siehe [[#Beispiele|Beispiele]]. Möglich ist auch, dass anstelle eines Zufallswertes eine Wichtung genommen wird, siehe [[IParticleRangeValue]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IRangeValue&lt;br /&gt;
    function GetValue (const Time: Double): Double;&lt;br /&gt;
    procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IScripting_IRangeValue);&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe [[IRangeValue|hier]]. SetValueXYZ gibt allen Dimensionen den gleichen Wert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wert zum Zeitpunkt Time ausgeben, analog zum Setter.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetValue (const Time: Double): Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Alle Werte löschen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Clear;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Werte von anderem IParticleRangeValue übernehmen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 1&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Ein RangeValue soll eine konstante Funktion werden. Dann wird ausschließlich nur die erste Kurve mit Werten gefüllt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10); //Parameter: KurvenIndex, Zeitpunkt, Wert&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dieser Code sagt, dass die beschränkende Kurve 0 zum Zeitpunkt 0 den Wert 10 erhält. Aufgrund der Interpolation hat die Kurve zu jedem anderen Zeitpunkt ebenfalls den Wert 10.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 2&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Dem RangeValue werden zwei Werte zugewiesen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(0, 1000, 20);&lt;br /&gt;
&amp;lt;/code&amp;gt;  &lt;br /&gt;
Der RangeValue hat weiterhin nur eine beschränkende Kurve. Doch sie ist keine Konstante mehr: Zum Zeitpunkt 0 liefert sie den Wert 0, zum Zeitpunkt 1000 und höher den Wert 20. Die Werte zwischen 0 und 1000 werden interpoliert. Zum Zeitpunkt 500 könnte der RangeValue also 15 liefern. So lassen sich beliebige Kurven konstruieren.&lt;br /&gt;
&lt;br /&gt;
Der RangeValue kann aber eben auch Bereichsangaben haben. Gibt man jetzt Werte für zwei beschränkende Kurven an, erhält man einen Bereich. Der RangeValue liefert nun einen zufälligen Wert zwischen den Werten der beiden Schranken (andere Fälle: siehe Wichtung bei [[IParticleRangeValue]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 3&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
RangeValue mit Bereichsangeben:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(1, 0, 100);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Der RangeValue erhält hier zwei beschränkende Kurven. Beide Kurven sind Konstanten, in dem Fall mit den Werten 10 und 100. Der RangeValue wird also als Wert zu jedem beliebigen Zeitpunkt einen zufälligen Wert zwischen 10 und 100 ausgeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 4&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Nichtkonstante Schranken:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(1, 0, 100);&lt;br /&gt;
  RangeValue.SetValue(0, 1000, 20);&lt;br /&gt;
  RangeValue.SetValue(1, 500, 50);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Der RangeValue hat nun zwei nichtkonstante Kurven als Schranken erhalten. Er wird beim Zeitpunkt 500 also beide Kurvenwerte interpolieren. Die Kurve 0 hat zum Zeitpunkt 500 den Wert 15. Die Kurve 1 hat zum Zeitpunkt 500 den Wert 50. Demnach liefert der RangeValue zum Zeitpunkt 500 einen zufälligen Wert zwischen 15 und 50. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1158</id>
		<title>IParticleRangeValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1158"/>
		<updated>2014-06-23T15:42:31Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;IParticleRangeValue&amp;#039;&amp;#039;&amp;#039; ist eine Ableitung von [[IRangeValue]]. Die &amp;#039;&amp;#039;Bereichswerte&amp;#039;&amp;#039; (engl. RangeValue) geben die Möglichkeit, dass Objekte nicht einen fixen Wert zugewiesen bekommen, sondern Werte innerhalb eines bestimmten Bereiches annehmen. Genaueres [[IRangeValue|hier]].&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden zwischen &amp;quot;einfachen&amp;quot; RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleRangeValue&amp;#039;&amp;#039;&amp;#039;) und dreidimensionalen RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleVectorRangeValue&amp;#039;&amp;#039;&amp;#039;). Die dreidimensionalen RangeValues können also Werte in allen Richtungen des Raumes annehmen und verfügen daher über mehr Getter und Setter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticleRangeValue&amp;#039;&amp;#039;&amp;#039; inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValue (const Time: Double): Double;&lt;br /&gt;
    procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  IParticleRangeValue &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValueX (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueX (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueY (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueY (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueZ (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure SetValueXYZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe [[IRangeValue|hier]]. SetValueXYZ gibt allen Dimensionen den gleichen Wert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wert zum Zeitpunkt Time ausgeben, analog zum Setter.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetValue (const Time: Double): Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Alle Werte löschen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Clear;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Maximaler Zeitpunkt, der einen Wert bekommen hat&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property MaxTime: Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zeitmodus ausgeben: Eingebene Werte werden entweder als absolute Zeitpunkt in Millisekunden interpretiertoder als relative Werte in Prozent bzgl. MaxTime.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property TimeMode: [[TTimeMode]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Werte von anderem IParticleRangeValue übernehmen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IRangeValue&amp;diff=1157</id>
		<title>IRangeValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IRangeValue&amp;diff=1157"/>
		<updated>2014-06-23T15:41:55Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „&amp;#039;&amp;#039;&amp;#039;IRangeValue&amp;#039;&amp;#039;&amp;#039; ist ein Datentyp, der es ermöglicht, einen Wertebereich anzugeben, anstelle eines konkreten Wertes. Dieser Wertebereich wird über zwei begr…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;IRangeValue&amp;#039;&amp;#039;&amp;#039; ist ein Datentyp, der es ermöglicht, einen Wertebereich anzugeben, anstelle eines konkreten Wertes. Dieser Wertebereich wird über zwei begrenzende Kurven definiert. Die Kurven geben Werte zu einem bestimmten Zeitpunkt an. Ist nur eine Kurve definiert, gibt der RangeValue die Werte dieser Kurve zu einem bestimmten Zeitpunkt aus. Sind zwei Kurven definiert, gibt der RangeValue einen zufälligen Wert zwischen den Werten der beiden Kurven zum gegebenen Zeitpunkt aus. Siehe [[#Beispiele|Beispiele]]. Möglich ist auch, dass anstelle eines Zufallswertes eine Wichtung genommen wird, siehe [[IParticleRangeValue]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    function GetValue (const Time: Double): Double;&lt;br /&gt;
    procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
&lt;br /&gt;
    procedure Assign(const Other: IScripting_IRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe [[IRangeValue|hier]]. SetValueXYZ gibt allen Dimensionen den gleichen Wert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wert zum Zeitpunkt Time ausgeben, analog zum Setter.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetValue (const Time: Double): Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Alle Werte löschen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Clear;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Werte von anderem IParticleRangeValue übernehmen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiele =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 1&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Ein RangeValue soll eine konstante Funktion werden. Dann wird ausschließlich nur die erste Kurve mit Werten gefüllt:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10); //Parameter: KurvenIndex, Zeitpunkt, Wert&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Dieser Code sagt, dass die beschränkende Kurve 0 zum Zeitpunkt 0 den Wert 10 erhält. Aufgrund der Interpolation hat die Kurve zu jedem anderen Zeitpunkt ebenfalls den Wert 10.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 2&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Dem RangeValue werden zwei Werte zugewiesen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(0, 1000, 20);&lt;br /&gt;
&amp;lt;/code&amp;gt;  &lt;br /&gt;
Der RangeValue hat weiterhin nur eine beschränkende Kurve. Doch sie ist keine Konstante mehr: Zum Zeitpunkt 0 liefert sie den Wert 0, zum Zeitpunkt 1000 und höher den Wert 20. Die Werte zwischen 0 und 1000 werden interpoliert. Zum Zeitpunkt 500 könnte der RangeValue also 15 liefern. So lassen sich beliebige Kurven konstruieren.&lt;br /&gt;
&lt;br /&gt;
Der RangeValue kann aber eben auch Bereichsangaben haben. Gibt man jetzt Werte für zwei beschränkende Kurven an, erhält man einen Bereich. Der RangeValue liefert nun einen zufälligen Wert zwischen den Werten der beiden Schranken (andere Fälle: siehe Wichtung bei [[IParticleRangeValue]]).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 3&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
RangeValue mit Bereichsangeben:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(1, 0, 100);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Der RangeValue erhält hier zwei beschränkende Kurven. Beide Kurven sind Konstanten, in dem Fall mit den Werten 10 und 100. Der RangeValue wird also als Wert zu jedem beliebigen Zeitpunkt einen zufälligen Wert zwischen 10 und 100 ausgeben.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel 4&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
Nichtkonstante Schranken:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  RangeValue.SetValue(0, 0, 10);&lt;br /&gt;
  RangeValue.SetValue(1, 0, 100);&lt;br /&gt;
  RangeValue.SetValue(0, 1000, 20);&lt;br /&gt;
  RangeValue.SetValue(1, 500, 50);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Der RangeValue hat nun zwei nichtkonstante Kurven als Schranken erhalten. Er wird beim Zeitpunkt 500 also beide Kurvenwerte interpolieren. Die Kurve 0 hat zum Zeitpunkt 500 den Wert 15. Die Kurve 1 hat zum Zeitpunkt 500 den Wert 50. Demnach liefert der RangeValue zum Zeitpunkt 500 einen zufälligen Wert zwischen 15 und 50. &lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1156</id>
		<title>IParticleRangeValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1156"/>
		<updated>2014-06-23T15:16:22Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;IParticleRangeValue&amp;#039;&amp;#039;&amp;#039; ist eine Ableitung von [[IRangeValue]]. Die &amp;#039;&amp;#039;Bereichswerte&amp;#039;&amp;#039; (engl. RangeValue) geben die Möglichkeit, dass Objekte nicht einen fixen Wert zugewiesen bekommen, sondern Werte innerhalb eines bestimmten Bereiches annehmen. Genaueres [[IRangeValue|hier]].&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden zwischen &amp;quot;einfachen&amp;quot; RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleRangeValue&amp;#039;&amp;#039;&amp;#039;) und dreidimensionalen RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleVectorRangeValue&amp;#039;&amp;#039;&amp;#039;). Die dreidimensionalen RangeValues können also Werte in allen Richtungen des Raumes annehmen und verfügen daher über mehr Getter und Setter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticleRangeValue&amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValue (const Time: Double): Double;&lt;br /&gt;
    procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  IParticleRangeValue &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValueX (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueX (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueY (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueY (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueZ (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure SetValueXYZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe [[IRangeValue|hier]]. SetValueXYZ gibt allen Dimensionen den gleichen Wert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wert zum Zeitpunkt Time ausgeben, analog zum Setter.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetValue (const Time: Double): Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Alle Werte löschen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Clear;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Maximaler Zeitpunkt, der einen Wert bekommen hat&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property MaxTime: Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zeitmodus ausgeben: Eingebene Werte werden entweder als absolute Zeitpunkt in Millisekunden interpretiertoder als relative Werte in Prozent bzgl. MaxTime.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property TimeMode: [[TTimeMode]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Werte von anderem IParticleRangeValue übernehmen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TTimeMode&amp;diff=1155</id>
		<title>TTimeMode</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TTimeMode&amp;diff=1155"/>
		<updated>2014-06-23T15:13:58Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;TimeMode&amp;#039;&amp;#039; des [[IParticleRangeValue]]. TimeMode gibt an, wie die angegebenen Zeitwert der Nicht-Initialwerte bei GetValue-Abfragen zu interpretieren sind. Man kann den RangeValue also sowohl nach dem Wert bei 50ms als auch bei 50% zwischen 0 und MaxTime fragen.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;tmAbsolute&amp;#039;&amp;#039;&amp;#039;: Zeitangaben sind absolute Werte in Millisekunden&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;tmRelative&amp;#039;&amp;#039;&amp;#039;: Zeitangaben sind relative Werte in Prozent. 0% ist 0ms, 100% der MaxTime-Wert des RangeValues, also der letzte modifizierte Zeitwert&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TTimeMode&amp;diff=1154</id>
		<title>TTimeMode</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TTimeMode&amp;diff=1154"/>
		<updated>2014-06-23T15:06:44Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Aufzählungstyp für Methode &amp;#039;&amp;#039;TimeMode&amp;#039;&amp;#039; des IParticleRangeValue. TimeMode gibt an, wie die angegebenen Zeitwert zu interpretieren sind.  = Werte = * &amp;#039;&amp;#039;&amp;#039;t…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;TimeMode&amp;#039;&amp;#039; des [[IParticleRangeValue]]. TimeMode gibt an, wie die angegebenen Zeitwert zu interpretieren sind.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;tmAbsolute&amp;#039;&amp;#039;&amp;#039;: Zeitangaben sind absolute Werte in Millisekunden&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;tmRelative&amp;#039;&amp;#039;&amp;#039;: Zeitangaben sind relative Werte in Prozent. 0% ist 0ms, 100% der Max&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmCircle&amp;#039;&amp;#039;&amp;#039;: Kreisbewegungen in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomX&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXY&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXYZ&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in alle Richtungen&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1153</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1153"/>
		<updated>2014-06-23T15:03:23Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zufallswert (&amp;#039;&amp;#039;Seed&amp;#039;&amp;#039;), um wiederholbare Zufälle zu generieren. Ist der Wert = 0 werden alle Zufälle in den [[IParticleRangeValue|RangeValues]] wirklich zufällig berechnet, also immer ein eigener Seed generiert. Ansonsten wird der gegebene Seed verwendet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Seed: Int64;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleEnvironment&amp;diff=1152</id>
		<title>TParticleEnvironment</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleEnvironment&amp;diff=1152"/>
		<updated>2014-06-23T15:00:11Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Aufzählungstyp für Methode &amp;#039;&amp;#039;Environment&amp;#039;&amp;#039; des Partikelobjekts. Environment gibt an, ob die Partikel lokal im Partikelsystem-Objekt existi…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Environment&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Environment gibt an, ob die Partikel lokal im Partikelsystem-Objekt existieren, oder sich auch außerhalb bewegen können.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;: Partikel leben innerhalb des Partikelobjekts. Sie skalieren mit, sie werden mitverschoben und rotiert und sterben, wenn sie die Partikelobjekt-Bounds verlassen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;: Partikelobjekt gibt die Emitterbounds an. Einmal emittiert sind die Partikel vom Partikelobjekt unabhängig, solange dieses angezeigt wird. Bei Skalierung oder Verschiebung werden Partikel nicht beeinflusst. Es sei denn, besondere [[TParticleOptions|entsprechende Optionen]] wurden gesetzt.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Flexicollage&amp;diff=1151</id>
		<title>Flexicollage</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Flexicollage&amp;diff=1151"/>
		<updated>2014-06-23T14:55:50Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Flexicollage ist vom Typ &amp;#039;&amp;#039;&amp;#039;ITransformation&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Es fungiert als visueller Container für andere [[ISlideShowObject|SlideShowObjects]]. Diese können ohne Einschränkungen angeordnet werden. Die Flexicollage kann im Gegensatz zum [[Kapitelobjekt]] eigene Bewegungspfade und Überblendungen haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IChapter &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function GetCaption: string;&lt;br /&gt;
    procedure SetCaption (const Value: string);&lt;br /&gt;
&lt;br /&gt;
    procedure SetFillBackground(const fillBG: [[TFillbackgroundMode]]);&lt;br /&gt;
    function GetFillBackground: [[TFillbackgroundMode]];&lt;br /&gt;
&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
    function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
&lt;br /&gt;
    property Caption: string read GetCaption write SetCaption;&lt;br /&gt;
    property FillBackground: [[TFillbackgroundMode]] read GetFillBackground write SetFillBackground;&lt;br /&gt;
    property Count: Integer read GetCount;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreateTransformation: ITransformation&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Namen der Flexicollage&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCaption: string;&lt;br /&gt;
  procedure SetCaption (const Value: string);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Hintergrundfüllung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetFillBackground(const fillBG: [[TFillbackgroundMode]]);&lt;br /&gt;
  function GetFillBackground: [[TFillbackgroundMode]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Kindobjekte&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Kindelemente&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1150</id>
		<title>TParticleOptions</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1150"/>
		<updated>2014-06-23T14:55:32Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set vom Aufzählungstyp &amp;#039;&amp;#039;&amp;#039;TParticleOption&amp;#039;&amp;#039;&amp;#039; für Methode &amp;#039;&amp;#039;Options&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Options kann generell alle möglichen Schalter für das Partikelsystem haben.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterDirection&amp;#039;&amp;#039;&amp;#039;: Partikel in Bewegungsrichtung des Emitters drehen. Partikelrotation bleibt unbeeinflusst.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterRotation&amp;#039;&amp;#039;&amp;#039;: Partikel erben den Rotationswinkel des Emitters. Bewegungsrichtung der Partikel bleibt unbeeinflusst.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterSize&amp;#039;&amp;#039;&amp;#039;: Partikel skalieren mit dem Emitter mit&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poRotateParticleInDirection&amp;#039;&amp;#039;&amp;#039;: Partikel drehen sich in Bewegungsrichtung des Emitters&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poBlendSprites&amp;#039;&amp;#039;&amp;#039;: Partikelanimation ist normal ein einfacher Wechsel der Bilder. Mit dieser Option werden die Einzelbilder per Alphablending ineinander übergeblendet.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1149</id>
		<title>TParticleEmitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1149"/>
		<updated>2014-06-23T14:55:16Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Emitter&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Emitter gibt den Emittertypen des Partikelobjekts an.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectEdge&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig an den Kanten des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectArea&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig innerhalb des Boundsrect des Partikelsystems emittiert. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPoint&amp;#039;&amp;#039;&amp;#039;: Partikel werden im Mittelpunkt des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPath&amp;#039;&amp;#039;&amp;#039;: Dem Partikelsystem wird ein Bewegungspfad gegeben. Die Partikel werden dann auf dem Pfad emittiert. Dadurch kann sich der Emitter aber nicht bewegen, da der Bewegungspfad für das Emittieren zuständig ist. Abhilfe schafft hier, indem man das Partikelsystem in eine Flexicollage ([[ITransformation]]) legt und diese mit einem Bewegungspfad versieht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleSpriteAnimation&amp;diff=1148</id>
		<title>TParticleSpriteAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleSpriteAnimation&amp;diff=1148"/>
		<updated>2014-06-23T14:55:08Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;SpriteAnimation&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. SpriteAnimation gibt an, wie eine Liste von Bildern des Partikelsystems behandelt werden bzw. ob und wie Partikel animiert werden können.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaNone&amp;#039;&amp;#039;&amp;#039;: Keine Partikelanimation. Partikel erhalten beim Emittieren zufällig ein Bild der Liste und ändern es nicht.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaRandom&amp;#039;&amp;#039;&amp;#039;: Partikel ändern je nach Animationsgeschwindigkeit zufällig ihr Bild&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaSequential&amp;#039;&amp;#039;&amp;#039;: Partikel ändern je nach Animationsgeschwindigkeit ihr Bild. Dabei wird die angebenene Liste durchiteriert. Nach dem letzten Bild wird die Liste wiederholt.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaSequentialMirror&amp;#039;&amp;#039;&amp;#039;: Partikel ändern je nach Animationsgeschwindigkeit ihr Bild. Dabei wird die angebenene Liste durchiteriert. Nach dem letzten Bild wird die Liste rückwärts durchgegangen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1147</id>
		<title>TParticleMove</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1147"/>
		<updated>2014-06-23T14:54:58Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Move&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Move gibt die Bewegungsart an, die Partikel zusätzlich zur eigentlichen Bewegungsrichtung des Partikels ausführen.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmNone&amp;#039;&amp;#039;&amp;#039;: Keine zusätzliche Bewegung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmSinus&amp;#039;&amp;#039;&amp;#039;: Sinusbewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmCircle&amp;#039;&amp;#039;&amp;#039;: Kreisbewegungen in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomX&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXY&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXYZ&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in alle Richtungen&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1146</id>
		<title>IParticleRangeValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1146"/>
		<updated>2014-06-23T14:54:49Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IParticleRangeValue ist eine Ableitung von [[IRangeValue]]. Die &amp;#039;&amp;#039;Bereichswerte&amp;#039;&amp;#039; (engl. RangeValue) geben die Möglichkeit, dass Objekte nicht einen fixen Wert zugewiesen bekommen, sondern Werte innerhalb eines bestimmten Bereiches annehmen. Genaueres [[IRangeValue|hier]].&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden zwischen &amp;quot;einfachen&amp;quot; RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleRangeValue&amp;#039;&amp;#039;&amp;#039;) und dreidimensionalen RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleVectorRangeValue&amp;#039;&amp;#039;&amp;#039;). Die dreidimensionalen RangeValues können also Werte in allen Richtungen des Raumes annehmen und verfügen daher über mehr Getter und Setter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticleRangeValue&amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValue (const Time: Double): Double;&lt;br /&gt;
    procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  IParticleRangeValue &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValueX (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueX (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueY (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueY (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueZ (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure SetValueXYZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe [[IRangeValue|hier]]. SetValueXYZ gibt allen Dimensionen den gleichen Wert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wert zum Zeitpunkt Time ausgeben, analog zum Setter.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetValue (const Time: Double): Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Alle Werte löschen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Clear;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Maximaler Zeitpunkt, der einen Wert bekommen hat&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property MaxTime: Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zeitmodus ausgeben: Eingebene Werte werden entweder als absolute Zeitpunkt in Millisekunden interpretiertoder als relative Werte in Prozent bzgl. MaxTime.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property TimeMode: [[TTimeMode]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Werte von anderem IParticleRangeValue übernehmen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1145</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1145"/>
		<updated>2014-06-23T14:54:40Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleOption&amp;diff=1144</id>
		<title>TParticleOption</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleOption&amp;diff=1144"/>
		<updated>2014-06-23T14:54:05Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[TParticleOptions]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleOption&amp;diff=1143</id>
		<title>TParticleOption</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleOption&amp;diff=1143"/>
		<updated>2014-06-23T14:53:25Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Weiterleitung nach TParticleOptions erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[TParticleOptions]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1142</id>
		<title>TParticleOptions</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleOptions&amp;diff=1142"/>
		<updated>2014-06-23T14:52:21Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Set vom Aufzählungstyp &amp;#039;&amp;#039;&amp;#039;TParticleOption&amp;#039;&amp;#039;&amp;#039; für Methode &amp;#039;&amp;#039;Options&amp;#039;&amp;#039; des Partikelobjekts. Options kann generell alle möglichen Schalter f…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Set vom Aufzählungstyp &amp;#039;&amp;#039;&amp;#039;TParticleOption&amp;#039;&amp;#039;&amp;#039; für Methode &amp;#039;&amp;#039;Options&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Options kann generell alle möglichen Schalter für das Partikelsystem haben.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterDirection&amp;#039;&amp;#039;&amp;#039;: Partikel in Bewegungsrichtung des Emitters drehen. Partikelrotation bleibt unbeeinflusst.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterRotation&amp;#039;&amp;#039;&amp;#039;: Partikel erben den Rotationswinkel des Emitters. Bewegungsrichtung der Partikel bleibt unbeeinflusst.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poInheritEmitterSize&amp;#039;&amp;#039;&amp;#039;: Partikel skalieren mit dem Emitter mit&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poRotateParticleInDirection&amp;#039;&amp;#039;&amp;#039;: Partikel drehen sich in Bewegungsrichtung des Emitters&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;poBlendSprites&amp;#039;&amp;#039;&amp;#039;: Partikelanimation ist normal ein einfacher Wechsel der Bilder. Mit dieser Option werden die Einzelbilder per Alphablending ineinander übergeblendet.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1141</id>
		<title>TParticleMove</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1141"/>
		<updated>2014-06-23T14:46:00Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Move&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Move gibt die Bewegungsart an, die Partikel zusätzlich zur eigentlichen Bewegungsrichtung des Partikels ausführen.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmNone&amp;#039;&amp;#039;&amp;#039;: Keine zusätzliche Bewegung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmSinus&amp;#039;&amp;#039;&amp;#039;: Sinusbewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmCircle&amp;#039;&amp;#039;&amp;#039;: Kreisbewegungen in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomX&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXY&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXYZ&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in alle Richtungen&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikel&amp;diff=1140</id>
		<title>Partikel</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikel&amp;diff=1140"/>
		<updated>2014-06-23T14:43:12Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Weiterleitung nach Partikelobjekt erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Partikelobjekt]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Flexicollage&amp;diff=1139</id>
		<title>Flexicollage</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Flexicollage&amp;diff=1139"/>
		<updated>2014-06-23T14:42:21Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Die Flexicollage ist vom Typ &amp;#039;&amp;#039;&amp;#039;ITransformation&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;ISlideShowObject&amp;#039;&amp;#039;&amp;#039; ab. Es fungiert als visueller Container für andere [[ISlideShowOb…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Flexicollage ist vom Typ &amp;#039;&amp;#039;&amp;#039;ITransformation&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Es fungiert als visueller Container für andere [[ISlideShowObject|SlideShowObjects]]. Diese können ohne Einschränkungen angeordnet werden. Die Flexicollage kann im Gegensatz zum [[Kapitelobjekt]] eigene Bewegungspfade und Überblendungen haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IChapter &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function GetCaption: string;&lt;br /&gt;
    procedure SetCaption (const Value: string);&lt;br /&gt;
&lt;br /&gt;
    procedure SetFillBackground(const fillBG: [[TFillbackgroundMode]]);&lt;br /&gt;
    function GetFillBackground: [[TFillbackgroundMode]];&lt;br /&gt;
&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
    function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
&lt;br /&gt;
    property Caption: string read GetCaption write SetCaption;&lt;br /&gt;
    property FillBackground: [[TFillbackgroundMode]] read GetFillBackground write SetFillBackground;&lt;br /&gt;
    property Count: Integer read GetCount;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreateTransformation: ITransformation&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Namen der Flexicollage&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCaption: string;&lt;br /&gt;
  procedure SetCaption (const Value: string);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Hintergrundfüllung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetFillBackground(const fillBG: [[TFillbackgroundMode]]);&lt;br /&gt;
  function GetFillBackground: [[TFillbackgroundMode]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Kindobjekte&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Kindelemente&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ITransformation&amp;diff=1138</id>
		<title>ITransformation</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ITransformation&amp;diff=1138"/>
		<updated>2014-06-23T14:42:17Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Weiterleitung nach Flexicollage erstellt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Flexicollage]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Language]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TFillbackgroundMode&amp;diff=1137</id>
		<title>TFillbackgroundMode</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TFillbackgroundMode&amp;diff=1137"/>
		<updated>2014-06-23T14:41:18Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Aufzählungstyp für Methode &amp;#039;&amp;#039;FillBackground&amp;#039;&amp;#039; der Flexicollage. FillBackground gibt an, ob der Hintergrund der Flexicollage gefüllt werden soll oder nic…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;FillBackground&amp;#039;&amp;#039; der [[Flexicollage]]. FillBackground gibt an, ob der Hintergrund der Flexicollage gefüllt werden soll oder nicht.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;fbOff&amp;#039;&amp;#039;&amp;#039;: Keine Füllung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;fbOn&amp;#039;&amp;#039;&amp;#039;: Hintergrund füllen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;fbAuto&amp;#039;&amp;#039;&amp;#039;: Automatische Entscheidung ob Füllung oder nicht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=ITransformation&amp;diff=1136</id>
		<title>ITransformation</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=ITransformation&amp;diff=1136"/>
		<updated>2014-06-23T14:39:21Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Die Flexicollage ist vom Typ &amp;#039;&amp;#039;&amp;#039;ITransformation&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;ISlideShowObject&amp;#039;&amp;#039;&amp;#039; ab. Es fungiert als visueller Container für andere [[ISlideShowOb…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Flexicollage ist vom Typ &amp;#039;&amp;#039;&amp;#039;ITransformation&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Es fungiert als visueller Container für andere [[ISlideShowObject|SlideShowObjects]]. Diese können ohne Einschränkungen angeordnet werden. Die Flexicollage kann im Gegensatz zum [[Kapitelobjekt]] eigene Bewegungspfade und Überblendungen haben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IChapter &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function GetCaption: string;&lt;br /&gt;
    procedure SetCaption (const Value: string);&lt;br /&gt;
&lt;br /&gt;
    procedure SetFillBackground(const fillBG: [[TFillbackgroundMode]]);&lt;br /&gt;
    function GetFillBackground: [[TFillbackgroundMode]];&lt;br /&gt;
&lt;br /&gt;
    procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
    function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
    function GetCount: Integer;&lt;br /&gt;
&lt;br /&gt;
    property Caption: string read GetCaption write SetCaption;&lt;br /&gt;
    property FillBackground: [[TFillbackgroundMode]] read GetFillBackground write SetFillBackground;&lt;br /&gt;
    property Count: Integer read GetCount;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
* Objekt Erzeugung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function CreateTransformation: ITransformation&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Namen der Flexicollage&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCaption: string;&lt;br /&gt;
  procedure SetCaption (const Value: string);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Hintergrundfüllung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetFillBackground(const fillBG: [[TFillbackgroundMode]]);&lt;br /&gt;
  function GetFillBackground: [[TFillbackgroundMode]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Getter und Setter für Kindobjekte&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetItem(Index: Integer; Item: ISlideShowObject);&lt;br /&gt;
  function GetItem(Index: Integer): ISlideShowObject;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Anzahl der Kindelemente&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetCount: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1135</id>
		<title>TParticleEmitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1135"/>
		<updated>2014-06-23T14:33:26Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Emitter&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Emitter gibt den Emittertypen des Partikelobjekts an.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectEdge&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig an den Kanten des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectArea&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig innerhalb des Boundsrect des Partikelsystems emittiert. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPoint&amp;#039;&amp;#039;&amp;#039;: Partikel werden im Mittelpunkt des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPath&amp;#039;&amp;#039;&amp;#039;: Dem Partikelsystem wird ein Bewegungspfad gegeben. Die Partikel werden dann auf dem Pfad emittiert. Dadurch kann sich der Emitter aber nicht bewegen, da der Bewegungspfad für das Emittieren zuständig ist. Abhilfe schafft hier, indem man das Partikelsystem in eine Flexicollage ([[ITransformation]]) legt und diese mit einem Bewegungspfad versieht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1134</id>
		<title>TParticleEmitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1134"/>
		<updated>2014-06-23T14:32:54Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Emitter&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Emitter gibt den Emittertypen des Partikelobjekts an.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectEdge&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig an den Kanten des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectArea&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig innerhalb des Boundsrect des Partikelsystems emittiert. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPoint&amp;#039;&amp;#039;&amp;#039;: Partikel werden im Mittelpunkt des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPath&amp;#039;&amp;#039;&amp;#039;: Dem Partikelsystem wird ein Bewegungspfad gegeben. Die Partikel werden dann auf dem Pfad emittiert. Dadurch kann sich der Emitter aber nicht bewegen, da der Bewegungspfad für das Emittieren zuständig ist. Abhilfe schafft hier, indem man das Partikelsystem in eine Flexicollage ([[ITransformableContainer]]) legt und diese mit einem Bewegungspfad versieht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1133</id>
		<title>TParticleEmitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleEmitter&amp;diff=1133"/>
		<updated>2014-06-23T14:32:41Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Aufzählungstyp für Methode &amp;#039;&amp;#039;Emitter&amp;#039;&amp;#039; des Partikelobjekts. Emitter gibt den Emittertypen des Partikelobjekts an.  = Werte = * &amp;#039;&amp;#039;&amp;#039;pemRectE…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Emitter&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Emitter gibt den Emittertypen des Partikelobjekts an.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectEdge&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig an den Kanten des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemRectArea&amp;#039;&amp;#039;&amp;#039;: Partikel werden zufällig innerhalb des Boundsrect des Partikelsystems emittiert. &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPoint&amp;#039;&amp;#039;&amp;#039;: Partikel werden im Mittelpunkt des Boundsrect des Partikelsystems emittiert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pemPath&amp;#039;&amp;#039;&amp;#039;: Dem Partikelsystem wird ein Bewegungspfad gegeben. Die Partikel werden dann auf dem Pfad emittiert. Dadurch kann sich der Emitter aber nicht bewegen, da der Bewegungspfad für das Emittieren zuständig ist. Abhilfe schafft hier, indem man das Partikelsystem in eine Flexicollage ([[ITransformable]]) legt und diese mit einem Bewegungspfad versieht.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1132</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1132"/>
		<updated>2014-06-23T14:24:49Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialOpacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function Opacity: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeltransparenz&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialOpacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Transparenzänderung über die Zeit: Prozent der Initialtransparenz.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Opacity: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleSpriteAnimation&amp;diff=1131</id>
		<title>TParticleSpriteAnimation</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleSpriteAnimation&amp;diff=1131"/>
		<updated>2014-06-23T14:22:57Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Aufzählungstyp für Methode &amp;#039;&amp;#039;SpriteAnimation&amp;#039;&amp;#039; des Partikelobjekts. SpriteAnimation gibt an, wie eine Liste von Bildern des Partikelsystem…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;SpriteAnimation&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. SpriteAnimation gibt an, wie eine Liste von Bildern des Partikelsystems behandelt werden bzw. ob und wie Partikel animiert werden können.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaNone&amp;#039;&amp;#039;&amp;#039;: Keine Partikelanimation. Partikel erhalten beim Emittieren zufällig ein Bild der Liste und ändern es nicht.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaRandom&amp;#039;&amp;#039;&amp;#039;: Partikel ändern je nach Animationsgeschwindigkeit zufällig ihr Bild&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaSequential&amp;#039;&amp;#039;&amp;#039;: Partikel ändern je nach Animationsgeschwindigkeit ihr Bild. Dabei wird die angebenene Liste durchiteriert. Nach dem letzten Bild wird die Liste wiederholt.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;psaSequentialMirror&amp;#039;&amp;#039;&amp;#039;: Partikel ändern je nach Animationsgeschwindigkeit ihr Bild. Dabei wird die angebenene Liste durchiteriert. Nach dem letzten Bild wird die Liste rückwärts durchgegangen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1130</id>
		<title>TParticleMove</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=TParticleMove&amp;diff=1130"/>
		<updated>2014-06-23T14:17:35Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: Die Seite wurde neu angelegt: „Aufzählungstyp für Methode &amp;#039;&amp;#039;Move&amp;#039;&amp;#039; des Partikelobjekts. Move gibt die Bewegungsart an, die Partikel zusätzlich zur eigentlichen Bewegung…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Aufzählungstyp für Methode &amp;#039;&amp;#039;Move&amp;#039;&amp;#039; des [[Partikelobjekt|Partikelobjekts]]. Move gibt die Bewegungsart an, die Partikel zusätzlich zur eigentlichen Bewegungsrichtung des Partikels ausführen.&lt;br /&gt;
&lt;br /&gt;
= Werte =&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmNone&amp;#039;&amp;#039;&amp;#039;: Keine zusätzliche Bewegung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmSinus&amp;#039;&amp;#039;&amp;#039;: Sinusbewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmCircle&amp;#039;&amp;#039;&amp;#039;: Kreisbewegungen in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomX&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung senkrecht zur XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXY&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in XY-Richtung&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmRandomXYZ&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in alle Richtungen&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pmGravity&amp;#039;&amp;#039;&amp;#039;: Zufällige Bewegung in XY-Richtung ausgelöst durch Gravitation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1129</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1129"/>
		<updated>2014-06-23T14:11:32Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen geben beispielsweise an, wie sich die Partikel bei Drehung des Partikelsystems verhalten oder ob die Animationen abrupt oder durch Alphablending ablaufen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1128</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1128"/>
		<updated>2014-06-23T14:09:52Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
== Partikel ==&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emitter ==&lt;br /&gt;
&lt;br /&gt;
* Emitter-Typ:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Emitter: [[TParticleEmitter]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Rand am Emitter: Wenn der Emitter vom Typ &amp;#039;&amp;#039;pePoint&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;pePath&amp;#039;&amp;#039; ist, kann er einen Abstand erhalten: Beim Punkt-Emitter werden die Partikel in einem Kreis mit angebenen Abstand emittiert, beim Pfad-Emitter werden die Partikel sowohl oberhalb als auch unterhalb davon abgebildet.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Flächen, an denen nicht emittiert werden soll: Der Emitter hält eine Liste von gedrehten Rechtecken, an denen nicht emittiert werden darf.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure AddEmitterClipRect(const X, Y, Width, Height, AngleZ: Single; const Invert: Boolean);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Optionen ==&lt;br /&gt;
&lt;br /&gt;
* Partikel-Umgebung: Gibt an, ob die Bounds vom Partikelsystem nur als Positionierung der Partikel beim Emittieren dienen (&amp;#039;&amp;#039;&amp;#039;peGlobal&amp;#039;&amp;#039;&amp;#039;), oder ob das Partikelsystem Einfluss auf die Partikel hat, die Partikel also mitskalieren und sich mitdrehen, etc. (&amp;#039;&amp;#039;&amp;#039;peLocal&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Environment: [[TParticleEnvironment]]  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeloptionen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Options: [[TParticleOptions]]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1127</id>
		<title>Partikelobjekt</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=Partikelobjekt&amp;diff=1127"/>
		<updated>2014-06-23T12:44:22Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Partikelobjekt ist vom Typ &amp;#039;&amp;#039;&amp;#039;IParticle&amp;#039;&amp;#039;&amp;#039; und leitet von &amp;#039;&amp;#039;&amp;#039;[[ISlideShowObject]]&amp;#039;&amp;#039;&amp;#039; ab. Mit diesem Objekt kann man Partikeleffekte erstellen.&lt;br /&gt;
&lt;br /&gt;
Das Partikelobjekt enthält unter anderem Eigenschaften des Typs [[IParticleRangeValue]] bzw. [[IParticleRangeValue|IParticleVectorRangeValue]]. Einige dieser Eigenschaften verfügen über Initialwerte (wie &amp;#039;&amp;#039;Size&amp;#039;&amp;#039; und &amp;#039;&amp;#039;InitialSize&amp;#039;&amp;#039;). Die Initialwerte geben den Ausgangszustand des Wertes an, die Nicht-Initialwerte geben eine Änderung an. Die Initialwerte bekommen einen Wertebereich. Beim Emittieren eines Partikels wird dem neuen Partikel ein zufälliger Werte innerhalb dieses Bereichs zugewiesen. Initialwerte können sich über die Dauer des Partikelsystems ändern. Die Änderungswerte erhalten ebenfalls einen Bereich. Der Unterschied ist, dass bei ihnen vorher eine Wichtung ermittelt wird. Diese wird benutzt um die Änderungen über die Lebenszeit des Partikels immer gleich gewichtet zu haben (siehe [[#Beispiel|Beispiel]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticle &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[ISlideShowObject]]&lt;br /&gt;
    function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialSpeed: [[IParticleRangeValue]]  &lt;br /&gt;
    function Speed: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialSize: [[IParticleRangeValue]] &lt;br /&gt;
    function Size: [[IParticleRangeValue]] &lt;br /&gt;
    function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property Move: [[TParticleMove]] &lt;br /&gt;
    function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]] &lt;br /&gt;
    function InitialMoveSineFrequency: [[IParticleRangeValue]] &lt;br /&gt;
    function MoveSineFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    function MaxAge: [[IParticleRangeValue]] &lt;br /&gt;
    function ParticlesPerSecond: [[IParticleRangeValue]] &lt;br /&gt;
&lt;br /&gt;
    property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
    function InitialSpriteAnimationFrequency: [[IParticleRangeValue|IParticleRangeValue]] &lt;br /&gt;
    function SpriteAnimationFrequency: [[IParticleRangeValue]]&lt;br /&gt;
&lt;br /&gt;
    property Filename: [[IFilename]] &lt;br /&gt;
    property Clipping: Boolean &lt;br /&gt;
    property PreWarmTime: Integer &lt;br /&gt;
&lt;br /&gt;
    property Emitter: [[TParticleEmitter]]&lt;br /&gt;
    function EmitterSpread: [[IParticleRangeValue]]&lt;br /&gt;
    property Options: [[TParticleOptions]]&lt;br /&gt;
    property Environment: [[TParticleEnvironment]]&lt;br /&gt;
&lt;br /&gt;
    property Seed: Int64  &lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialDirection: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Richtungsänderung über die Zeit: Addition von Winkeln (zB. bei Initialrichtung von 10 und einer Richtung von 10 bekommt das Partikel die Richtung 20).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Direction: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgeschwindigkeit in Bewegungsrichtung&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpeed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Speed: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelgröße. Skaliert das Partikel ohne Verzerrung so, dass die größte Richtung die Partikelgröße wird (&amp;quot;einpassen&amp;quot;):&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSize: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Größenänderung über die Zeit: Prozent der Initialgröße.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Size: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikeldrehung: Man unterscheidet zwischen der statischen Lage des Partikels und einer beständigen Drehung. Beispielsweise sollen die Partikel beim Emittieren immer zwischen 10 und 20 Grad gedreht sein, die Lage aber behalten. Dafür kommt die Eigenschaft &amp;#039;&amp;#039;&amp;#039;Rotation&amp;#039;&amp;#039;&amp;#039; in Frage (bei einer Rotationsgeschwindigkeit von 0). Ist jedoch eine permanente Drehung gewünscht, nimmt man die &amp;#039;&amp;#039;&amp;#039;Rotationfrequency&amp;#039;&amp;#039;&amp;#039; (Rotationsgeschwindigkeit). Lage und Rotationsgeschwindigkeitschließen sich nicht aus. Positive Werte drehen im Uhrzeigersinn, negative entgegengesetzt.&lt;br /&gt;
* Lage des Partikels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lageänderung über die Zeit. Additiv (zB. 10° bei 0ms und 20° bei 1000ms ergibt in der ersten Sekunde eine Drehung um 10°, danach keine weitere).&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function Rotation: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rotationsgeschwindigkeit: Gibt die Anzahl der Drehungen in einer Sekunde an.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialRotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function RotationFrequency: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelbewegung: Partikel können neben ihrer eigentlichen Bewegungsrichtung auch von ihrer Bewegung abweichen, zum Beispiel schwingen. &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Move: [[TParticleMove]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärke der Abweichgungsbewegung:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Stärkenänderung über die Zeit: Prozent der Initialstärke:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveStrength: [[IParticleRangeValue|IParticleVectorRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Abweichungsfrequenz: Gibt an, wie viele Schwingungen oder Kreisbewegungen in einer Sekunde vollführt werden&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialMoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Frequenzänderung über die Zeit: Prozent der Initialfrequenz:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MoveFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Lebensdauer des Partikels in Millisekunden. 0 heißt, dass das Partikel nie &amp;quot;stirbt&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function MaxAge: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Emittierrate. Gibt an, wie viele Partikel in einer Sekunde emittiert werden.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function ParticlesPerSecond: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelanimation. Sind im Partikelsystem mehrere Bilddateien angegeben, können die Partikel ihr Bild während ihrer Lebenszeit ändern.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property SpriteAnimation: [[TParticleSpriteAnimation]] &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Animationsgeschwindigkeit: Gibt an, wie oft die Liste der Bilder in einem Partikel in einer Sekunde angezeigt wird (zB. es sind 5 Bilder angegeben, die Animationsgeschwindigkeit ist 1, dann wird das Bild des Partikels alle 1/5 Sekunden geändert, also in der einen Sekunde durch die ganze Liste iteriert)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function InitialSpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Geschwindigkeitsänderung über die Zeit: Prozent der Initialgeschwindigkeit.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function SpriteAnimationFrequency: [[IParticleRangeValue]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dateinamen der Partikelbilder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Filename: [[IFilename]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem auf seine Bounds zuschneiden oder alle Partikel, die hinausragen anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property Clipping: Boolean;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Partikelsystem vorsimulieren. Es ist möglich, dass simuliert wird, dass das Partikelsystem bereits eine gewisse Zeit (in Millisekunden) gelaufen war, bevor es wirklich angezeigt wird.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property PreWarmTime: Integer;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Einem Partikelsystem werden folgende [[IParticleRangeValue|RangeValues]] gegeben:&lt;br /&gt;
* InitialSize zwischen 10 und 20.&lt;br /&gt;
* Size zwischen 50 und 100 ab 0ms und 0 und 50 ab 1000ms&lt;br /&gt;
&lt;br /&gt;
Partikel 1 bekommt zufällig eine Größe zwischen 10 und 20, zB. 15. Der Size-Wert modifiziert diesen Initialwert, in dem Fall prozentual. Das heißt das Partikel ist zwischen 50% * 15 und 100% * 15 groß ab Sekunde 0 seiner Lebenszeit. Der genaue Wert wird durch die zufällig gewählte Wichtung ermittelt, sagen wir 50%. Die Wichtung legt also die Mitte des Bereichs fest. Demnach ist die Wichtung 75%, also die Mitte zwischen 50 und 100. Daher hat der Partikel zum Zeitpunkt 0ms (also dem Zeitpunkt seines Emittierens) die Größe 75% * 15 = 11,25.&lt;br /&gt;
Der Size-Wert ändert sich über die Zeit. Allerdings bleibt die Wichtung pro Partikel gleich. Der Size-Wert sagt, dass die Partikel bei Sekunde 1 nur noch zwischen 0 und 50% des Initialwertes groß sind. Durch die Wichtung von 50% ergibt sich ein Size-Wert von 25%, also der Mitte zwischen 0 und 50%. Daher hat das Partikel zum Zeitpunkt 1000ms die Größe 25% * 15 = 3,75.&lt;br /&gt;
&lt;br /&gt;
Für Partikel 2 wird eine neue Initialgröße vergeben (deren Bereich sich über die Zeit natürlich auch verändern kann). Ebenso wird eine neue Wichtung ermittelt, zB. Initialgröße von 12 und einer Wichtung von 100%. Demnach ist das Partikel 2 zum Zeitpunkt 0ms 12 Einheiten groß und nach einer Sekunde nur noch 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  var Particle := SlideShowObject as IParticle;&lt;br /&gt;
  Particle.InitialSize.SetValue(0, 0, 10);&lt;br /&gt;
  Particle.InitialSize.SetValue(1, 0, 20);&lt;br /&gt;
  Particle.Size.SetValue(0, 0, 50);&lt;br /&gt;
  Particle.Size.SetValue(1, 0, 100);&lt;br /&gt;
  Particle.Size.SetValue(0, 1000, 0);&lt;br /&gt;
  Particle.Size.SetValue(1, 1000, 50);  &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
	<entry>
		<id>https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1126</id>
		<title>IParticleRangeValue</title>
		<link rel="alternate" type="text/html" href="https://wiki.aquasoft.de/wiki/index.php?title=IParticleRangeValue&amp;diff=1126"/>
		<updated>2014-06-23T12:44:10Z</updated>

		<summary type="html">&lt;p&gt;Mark.lorenz: /* Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IParticleRangeValue ist eine Ableitung von [[IRangeValue]]. Die &amp;#039;&amp;#039;Bereichswerte&amp;#039;&amp;#039; (engl. RangeValue) geben die Möglichkeit, dass Objekte nicht einen fixen Wert zugewiesen bekommen, sondern Werte innerhalb eines bestimmten Bereiches annehmen. Genaueres [[IRangeValue|hier]].&lt;br /&gt;
&lt;br /&gt;
Es wird unterschieden zwischen &amp;quot;einfachen&amp;quot; RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleRangeValue&amp;#039;&amp;#039;&amp;#039;) und dreidimensionalen RangeValues (&amp;#039;&amp;#039;&amp;#039;IParticleVectorRangeValue&amp;#039;&amp;#039;&amp;#039;). Die dreidimensionalen RangeValues können also Werte in allen Richtungen des Raumes annehmen und verfügen daher über mehr Getter und Setter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  IParticleRangeValue&amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValue (const Time: Double): Double;&lt;br /&gt;
    procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&lt;br /&gt;
  IParticleRangeValue &amp;#039;&amp;#039;&amp;#039;inherits from&amp;#039;&amp;#039;&amp;#039; [[IRangeValue]]&lt;br /&gt;
    function GetValueX (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueX (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueY (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueY (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    function GetValueZ (const Time: Double): Double;&lt;br /&gt;
    procedure SetValueZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure SetValueXYZ (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
    procedure Clear;&lt;br /&gt;
    procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
    property MaxTime: Double read GetMaxTime write SetMaxTime;&lt;br /&gt;
    property TimeMode: [[TTimeMode]] read GetTimeMode write SetTimeMode;&lt;br /&gt;
  end;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Methoden =&lt;br /&gt;
&lt;br /&gt;
* Werte setzen: SetValue bzw. SetValueX, SetValueY, SetValueZ und SetValueXYZ. Für die Parameter siehe [[IRangeValue|hier]]. SetValueXYZ gibt allen Dimensionen den gleichen Wert.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure SetValue (const ItemIndex: Integer; const Time: Double; const Value: Single);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
* Wert zum Zeitpunkt Time ausgeben, analog zum Setter.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  function GetValue (const Time: Double): Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Alle Werte löschen&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Clear;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Maximaler Zeitpunkt, der einen Wert bekommen hat&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property MaxTime: Double;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Zeitmodus ausgeben: Eingebene Werte werden entweder als absolute Zeitpunkt in Millisekunden interpretiertoder als relative Werte in Prozent bzgl. MaxTime.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  property TimeMode: [[TTimeMode]];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Werte von anderem IParticleRangeValue übernehmen:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  procedure Assign(const Other: IParticleVectorRangeValue);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Scripting-API]]&lt;br /&gt;
[[Kategorie:Partikelsystem]]&lt;/div&gt;</summary>
		<author><name>Mark.lorenz</name></author>
	</entry>
</feed>