2009年01月16日
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分^^)
これです↓

タッチミーと書いてます、
タッチすると↓

これで、砂時計と言い張るのも、つらくなってきましたが><
砂時計と似たような動きをします。
上の段の「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に飛んで頂いて^^

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

こういう新作も出してます^^ストップウォッチ付き懐中時計です。
では、今日はこのへんで^^
次回は、新作の進行状況のお知らせの予定です~
Posted by natu(DCCXXIII) at 17:02│Comments(0)
│商品開発秘話(スクリプト、プリムなど)