LlSetTextureAnim/ja
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
要約
関数: llSetTextureAnim( integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate );テクスチャの大きさとオフセットを設定して、指定した面のテクスチャをアニメーションさせます。
• integer | mode | – | モードフラグのマスク | |
• integer | face | – | 面 番号もしくは ALL_SIDES | |
• integer | sizex | – | 横フレーム ( ROTATE とSCALE では無視される) | |
• integer | sizey | – | 縦フレーム ( ROTATE とSCALE では無視される) | |
• float | start | – | 開始位置/フレーム番号 ( ROTATE ではラジアン) | |
• float | length | – | 表示するフレーム数 ( ROTATE ではラジアン) | |
• float | rate | – | 毎秒のフレーム数(0 にすべきではありません) |
start には 負のインデックス を使用できます。
face が ALL_SIDES であれば関数は全ての面に作用します。
フレームは 0 から始まって、左から右、上から下に数えられます。
rate がマイナス域の場合、 REVERSE フラグを使っているのと同じ効果があります。[1]
仕様
インデックス | 正 | 負 |
---|---|---|
先頭 | 0 | -length |
末尾 | length - 1 | -1 |
インデックス
- 正のインデックスは先頭から数えます。先頭の要素は 0、末尾の要素は (length - 1) のインデックスを持ちます。
- 負のインデックスは末尾から数えます。先頭の要素は -length、末尾の要素は -1 のインデックスを持ちます。
フレーム
フレームはテクスチャの中の sub-rectangles です。縦 2 (sizex) 横 3 (sizey) のフレームセットは、テクスチャ全体が 3 行 2 桁 の画像に切り分けられ、それぞれがフレームとなることを意味しています。llSetTextureAnim will animate across these 6 starting with the top left image and going across and down, optionally repeating. SMOOTH が設定されていると、フレームは次から次へとスムーズにスライドしていき、OFF になっていると、それぞれのフレームはかわるがわる面の中心に表示されます。
モード | 説明 | |
---|---|---|
ANIM_ON | 0x01 | テクスチャのアニメーションは ON です。アニメーションを開始するときに設定し、停止するときに解除しなければなりません。 |
LOOP | 0x02 | テクスチャのアニメーションをループさせます。 |
REVERSE | 0x04 | アニメーションを逆順で再生します。 |
PING_PONG | 0x08 | アニメーションを順番に再生し、そのあとで逆順に再生します。 |
SMOOTH | 0x10 | それぞれのフレームを再生するのではなく、X 方向にスライドさせます。SCALE と ROTATE のモードで、スムーズな切り替えができます。 |
ROTATE | 0x20 | テクスチャを回転させます。 SCALE と併用できません。 |
SCALE | 0x40 | テクスチャを拡大させます。 ROTATE と併用できません。 |
警告
- start が正常なインデックス範囲を外れていても、スクリプトはエラー表示を出さずに処理を続けます。
- face が存在しない面を指している場合、関数はエラーを出さずに復帰します。
- 1 つのプリムに 1 つのテクスチャアニメーションのみ設定することができます。
- llSetTextureAnim を 2 回以上呼び出すと、プリムは既にあるアニメーションをリセットします。
- ROTATE フラグと SCALE フラグを併用することはできません。
- sizex と sizey は両方とも 0 ~ 255 に制限されています。
- llSetTextureAnim はオンのとき、 X 方向と Y 方向で 1 回ずつ繰り返し、回転とオフセットは 0 となっているテクスチャを表示します。
サンプル
これはテクスチャを滑らかにずらし、終端についたときに繰り返します。
llSetTextureAnim(ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1, 1, 1);
これは反対方向にテクスチャを滑らかにずらします。
llSetTextureAnim(ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 1, 1, 1, 1, -1);
横8縦8の64セルにテクスチャを分割し、左から右、上から下に通して反転させます。セルアニメーションで使い勝手がいいです。
llSetTextureAnim(ANIM_ON | LOOP, ALL_SIDES, 8, 8, 0, 64, 6.4 );
これは毎秒2回、半時計周りにテクスチャを回転します。最後の値は-2*TWO_PIの時計周り回転に変わります。
llSetTextureAnim(ANIM_ON | SMOOTH | ROTATE | LOOP, ALL_SIDES,1,1,0, TWO_PI, 2*TWO_PI);
これはテクスチャを拡大縮小して変形します。
llSetTextureAnim(ANIM_ON | SMOOTH | SCALE | PING_PONG | LOOP, ALL_SIDES, 1, 1, 1, 3, 2);
これはループ再生しているアニメーションを特定のフレームで停止させたり開始させたりします。
integer ON;
default
{
touch_start(integer num)
{
if (ON)
{
llSetTextureAnim(ANIM_ON | LOOP, ALL_SIDES, 1, 5, 0, 0, 1);
}
else
{
llSetTextureAnim(ANIM_ON | SMOOTH, ALL_SIDES, 1, 5, 5, 1, 1);
}
ON = !ON;
}
}
注意点
テクスチャアニメーションはプリムのプロパティです (例えば、アニメーションを開始させてからスクリプトを抜くことができます。いずれにせよプリムはその設定を覚えています)。しかし、2009 年 1 月時点ではまだ、テクスチャアニメーションは Shift ドラッグによってコピーされるとその設定が消えてしまうプリムプロパティとなっています。最初にこの問題が VWR-640 でもちあがり、SVC-3925 で分離独立して議論されています。
早くざっくりと GIF をアニメーションテクスチャに変換するオンラインツールがこちらにあります。 http://www.peregrinesalon.com/anim/ (2009 年 1 月現在で有効なリンクです)