ソラマメブログ

2009年01月16日

1プリム砂時計のスクリプト

まだ、フローティングテキストで遊んでる、なつです。

できました^^
先日の記事から、フローティングテキストで何か面白い物を作ろうってお話なんですが、
約1分の砂時計です^^(約です・・・だいたい・・・おおまかに1分^^)

これです↓
1プリム砂時計のスクリプト
タッチミーと書いてます、

タッチすると↓
1プリム砂時計のスクリプト
これで、砂時計と言い張るのも、つらくなってきましたが><

砂時計と似たような動きをします。
上の段の「0」が約1秒毎に1個づつ下の段に落ちていきます(落ちてるように見える)。

スクリプト

_____________ここから_________________
//Hourglass One minute

string mojix = "_";
string mojiy = "0";

string moj;
string mom;

string moji;
string momo;

string moji2;
string momo2;
string moji3;

integer sw = 0;
integer i = 0;

mojimoji2(){
moji2 = llInsertString(moji,59,"\n");
moji2 = llInsertString(moji2,57,"\n");
moji2 = llInsertString(moji2,53,"\n");
moji2 = llInsertString(moji2,47,"\n");
moji2 = llInsertString(moji2,39,"\n");
moji2 = llInsertString(moji2,29,"\n");
moji2 = llInsertString(moji2,15,"\n");

momo2 = llInsertString(momo,1,"\n");
momo2 = llInsertString(momo2,4,"\n");
momo2 = llInsertString(momo2,9,"\n");
momo2 = llInsertString(momo2,16,"\n");
momo2 = llInsertString(momo2,25,"\n");
momo2 = llInsertString(momo2,36,"\n");
momo2 = llInsertString(momo2,51,"\n");

moji3 = moji2 + "\n" + momo2;

llSetText(moji3,<1.0,1.0,1.0>,1.0);

}

mojimoji(){

moji = llDeleteSubString(moji,i,i);
moji = llInsertString(moji,i,mojix);

momo = llDeleteSubString(momo, 60 - i, 60 - i);
momo = llInsertString(momo, 60 - i ,mojiy);

i++;
if(i >= llStringLength(moji)){
llSay(0,"1 minutes.........about ^^");
llSetTimerEvent(0);

}
}





default
{
state_entry()
{
integer ii;
for(ii = 0 ; ii < 60 ; ii++){
moj = moj + mojiy;
mom = mom + mojix;
}
llSetText("Hourglass One minute\ntouch me",<1.0,0.5,0.5>,1.0);

}

touch_start(integer total_number)
{
if(sw == 0){
moji = moj;
momo = mom;
llSetTimerEvent(1.0);
sw = 1;
}
else if(sw == 1){
llSetTimerEvent(0);
llSetText("Hourglass One minute\ntouch me",<1.0,0.5,0.5>,1.0);
i = 0;
sw = 0;
}


}
timer()
{
mojimoji();
mojimoji2();

}
}

_____________ここまで_________________


思考錯誤しながら書いたスクリプトで、見づらいですけど><
string型(文字列)の変数が多いですけど、もっと簡略化できるかもしれません。

さて、まずは、上の方の

string mojix = "_";
string mojiy = "0";

ですが、mojixが下の段の文字です、mojiyが上の段の文字です。
同じ文字を60個続けて書いてもよさそうですけど、
ちょっとずるしてます^^

"_" と"0"を書き換えると、もっと違った感じになるかもです。(全角文字は不可)

ここからは、スクリプトの流れの順番で、

state_entry()
{
integer ii;
for(ii = 0 ; ii < 60 ; ii++){
moj = moj + mojiy;
mom = mom + mojix;
}
llSetText("Hourglass One minute\ntouch me",<1.0,0.5,0.5>,1.0);

}

ii は、カウント用の数値型の変数ですが、私は別のイベント内で i を使うとかぶらないように ii , iii とかにします^^
for文で、moj と言う文字列型の変数とmom と言う文字列型の変数に、先ほどの"_" と"0"を
それぞれ60回足してます。
(後で文字の変更が簡単にできるようにです)

後は、初期のフローティングテキストの設定です。

次はタッチイベント

touch_start(integer total_number)
{
if(sw == 0){
moji = moj;
momo = mom;
llSetTimerEvent(1.0);
sw = 1;
}
else if(sw == 1){
llSetTimerEvent(0);
llSetText("Hourglass One minute\ntouch me",<1.0,0.5,0.5>,1.0);
i = 0;
sw = 0;
}
}

タッチ毎にON/OFFを繰り返すので、if 文で分岐させてます。
ONにする時は、moji と momo と言う文字列変数にそれぞれ、moj と mon を代入して
タイマーを1秒毎に設定してタイマーをONします。

OFFにする時は、タイマーを止めて、初期のフローティングテキストを表示して、
タイマーで使ったカウント用の数値型変数の i を初期化してます。
( i を使用するイベント内で宣言すれば、必要ない処理ですが、後々一時停止とかの機能を追加するには、
この方が便利そうなので、i をdefaultより上で宣言してます)


タイマーイベントは、
timer()
{
mojimoji();
mojimoji2();

}

だけ^^
mojimoji() と mojimoji2() を呼び出してるだけです。


では、mojimoji() は、なに?文字の書き換え処理です。

mojimoji(){

moji = llDeleteSubString(moji,i,i);
moji = llInsertString(moji,i,mojix);

momo = llDeleteSubString(momo, 60 - i, 60 - i);
momo = llInsertString(momo, 60 - i ,mojiy);

i++;
if(i >= llStringLength(moji)){
llSay(0,"1 minutes.........about ^^");
llSetTimerEvent(0);

}
}

呼ばれるたびに、
文字列のmojiを先頭から、mojix に書きかえ、
文字列のmomoを後ろから mojiy に書き換えて
カウント用の数値型変数 i を1づつ加算します。

もし、カウントが文字数を超えたなら、メッセージを出して終了です。


mojimoji2() は、なに?文字の改行処理です。

mojimoji2(){
moji2 = llInsertString(moji,59,"\n");
moji2 = llInsertString(moji2,57,"\n");
moji2 = llInsertString(moji2,53,"\n");
moji2 = llInsertString(moji2,47,"\n");
moji2 = llInsertString(moji2,39,"\n");
moji2 = llInsertString(moji2,29,"\n");
moji2 = llInsertString(moji2,15,"\n");

momo2 = llInsertString(momo,1,"\n");
momo2 = llInsertString(momo2,4,"\n");
momo2 = llInsertString(momo2,9,"\n");
momo2 = llInsertString(momo2,16,"\n");
momo2 = llInsertString(momo2,25,"\n");
momo2 = llInsertString(momo2,36,"\n");
momo2 = llInsertString(momo2,51,"\n");

moji3 = moji2 + "\n" + momo2;

llSetText(moji3,<1.0,1.0,1.0>,1.0);

}

たとえば、moji2 = llInsertString(moji,59,"\n"); ですが、
文字列変数の moji2には、文字列型変数の moji に格納されてる文字列の59番目に \n を追加して格納するです。
\n は、改行の記号なので、任意の場所で改行してるだけです。

最初改行記号を入れた文字列を1つづつ変更させようか?とも思ったのですが、
面倒なので、
変化した文字列を毎回改行させる処理にしました。

その名残で、改行処理と文字の変化処理が分かれてます。

前の記事にも書きましたが、タイマーイベントの1秒毎ってのがそれほど当てにならないので、
約1分です、あくまでも^^
きちんとした計測には、時間を返す関数を使用しないとだめだと思います。
また、
タッチの処理の制限もなく、メッセージも制限なしのチャット出力です。

動的フローティングテキストの実験ですので、こういう処理にしました^^

改造するなりして、ご自由にお使いくださいませ^^   使わない?><

一応ですけど、
CAT'S EYE mall & cafe
に飛んで頂いて^^
1プリム砂時計のスクリプト

ここのフリー商品の横にならんだ、小さい木箱の黒に入ってますので、
お持ち帰りください^^
ついでに、もしよかったら、懐中時計も見て帰ってください^^

1プリム砂時計のスクリプト
こういう新作も出してます^^ストップウォッチ付き懐中時計です。

では、今日はこのへんで^^
次回は、新作の進行状況のお知らせの予定です~


同じカテゴリー(商品開発秘話(スクリプト、プリムなど))の記事画像
普通のプリム?スカルププリム?の続き
普通のプリム?スカルププリム?
心が折れた・・・><
作業進行状況
色変更スクリプト(RGB微調整)
もうすぐ発売
 普通のプリム?スカルププリム?の続き (2009-12-09 15:58)
 普通のプリム?スカルププリム? (2009-12-07 20:44)
 心が折れた・・・>< (2009-10-28 15:48)
 作業進行状況 (2009-09-21 21:59)
 色変更スクリプト(RGB微調整) (2009-09-11 03:11)
 もうすぐ発売 (2009-09-07 00:51)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。