LlSetTextureAnim/ja

From Second Life Wiki
Jump to navigation Jump to search

要約

関数: llSetTextureAnim( integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate );

テクスチャの大きさとオフセットを設定して、指定した面のテクスチャをアニメーションさせます。

• integer mode モードフラグのマスク
• integer face 番号もしくは ALL_SIDES
• integer sizex 横フレーム ( ROTATESCALE では無視される)
• integer sizey 縦フレーム ( ROTATESCALE では無視される)
• float start 開始位置/フレーム番号 ( ROTATE ではラジアン)
• float length 表示するフレーム数 ( ROTATE ではラジアン)
• float rate 毎秒のフレーム数(0 にすべきではありません)

start には 負のインデックス を使用できます。 faceALL_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 方向にスライドさせます。SCALEROTATE のモードで、スムーズな切り替えができます。
ROTATE 0x20 テクスチャを回転させます。
SCALE と併用できません。
SCALE 0x40 テクスチャを拡大させます。
ROTATE と併用できません。

警告

  • start が正常なインデックス範囲を外れていても、スクリプトはエラー表示を出さずに処理を続けます。
  • face が存在しない面を指している場合、関数はエラーを出さずに復帰します。
  • 1 つのプリムに 1 つのテクスチャアニメーションのみ設定することができます。
    • llSetTextureAnim を 2 回以上呼び出すと、プリムは既にあるアニメーションをリセットします。
  • ROTATE フラグと SCALE フラグを併用することはできません。
  • sizexsizey は両方とも 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 月現在で有効なリンクです)

関連項目

特記事項

All Issues

~ Search JIRA for related Issues
   Some persistent prim properties lost when duplicated
   Texture Animation is not copied (llSetTextureAnim)
   Texture animations ignore repeats per face

脚注

  1. ^ しかし、rate がマイナスで REVERSE フラグが使用されていると、効果が打ち消されます。

Signature

function void llSetTextureAnim( integer mode, integer face, integer sizex, integer sizey, float start, float length, float rate );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。