ソラマメブログ
< 2024年04月 >
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        
Mail

2007年04月24日

フェードイン・アウトscript(1)

fadeInOut links
フェードイン・アウトscript(1)

このあいだ知り合いに
"フェードイン・フェードアウトする方法を教えてくれ!”
と、言われたのですが、調べたところけっこう説明が
面倒くさそうな感じだったので、ちゃっちゃと作ってみました。

せっかくなのでソースを公開します。
ご自由にお使いくださいませ。

実行すると、
フェードアウト→しばらく停止→フェードイン→しばらく停止
を繰り返します。
持ち主がタッチすると動作をストップできます。
再開もタッチです。

フェードイン・アウトscript(1)
フェード前

フェードイン・アウトscript(1)
フェード中

面白みのない写真ですね。

最初は人のイラストにフェードを適用したのですが
リアル幽霊のようで若干こわかったのでw、
このサンプルのために幽霊ぽいキャラをかきました。

ソースはこんな感じです。
頭のほうにある数値をいじくるとスピードを調節できます。
(日本語のコメント部分は便宜的にあとから追加したものです)

// basic fadein-fadeout script ver 2.01
// programed by harayoki
// 2007/4/18
float _fadeInTime = 1.0;//フェードインにかかる秒数
float _fadeOutTime = 1.0;//フェードアウトにかかる秒数
float _wait1Time = 2.0;//不透明維持秒数
float _wait2Time = 2.0;//透明維持秒数
float _stepsPerSecond = 15;
float MAX_ALPHA = 1.0;//SET 1.0 FOR COMPLETE OPAQUE //一番不透明な時のアルファ値
float MIN_ALPHA = 0.0;//一番透明な時のアルファ値
key owner;
Init(){
owner = llGetOwner();
}
ChangeAlpha(float time,float from,float to){
integer i;
float stepNum = time*_stepsPerSecond;
float width = (to - from);
for(i=0;i<=stepNum;i++){
float ratio = (i/stepNum);
float alpha = from + width*ratio;
llSetAlpha(alpha,ALL_SIDES);
llSleep(time/stepNum);
}
}
integer isOwnerToutch(){
key toucher = llDetectedKey(0);
return (toucher == owner);
}
default{
state_entry(){
Init();
state fadeOut;
}
}
state fadeOut{
state_entry(){
ChangeAlpha(_fadeOutTime,MAX_ALPHA,MIN_ALPHA);
state wait1;
}
}
state wait1{
state_entry(){
llSetTimerEvent(_wait1Time);
}
timer(){
state fadeIn;
}
touch_start(integer total_number){
if(isOwnerToutch()) state pause;
}
}
state fadeIn{
state_entry(){
ChangeAlpha(_fadeInTime,MIN_ALPHA,MAX_ALPHA);
state wait2;
}
}
state wait2{
state_entry(){
llSetTimerEvent(_wait2Time);
}
timer(){
state fadeOut;
}
touch_start(integer total_number){
if(isOwnerToutch()) state pause;
}
}
state pause{
state_entry(){
llSetAlpha(1.0,ALL_SIDES);
}
touch_start(integer total_number){
if(isOwnerToutch()) state fadeOut;
}
}


最初は秒間10回以上のtimerイベントを発生させて
alpha値(透明度)を操作していたのですが
負荷が高そう&タイミングが不安定そうだったので
llSleepを用いた処理に変えました。


ェードなど連続で見た目が変化する演出には
たとえばllSetTargetAlpha(floatNum,sideNum)などのように、
そのものズバリの命令があればいいのですが…
どうも無いようですね。

同じカテゴリー(script)の記事画像
LSLインクリメンタルサーチ
複雑な関数は上に置け!
touchとstateのステキな関係
scriptエディタのご紹介
llSitTarget注意点
瞬間ワープ はまりポイント
同じカテゴリー(script)の記事
 LSLインクリメンタルサーチ (2008-01-25 23:11)
 テクスチャをプリロードする (2007-10-17 06:35)
 複雑な関数は上に置け! (2007-10-11 04:37)
 何度も同じscriptはロードできない (2007-05-16 15:01)
 自分に自分のscriptはロードできない (2007-05-16 14:51)
 touchとstateのステキな関係 (2007-05-06 05:10)
Posted by harayoki at 16:49│Comments(0)script
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。