2007年04月24日
フェードイン・アウトscript(1)
fadeInOut links
このあいだ知り合いに
"フェードイン・フェードアウトする方法を教えてくれ!”
と、言われたのですが、調べたところけっこう説明が
面倒くさそうな感じだったので、ちゃっちゃと作ってみました。
せっかくなのでソースを公開します。
ご自由にお使いくださいませ。
実行すると、
フェードアウト→しばらく停止→フェードイン→しばらく停止
を繰り返します。
持ち主がタッチすると動作をストップできます。
再開もタッチです。
フェード前
フェード中
面白みのない写真ですね。
最初は人のイラストにフェードを適用したのですが
リアル幽霊のようで若干こわかったのでw、
このサンプルのために幽霊ぽいキャラをかきました。
ソースはこんな感じです。
頭のほうにある数値をいじくるとスピードを調節できます。
(日本語のコメント部分は便宜的にあとから追加したものです)
最初は秒間10回以上のtimerイベントを発生させて
alpha値(透明度)を操作していたのですが
負荷が高そう&タイミングが不安定そうだったので
llSleepを用いた処理に変えました。
ェードなど連続で見た目が変化する演出には
たとえばllSetTargetAlpha(floatNum,sideNum)などのように、
そのものズバリの命令があればいいのですが…
どうも無いようですね。
このあいだ知り合いに
"フェードイン・フェードアウトする方法を教えてくれ!”
と、言われたのですが、調べたところけっこう説明が
面倒くさそうな感じだったので、ちゃっちゃと作ってみました。
せっかくなのでソースを公開します。
ご自由にお使いくださいませ。
実行すると、
フェードアウト→しばらく停止→フェードイン→しばらく停止
を繰り返します。
持ち主がタッチすると動作をストップできます。
再開もタッチです。
フェード前
フェード中
面白みのない写真ですね。
最初は人のイラストにフェードを適用したのですが
リアル幽霊のようで若干こわかったので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)などのように、
そのものズバリの命令があればいいのですが…
どうも無いようですね。
LSLインクリメンタルサーチ
テクスチャをプリロードする
複雑な関数は上に置け!
何度も同じscriptはロードできない
自分に自分のscriptはロードできない
touchとstateのステキな関係
テクスチャをプリロードする
複雑な関数は上に置け!
何度も同じscriptはロードできない
自分に自分のscriptはロードできない
touchとstateのステキな関係
Posted by harayoki at 16:49│Comments(0)
│script