ソラマメブログ
※カテゴリー別のRSSです
< 2025年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      

  
Posted by at

2009年02月10日

時:分:秒を表示したい。


今日の質問は、秒:ミリ秒と表示されるスクリプトを
時間:分:秒と表示するようにしたい との事ですが
元のスクリプトを見るとllGetTime()関数で取得した時間を、そのまま表示すると
秒.ミリ秒という表示になるので、これの表示方法を変えたらいいという事になります。

・元のスクリプト(秒.ミリ秒)

integer flg;

default
{
// 1.ストップウォッチ開始/停止切り替え
touch_start(integer total_number)
{
if(flg==TRUE){
llSetTimerEvent(0.0);
flg=FALSE;
}else{
llSetTimerEvent(0.01);
llResetTime();
flg=TRUE;
}
}
// 2.タイマー表示処理(秒.ミリ秒)
timer()
{
llSetText( (string)llGetTime(),<1.0,1.0,1.0>,1.0);
}
}


・修正済みのスクリプト(00:00:00 時:分:秒)

integer flg;

default
{
// 1.ストップウォッチ開始/停止切り替え
touch_start(integer total_number)
{
if(flg==TRUE){
llSetTimerEvent(0.0);
flg=FALSE;
}else{
llSetTimerEvent(0.01);
llResetTime();
flg=TRUE;
}
}
// 2.タイマー表示処理(00:00:00 時:分:秒)
timer()
{
integer now = (integer)(llGetTime());
string sec = (string)(now%60);
string min = (string)(now/60);
string hor = (string)(now/3600);
if(llStringLength(sec) == 1)sec="0"+sec;
if(llStringLength(min) == 1)min="0"+min;
if(llStringLength(hor) == 1)hor="0"+hor;
llSetText( hor+":"+min+":"+sec,<1.0,1.0,1.0>,1.0);
}
}


■このスクリプトのポイント
ストップウォッチとしては、前のスクリプトが正しいのですがw
string sec = (string)(now%60);という記述をしていますが、
%60と記述すると60で割った余りの値を返すので、これで秒をあらわせる事が一点と、
おまけの処理なのですが、if(llStringLength(sec) == 1)sec="0"+sec;と記述することで
1秒とか一桁の数値の時に、01という風に二桁で表記するようにしている点です。


  

Posted by DK003 at 12:47Comments(0)質問に答えてみた

2008年10月17日

タッチ時装着スクリプトの質問www 



前回投降したタッチ時に装着するスクリプトについて
ちょっと質問が来たのですが、答えれないので分かるひと教えてくださいwww

とりあえず、やりたい事はオブジェクトAをタッチした時に
オブジェクトBを渡して装着させたいのですが・・・
オーナーなら装着させる事は出来てもオーナー以外は装着できませんw

ObjAにこんな処理を入れて
==================================

default
{
  touch_start(integer total_number)
  {
    llRezObject("ObjB" , llGetPos(),ZERO_VECTOR ,llGetRot(), 0);
  }
}

==================================

ObjBにこんな処理を入れました。
==================================

default
{
  state_entry()
  {
    llRequestPermissions(llGetOwner(),PERMISSION_ATTACH);
  }
  on_rez(integer r)
  {
    llResetScript();
  }
  run_time_permissions(integer p)
  {
    if(p & PERMISSION_ATTACH)
    {
      llAttachToAvatar(ATTACH_RHAND);
    }
  }
}

==================================

ここからは質問ですが、
オーナー以外の人にオブジェクトを渡して装着させるオブジェクトを作ろうと思うと
↓のどちらかの関数かイベントが必要になりますww
知ってる人がいたらおしえてください!!

1.持ち物に入った事をきっかけにして始まるイベントはあるか?
2.オーナーを変更する関数はあるか?

  

Posted by DK003 at 16:07Comments(2)質問に答えてみた

2008年10月15日

タッチ時に装着するスクリプトw

タッチ時に装着するスクリプトが知りたいらしいので、
ググったら速攻でてきたwww

llRequestPermissions(llDetectedKey(0),PERMISSION_ATTACH);
で、装着の許可を取得しに行き、取得できたら
llAttachToAvatar(ATTACH_RHAND);
で、装着させる感じですね。このATTACH_RHANDを
http://www33.atwiki.jp/lslwiki/pages/39.html
↑のアドレスを参照にして、修正したら装着する部位をかえれるわけですね。

==================================

default
{
  // 1.タッチをきっかけに始まるイベント
  touch_start(integer t)
  {
    // 装着の許可を取得しに行く
    llRequestPermissions(llDetectedKey(0),PERMISSION_ATTACH);
  }
  // 2.装着の許可がでたら始まるイベント
  run_time_permissions(integer p)
  {
    // 装着の許可が出ているか?
    if(p & PERMISSION_ATTACH)
    {
      // 装着させる
      llAttachToAvatar(ATTACH_RHAND);
    }
  }
}

==================================

↑のスクリプトを、じゃんけんゲーム作りたいらしいので、
「ぽん」という言葉を誰かがしゃべったら全員まとめてウェアーする処理に変更。

==================================

string key1 = "ぽん";
integer mode = 0;

default
{
  // 1.タッチをきっかけに始まるイベント
  touch_start(integer t)
{
    if(llGetAttached() != ATTACH_RHAND)
    {
      // 装着の許可を取得しに行く
      llRequestPermissions(llDetectedKey(0),PERMISSION_ATTACH);
      llListen(0,"","","");
    }else{
      llDetachFromAvatar();
    }
  }
  // 2.装着の許可がでたら始まるイベント
  run_time_permissions(integer p)
  {
    // 装着の許可が出ているか?
    if(p & PERMISSION_ATTACH)
    {
      // 装着させる(装着部位は以下参照)
      // http://www33.atwiki.jp/lslwiki/pages/39.html
      llOwnerSay("ok");
      mode = 1;
    }
  }
  // 3.じゃんけんぽん
  listen(integer channel,string name, key id, string message)
  {
    string m = message;
    if(llSubStringIndex(m,key1) != -1 && mode == 1)
    {
      llAttachToAvatar(ATTACH_RHAND);
      mode = 0;
    }
  }
}

==================================
  

Posted by DK003 at 12:00Comments(3)質問に答えてみた

2008年07月25日

回転するプリムをリンクすると・・・・その②


今回もワイルドさんからの質問で、上の画像のようにTouch時に開いたり閉じたりする
宝箱のフタを作ったらしいのですが・・・



これまた複数リンクすると動きが上の画像のようにおかしくなってしまうので
直したいんだけど・・・との事、単体ではそれぞれのプリムが正常に動いている



こんどはllTargetOmegaを使っていないらしいので、どうやって回転しているかプログラムを
Touch部分から追いかけてみると・・・なにやらリンクしたときに親を参照しそうな関数を発見w



この関数と同じ機能を持ちつつ、自分を参照しそうな関数をぐぐったら
llGetLocalRot()という関数が見つかったので、スクリプトを書き換えてみました。

という事で、問題解決。

(ほんとは親の座標と子の座標の差を埋める計算をする事で解決しようとして
数値の調整に挫折したので、改めてググったらllGetLocalRotが出てきたという
泥臭い工程を踏んでいますw)

==================================================
このブログでは簡単な質問を受け付けていますので、
簡単そうな問題を抱えている人は、DK003 DoobieまでIMください。
(ブログのネタに飢えているので喜んで話を聞かせてもらいます。)  

Posted by DK003 at 19:55Comments(0)質問に答えてみた

2008年07月25日

回転するプリムをリンクすると・・・・その①




今回はワイルドさんからの質問で、↑の画像のように回転するプリムを複数リンクすると、
動きが無茶苦茶になってしまうので直したいんだけど・・・との事。
単体ではそれぞれのプリムが正常に動いている





とりあえず構造を把握するためにスクリプトを見せてもらう。
なるほど、それぞれの単体のプリムに回転するスクリプトをいれている状況ですね。

という事はリンクをした時に、親プリムのスクリプトの影響を子プリムが受けている
可能性が高いので、スクリプトの入っていないプリムをテスト的に親プリムにしてみる
と正常に動いた。
(※リンクをするときに、最後に選択したプリムが親となる)

という事で、あっさり解決ですね。
報酬として、ブログのネタにさせてもらいましたw



==================================================
このブログでは簡単な質問を受け付けていますので、
簡単そうな問題を抱えている人は、DK003 DoobieまでIMください。
(ブログのネタに飢えているので喜んで話を聞かせてもらいます。)


  

Posted by DK003 at 14:09Comments(0)質問に答えてみた

2008年07月24日

ラジオをグループのみ変更できるようにしたい。

とりあえず、あれですね。
なんか記事の一つぐらい書いとこうと思ったので昨日あった事を書きますね。



今回の質問は、↑の画像にフルパーミッションのラジオがあって、
これは土地の音楽を変更できるものらしいのですが、
どうも知らない人が勝手に曲を変えたりして困っているらしく
グループのみ音楽を変更できるようにしたいそうです。



とりあえず、現状では、どうやって音楽を変更するか確認すると。
ラジオをタッチしたときに、ダイアログが出るのでそこで曲を変えるとのこと。

あーなるほどなるほど、グループ以外の人がタッチしたときに
ダイアログが出なければいいわけですね。わかります。

同じグループかどうかの判定するLSLをググったら出てきました。

llDetectedGroup(0)

これをtouch_startのダイアログ表示部分におけばいいわけですね。
ということで、スクリプトはこんな感じで生まれ変わりました。

■before


■after


以上完成です。〇〇さん、よかったですね。

しかし、このブログ書くのに30分もかかってしまい、
もうなんか早くもブログ引退しそうですね。

==================================================
このブログでは簡単な質問を受け付けていますので、
簡単そうな問題を抱えている人は、DK003 DoobieまでIMください。
(ブログのネタに飢えているので喜んで話を聞かせてもらいます。)  

Posted by DK003 at 12:10Comments(3)質問に答えてみた