ソラマメブログ
< 2024年03月 >
S M T W T F S
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
※カテゴリー別のRSSです
Mail

  
Posted by at

2007年05月15日

DL:フェードIN&OUTモジュール(4)

fadeInOut links

FadeInOut Moduleを下記でダウンロードできるようにしました。
よろしければご利用ください。

◆モジュール本体
FadeInOutModule.lsl

(バージョンアップされたり改名される事があるので、
このファイルに直接リンクはしないで下さい。)

※InWorldでの配布は現在未定です。  

Posted by harayoki at 06:23Comments(0)フェードIN/OUT

2007年05月01日

バグ修正:フェードIN&OUTモジュール(3)

fadeInOut links
以前作成したモジュール:フェードイン・アウトにバグがありましたので修正しました。

・親プリムだけではなく、子プリムにもフェード効果がかかるようにした
・リンク番号と面番号を混同していたのを修正
・コマンド名を
setFade => harayoki.setFade
setAlpha => harayoki.setAlpha
に、それぞれ変更
・他モジュール(5/1現在未公開)と同時に動かす事ができなかったので修正

です。

元記事を修正しておきました。
使われてる方がいれば(います??)入れ替えお願いします。

scriptもテクスチャも手間の面が解決すれば
どこぞやで無料配布しようかと思っていますが
配布後のscriptのメンテ的作業はあまりできないと思います。
使用の際は、自己責任という事でお願いします。  

Posted by harayoki at 19:14Comments(0)フェードIN/OUT

2007年04月24日

モジュール:フェードイン・アウト(2)

fadeInOut links


先ほどのフェードイン、アウトscript
llMessageLinkedを用いて、汎用的に使えるようにモジュール?っぽい状態にしました。
われながら地味ですが、便利なものを作った気がするので、今後多用します。

◆地味すぎる更新なのでせめてビデオにとりました。
タッチするとフェードアウト、フェードインします。

モジュールを利用するとコードはコレだけです。
default{
touch_start(integer num){
llMessageLinked(LINK_SET,0,"harayoki.setFade 0.0 0.4",NULL_KEY);
llSleep(2.0);
llMessageLinked(LINK_SET,0,"harayoki.setFade 1.0 0.05",NULL_KEY);
}
}


◆使い方
フェードイン・フェードアウトさせたいプリムに

新規scriptを"FadeInOut Module"など適当な名前で作り、
記事の最後にあるソースをドババっとコピペします。
こちらのscriptは利用する際、中身を編集しません
利用者が組むスクリプトは別の名前で作ります。
(この画像の場合はmainという名前)

あとはmainのscriptからフェードアウト・フェードインしたい場所で
呪文のように
・フェードインしたい時
llMessageLinked(LINK_SET,0,"harayoki.setFade 1.0 0.8",NULL_KEY);
・フェードアウトしたい時
llMessageLinked(LINK_SET,0,"harayoki.setFade 0.0 0.8",NULL_KEY);
と書きます。
これでなだらかに透明度が変化するはずです。

書式の説明をすると、
harayoki.setFadeがフェード開始命令
1,0とか0,0になってる2番目が、行き着く透明度の値
0.8になってる3番目の値が
フェードのスピード(0.0~1.0)です。値が大きいほど早いです。
ただし0にしてはいけません。

LINK_SETの意味が理解できる人は、
もっと高度な使い方ができるでしょう。
ここでは説明しませんが。


◆ FadeInOut Module
// FadeInOut Module ver 1.02
// programed by harayoki
// 2007/4/24 release
// 2007/5/1 bug fix for side_num and module sysytem.
integer debug = FALSE;
Trace(string s){
if(debug){
llOwnerSay(s);
}
}
float FPS = 15.0;
float _interval;
float _targetAlpha;
float _alpha;
float _ratio = 0.1;
integer LINK_NUM = LINK_SET;
integer FACE_NUM = ALL_SIDES;
key owner;
string _callback;

Init(){
owner = llGetOwner();
_interval = 1.0 / FPS;
//if(debug) Test();
}
Test(){
llMessageLinked(LINK_NUM,0,"harayoki.setAlpha 0.0",NULL_KEY);
llMessageLinked(LINK_NUM,0,"harayoki.setFade 1.0 0.2",NULL_KEY);
}
ChangeAlpha(){
float da = (_targetAlpha - _alpha);
if(llFabs(da)<0.05){
_alpha = _targetAlpha;
llSetTimerEvent(0);
CallBack();
}else{
_alpha += da*_ratio;
}
llSetLinkAlpha(LINK_NUM,_alpha,FACE_NUM);
}
AlphaCommand(string s){
list arr = llParseString2List(s,[" "],[""]);
string command = llToLower(llList2String(arr,0));
if(command=="harayoki.setalpha"){
Trace(command+" "+(string)_targetAlpha);
_targetAlpha = llList2Float(arr,1);
llSetTimerEvent(0);
llSetLinkAlpha(LINK_NUM,_targetAlpha,FACE_NUM);
}else if(command=="harayoki.setfade"){
_targetAlpha = llList2Float(arr,1);
_ratio = llList2Float(arr,2);
_callback = llList2String(arr,3);
if(_ratio==0) _ratio = 0.01;//default
Trace(command+" "+(string)_targetAlpha+" "+(string)_ratio+" "+_callback);
_alpha = llGetAlpha(FACE_NUM);
if(_alpha>1) _alpha = 1;// some time 6!!
llSetTimerEvent(_interval);
}
}
CallBack(){
llMessageLinked(LINK_NUM,0,_callback,NULL_KEY);
}
default{
state_entry(){
Init();
}
on_rez(integer num){
llResetScript();
}
link_message(integer sender_num,integer alpha,string str,key id){
Trace("link_message fader");
AlphaCommand(str);
}
timer(){
ChangeAlpha();
}
}


ちなみに、フェードではなく透明度だけを一瞬でコントロールしたい場合は
・透明にしたい時
llMessageLinked(LINK_NUM,0,"harayoki.setAlpha 0.0",NULL_KEY);
・不透明にしたい時
llMessageLinked(LINK_NUM,0,"harayoki.setAlpha 1.0",NULL_KEY);
・透明度50%にしたい時。
llMessageLinked(LINK_NUM,0,"harayoki.setAlpha 0.5",NULL_KEY);
と書けます。
まあこれはllSetLinkAlphaでも同じですけど…オマケです。
いやむしろその方がメッセージ経由で無いので早いはず。

時間的なラグが無ければmessageのやり取りを使ったscriptigは
この例のようにOOP的構成にできるので楽なのですが…。
惜しい。  続きを読む

Posted by harayoki at 21:00Comments(3)フェードIN/OUT