ソラマメブログ

  
Posted by at

2008年07月13日

【中級】youtube url変換Webサービス公開

こんにちは
ジョビンです

おひさしぶりー

最近ようつべビューワはやってますね
もうすでに下火?

以前つくった ようつべurl変換をいまさら公開します
Web側の変換に悩んでる人はつかってくださいー
ゆうすけべ~さんのとこの変換プログラムつかってちゃだめですよっ
あそこの原理でやると

視聴者の人数分ゆうすけべさんのサーバーにアクセスがいっちゃいます

視聴者がたくさんいるところでチャンネルを変えると
まったく同じタイミングで複数のリクエストが飛ぶので
サーバーとめちゃうこともありうる
ていうかとめかけたことあります はい


URL 変換するプログラム



したのスクリプトをこぴぺして
オブジェクトに入れてください
名前は適当でいいです
私は

 JM-Tube URL Conv

って名前にしてます



string strURL;
key Query;
integer isHighFormat = FALSE;

default
{
on_rez(integer n){llResetScript();}

link_message(integer sender_num, integer num, string str, key id)
{

if((string)id == "set_quality")
isHighFormat = num;

if((string)id != "set_url")
return;

strURL = str;
state set;
}

}

state set
{
state_entry()
{
if(llSubStringIndex(strURL, "youtube")==-1)
state default;

if(isHighFormat==1)
strURL = "http://pipes.yahoo.com/pipes/pipe.run?_id=5a068edc3e7197ed30c21a4f90363fe2&_render=csv&format=18&url=" + strURL;
else if(isHighFormat==0)
strURL = "http://pipes.yahoo.com/pipes/pipe.run?_id=5a068edc3e7197ed30c21a4f90363fe2&_render=csv&format=17&url=" + strURL;
else if(isHighFormat==2)
strURL = "http://pipes.yahoo.com/pipes/pipe.run?_id=45d0f4c39c45d25fabdfb58fe550419b&_render=csv&url=" + strURL;

Query = llHTTPRequest(strURL, [HTTP_METHOD,"GET"], "");
}

http_response(key request_id, integer status, list metadata, string body)
{

if(request_id != Query)
return;

if(body=="")
{
llSay(0,"Sorry, request url is not converted.");
return;
}

list Ret = llParseString2List(body, ["\n"], []);
strURL = llList2String(Ret,1);
integer idx = llSubStringIndex(strURL, "&");

while( idx > -1)
{
strURL = llDeleteSubString(strURL, idx+1, idx+4);
idx = llSubStringIndex(strURL, "&");
}

state default;
}

state_exit()
{
llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_STOP,
PARCEL_MEDIA_COMMAND_URL,strURL,
PARCEL_MEDIA_COMMAND_TYPE,"video/*"]);

llParcelMediaCommandList([PARCEL_MEDIA_COMMAND_PLAY]);
llSay(0,"Media setting is changed!");
}
}


URLをセットするスクリプト



同一プリム内の別スクリプトで呼び出します
こんなカンジで link_message を投げます


llMessageLinked(LINK_THIS, 0, "http://jp.youtube.com/watch?v=7hASyYBsExE", "set_url");


URL のところはご自由にどうぞ
これで自動再生されまする

画質を変えるには

llMessageLinked(LINK_THIS, 0, "", "set_quality"); // 中画質モード 軽め
llMessageLinked(LINK_THIS, 1, "", "set_quality"); // 高画質モード 重い mpeg4
llMessageLinked(LINK_THIS, 2, "", "set_quality"); // 携帯用フォーマット 軽い 荒い

って感じで画質が変わります
画質モード変えたあと、urlを送りなおさないと反映されないので
ご注意ください

以上
手抜き記事でした
つっこみ修正歓迎します  
タグ :中級LSL

Posted by Jvn Writer at 08:15Comments(6)つれづれなるままに

2008年04月01日

髪の毛が生えました

朝起きたら髪の毛が生えていました

みっともなくて 会社にいけないので電話して退職しました
これで一日中セカンドライフができます

おともだちのけいたくんにいったら それはよかったね といっていました
ぼくはそれをきいて あぁ よかったんだな とおもいました



気の利いたうそをつけるように
今年度をがんばろうとおもいます  

Posted by Jvn Writer at 08:52Comments(1)仕事

2008年03月14日

【中級】センサースクリプトに挑戦

こんばんは、ジョビンです。

あしあとをたどってみたら MasterPoppy Amat さんという方が
センサースクリプトを公開されていました。
http://masterpoppy.slmame.com/e172204.html

なるほどなるほど。
こうやって方角を検知するんですね。

トラックバック歓迎とのことでしたので、
私もセンサーに挑戦してみました!
はじめましてのご挨拶にトラックバック。


ちなみに、決してどっちのスクリが正解とかそういうことを言いたいわけではありません。
私は、スクリプトを公開することはとてもいいことだと思っています。
スクリプター同士が、お互いの手法を見ながら学びあうのは、さらにすばらしいことだと思っています。

ですから、MasterPoppy さんから学ばせていただいたジョビンが
お返しに公開するエントリーです。

やってるもの同士お互いに刺激が受けられますし、
同じものを違う角度から見るとまた理解が深まるでしょう。
この記事を見られる方々に、そのように受け取っていただければ幸いです。


// Work Space
vector direc_v;
integer dirc_idx;
string Text;
string line;
integer dist;

// Constant Value
list dirc_list = ["W","SW","S","SE","E","NE","N","NW"];
float RAD_TO_IDX;

default
{
on_rez(integer n){ llSetText("",<0,0,0>,1.0); llResetScript(); }

state_entry()
{
RAD_TO_IDX = 8 / (TWO_PI);
llSensorRepeat("", "", AGENT, 500, TWO_PI, 3.0);
}

sensor(integer num)
{
Text = "";
integer i;
for(i=0; i {
direc_v = llDetectedPos(i) - llGetPos();
dirc_idx = llRound(llAtan2(direc_v.y,direc_v.x)/TWO_PI*8+4); // dirc_idx = 0 ~ 7

dist = llRound(llVecMag(direc_v));

line += llDetectedName(i);
line += "[";
line += (string)dist+"m ";
line += llList2String(dirc_list,dirc_idx%8);
line += "]";
Text += line + "\n";
}

llSetText(Text, <1.0,1.0,1.0>, 1.0);
}

no_sensor()
{
llSetText("NO AVATAR", <0.8,0.5,0.5>, 1.0);
}

changed(integer c)
{
if(c & CHANGED_TELEPORT)
llSetText("",<0.0,0.0,0.0>,1.0);
}
}



テストはしていないので、動作は保障しません。
動かした方、結果を教えていただければ幸いです。


実はこの記事は一週間前に公開したんですが
帰宅後インで実験したらひどい結果になったので
あわてて非公開にしたんでした^^;


ポイント




dirc_idx = llRound(llAtan2(direc_v.y,direc_v.x)/TWO_PI*8+4); // dirc_idx = 0 ~ 7


違いはこの行だけです。
分解して順番に見ていきましょう。


llAtan2(direc_v.y,direc_v.x)


この行は 元のソースのままです。
値は - PI ~ PI になります


llAtan2(direc_v.y,direc_v.x)/TWO_PI


こうすると - 0.5 ~ 0.5
になります。
ここまでは大丈夫でしょうか?


llAtan2(direc_v.y,direc_v.x)/TWO_PI*8+4


これで、 0~8 になりました
これを %8 で0~7にして
リストのインデックスとして使っています

line += llList2String(dirc_list,dirc_idx%8);


if 文で 1から順番に8回比べるより、
こっちのほうが短くかけます。

このリストの使い方は、たいへん応用が利くし
計算の回数を減らすことのできるテクニックなので、
ぜひ紹介したいとおもいこのエントリーを書きました。

お礼



以上 センサー ジョビン風でした。

MasterPoppy Amat さん ありがとう!  
タグ :LSL中級

Posted by Jvn Writer at 18:59Comments(5)LSL講座

2008年02月26日

【講座】誰でもできるLSL touch

しばらくお休みしてました。jvnです。
風邪はなおったけど、いろいろと忙しくなってきちゃいました><
講座は 今までどおり毎日というわけにはいかなさそうです。。
普通のブログを毎日つけるようにがんばります。

最近、調べものがあって LSL Portal と LSL Wiki をみてました。
http://jvn.slmame.com/e147567.html
前者はリンデン公式だけど重く、後者は有志のもので軽いです。
関数のリストなどは、公式のものが正確なのですが、
関数の挙動に関しては Wiki のほうが情報量が細かく、正確なようでした。
とくに今回しらべていた物理系の情報は LSL Wiki がすごかったですね。
情報を拡散させるな!
IncSearch も対応しなくちゃいけないなぁ。。。


LSL 講座 リンク

復習




list NAMES_l;
default
{
touch_start(integer num)
{
if(llDetectedKey(0) == llgetOwner()){
llSay(0,"君はオーナーだ");
}

if(llListFindList(NAMES_l, [llDetectedName(0)])>-1){
NAMES += llDetectedName(0);
}
}
}


ここをチェック。

  • 流れはわかるか

  • if文の条件式の中身がわかるか




今日学ぶこと



Detected 関数を知ります
List の使いかたを学びます


Detected関数



先日おこなった Listen イベントでは、誰が発言したか、という情報を
引数で取得することができました。

では、タッチイベントも引数で 誰がタッチしたのか得られるか、、
と思いきゃ 引数は integer型がひとつだけ。。

実は、タッチやセンサーのイベントでは
llDetected○○○ という関数を使って、イベントを起こした人の情報を得ます。


Detected は 検出された という意味です
いま、英辞郎を調べました。 へ~

IncSearch で llDetected と検索してみましょう
10個の関数がありますね

これだけ 情報を得ることができるということです

こんかいは llDetectedName というのを使いましょう


引数について説明が必要です
integer number とは?

これは、イベントに入るときに検出されたものが
複数ある場合につかいます

こんかいは touch_start なので 一人しか検出されません

これが touch イベントだと タッチ中の人が複数人 同時に検出されることがあります。
センサーイベントの場合は 範囲に含まれる人がいっきに検出されるので、これも該当しますね。

イベントの引数の numberは検出された人の数になります

複数人いた場合は、0からはじまるインデックスが振られます

5人なら 0~4 のインデックスがふられますね
このインデックス番号を Detected の引数に渡すと、該当する人の情報が得られます

普通タッチは、一人より多く取得できると困ることがおおいので
touch_start をつかいましょう

一人だけなので 0~0 つまり、0 決め打ちで大丈夫です


リスト



取得した名前を
name_l というリスト型の変数にしまっています。

リストというのは、複数の(リスト以外の)変数をしまっておける型です。

変数が箱なら
リストは 棚です。
何番目の棚から値を取り出す、とか
何番目の棚に値を入れる とかできます。

棚と違ってリストの大きさはむにゅむにゅのびちぢみします。

リストに += でリストを足すと
リストは伸びます

リストの使い方は 一言で説明しにくいところがあるので
今回は リストに値をどんどん入れていく方法だけにします><


オーナーだけ使える機能



これも よくある機能です。
おぼえてしまいましょう。
そのほかのバリエーションを、Mizさんがこちらの記事にまとめてらっしゃいます。
http://bb2.atbb.jp/lslbbs/viewtopic.php?t=8


まとめ



  • Detected を使いこなす

  • リストに値を格納する

  • 権限別機能の基本




今後のこと



冒頭でも書いたとおり、あまりブログに時間がさけなくなってきました><
初心者用の記事は質問があったら書きます。

中級者以上の Tips を今後書いていきます。

いま、調べているのは物理関係の情報。
Havok4 が導入されたら今後メジャーになってきそうな予感です。


Wiki の裏側の話し等。
ソースはこちら
http://chiyosuke.slmame.com/e68741.html
ビューアをアセンブリ解析して、効率的なメモリの使い方や
動作速度の向上を図られています。
Chiyosuke さん かっこよすぎです。

あと、LSL Wiki や Portal にあるスクリプトライブラリ から
スクリプトをひっぱってきて挙動の勉強をしてみたいと思います。
こちらは より実践編ですね。

これからも よろしくお願いします。

LSL 講座 リンク
  続きを読む

Posted by Jvn Writer at 12:10Comments(0)LSL講座

2008年02月23日

【提供】LSL 色付けツール2


LSL CodeHighLighter 2.0 を公開します。

ブックマークレット版 もあります。


動作確認




  • FireFox 2

  • IE 6



動作報告お願いします><


機能




  • ポップアップでリファレンス参照

  • 公式WikiやBlackSheepへのリンク表示

  • LSLPortal と連動して LSL定義情報の自動更新

  • 行番号、表示・非表示切替

  • ワンクリックコピー

  • SLMaMeで改行が余分に入る問題に対応

  • 必要なときのみjsファイルを読み込むことで負荷低減




使い方




  1. ファイルを準備


  2. 次のファイルを右クリックで保存してください
    StyleSheet
    jquery ライブラリ
    HighLighter2
    Copy用Flash

    以上を、適当なWebスペースにアップロードしてください。

    jsファイルがダウンロードできなくなっています。
    こちら
    から取得ください><

  3. ブログのヘッダーに次の文字を書く

  4. SLMaMe の場合は
    管理画面>テンプレート>カスタマイズ
    の トップページ、個別記事、アーカイブ それぞれの 直前に書きましょう

    <!-- CodeHilighter 2 ここから -->
    <link rel="stylesheet" type="text/css" href="http://○○○/style.css" />
    <script type="text/javascript" src="http://○○○/jquery-1.2.3.pack.js"></script>
    <script type="text/javascript" src="○○○/HighLighter2.0.js"></script>
    <script type="text/javascript">window.onload = function(){dp.setUp({
    line:true,
    clipbrd:'○○○/clipboard.swf'
    });};
    </script>
    <!-- CodeHilighter 2 ここまで -->

    ○○○ は ファイルをアップロードしたサーバーのURLに書き換えてください。
    ラインの行番号が要らない人は、 line:true を line:false に変えてください。

    すでに pre タグでコードを書いている、という方は
    そのpreタグのクラス名を 書いてください。
     line:true,
     cls:'LSL',
     clipbrd:'○○○/clipboard.swf'
    とすれば、いけます。

    見た目をカスタマイズしたい方は、cssを書き換えてください。


  5. ブログ内に <pre class=lsl> </pre> でソースを書く

  6. < や > が色分けうまくされない場合は
    &lt; &gt; と置換してあげてください。
    htmlタグと誤認されて 色分けがおかしくなることがあります。




ライセンス



トラックバックライセンスにします。
そんなのあるのか知らないけどw

使う方は、使ったよーという記事と
この記事へのトラックバックを義務とします。

バグがあった場合の連絡経路確保のためです。
本音は、やっぱり使ってる人のサイトも見てみたいのでw

再配布はやめてください><

大規模な改造をした場合の再配布は可。
配布前に一報ください。確認します。


免責



このライブラリをつかった上で発生した
いかなる損害・もめごとも jvn writer こと 岡本 豊 は責任を取りません。
ご了承ください。

不具合・機能追加要望は 本記事へのコメント・トラックバック・はてなコメントw で受け付けます
お気軽にどうぞ。


感謝



  • LSL CodeHighlighter 製作者の sabro さん

  • BlackSheep の Miz さん

  • LSL Portal 日本語訳されている Asuka さん

  • LSL Portal 関係者のみなさん


  続きを読む
タグ :LSLTool上級

Posted by Jvn Writer at 12:10Comments(3)ツール

2008年02月23日

【講座】誰でもできるLSL Listen

こんにちは、jvnです。

昨日は久しぶりに夜更かしして眠いです。
Zzzzz


LSL 講座 リンク

サンプルソース




default{
state_entry(){
llListen(1, "", llGetOwner(), "");
llListen(3, "", llGetOwner(), "");
llListen(5, "", llGetOwner(), "");
}
listen(integer channel, string name, key id, string message){
if(channel == 1){
llWhisper(0,message);
}else if(channel == 3){
llSay(0,message);
}else if(channel == 5){
llShout(0,message);
}
}
}



復習



理解できているか確認しましょう。


  • 処理の流れがわかるか

  • if文の条件式の意味




今日学ぶこと




  • オブジェクトでチャットを受信開始する方法

  • 受信したチャットを使う方法

  • オブジェクトで話す方法




チャット受信セット



llListen でチャットの受信を開始できます。
なんでもかんでも受信したら大変なので、
フィルタをかけることができます。

引数は全部フィルタのかけかたを示しています。
ひとつひとつの意味を調べましょう。

channel チャンネル。
チャットにはチャンネルがあります。
ふつうの会話は チャンネル0 です。
−2,147,483,648 〜 +2,147,483,647
が指定できます。

+の値は、クライアント画面からチャットで発言することができます。
は 「/1 あいうえお」 と発言すると、そのチャンネルで話せます。
よく市販のスクリプト入りオブジェクトで使われていますね。

-の値は、LSLからしか発言できないので、
プリム同士の会話に使われます。


name 名前。
発言者の名前です。
誰の発言を取得するか セットすることができます。


id UUID
発言者の UUID です。
キーで だれの発言を取得するか指定できます。
ここでは llGetOwner で オブジェクトの所有者をセットしています。


string msg
発言内容でフィルタを書けます。
これは あまりつかうことはないですね。
特定のコマンドを指定する場合なんかに使えそうです。

以上です。

サンプルでは3つのリッスンをセットしています。
1スクリプトは最大65までリッスンを受信できます。

なお、リッスンで 0チャンネルのフィルタ無しを指定するのはやめましょう。
これはだめ

llListen(0,"",NULL_KEY,"");

近くにいる人全員のチャットを拾ってしまうので、サーバーに負荷をかけます。
スクリプターの掟です。絶対にやめましょう。

また、フィルターがあっても
リッスンイベントの内部にたくさんの処理がかかれていると
負荷をかける、という話しもあります。

必要なときだけ リッスンするように心がけましょう。

短時間リッスンを使いたい場合は、次のように
リッスンを止める処理を書きましょう。


touch_start(integer num)
{
integer HANDLE_LISTEN;
touch_start(integer num){
HANDLE_LISTEN = llListen(0,"",NULL_KEY,"");
llSay(0,"発言してください 私は聞きます");
}
listen(integer channel, string name, key id, string message){

// 何か処理を行う

llListenRemove(HANDLE_LISTEN);
}
}



default
{
integer HANDLE_LISTEN;
touch_start(integer num){
HANDLE_LISTEN = llListen(0,"",NULL_KEY,"");
llSay(0,"10秒以内に発言してください 私ちょっと忙しいの");
llSetTimerEvent(10);
}
timer(){
llSay(0,"リッスンを終了します");
llListenRemove(HANDLE_LISTEN);
}
}


これらのように、確実にリッスンを止める処理を書くならば、
フィルターなしのリッスンを使っても問題はないでしょう。


以前私が働いているBARの自動ドアは
リッスンでコマンドを受ける高機能自動ドアでした。
しかし、常時リッスンが動きっぱなしでした。
ある日お客さんたちと騒いでいたら、長い発言を受信してドアが壊れてしまいました^^;
運が悪くマスターが長期お休み中だったので1週間ドアがつかえずえらく不便だったのを覚えています。

LSL覚え始めだったのですが、この仕様はおかしい、と怒って
リッスンを使わない(あともうひとつ工夫をして)自動ドアを作ってマスターに差し替えてもらいました。
スクリプト覚えたてで苦労したのも、今はいい想い出です。

こういうスクリプトを書いて、平気であちこちで売るスクリプターには
怒りすら覚えます。

知らないで人に迷惑をかけないように気をつけましょう。

横道にそれましたが、フィルター無しのリッスン、開きっぱなしのリッスンはやめましょう。


受信の仕方



リッスンイベントを使います。


listen(integer channel, string name, key id, string message){
}


イベントに引数が設定されてますね?
これは、イベントを引き起こしたものが
何なのかがセットされています。

どのチャンネルで
なんて名前の人で
なんてキーをもっている人が
どんなメッセージを送ったのか

がすべてこれらの変数に入っています。
今回のサンプルスクリプトでは、チャンネルで発言の範囲を変えています。


条件式




listen(integer channel, string name, key id, string message){
if(channel == 1){
llWhisper(0,message);
}else if(channel == 3){
llSay(0,message);
}else if(channel == 5){
llShout(0,message);
}
}


先日説明したときは、
条件式は一回変数に結果を入れてからつかっていましたが、
このように条件式を直接書くこともできます。

むしろ、ふつうはこのように書くので
この形で覚えましょう。

チャンネルが
 1の場合 llWhisper
 3の場合 llSay
 5の場合 llShout
で、発言してますね。

第一引数が 今日覚えたチャンネルです。

マイナスチャンネルはスクリプトから発言する以外に
発言方法はない、とさきほど書きましたが
ここにマイナスをセットすると、
マイナスチャンネルで会話ができます。

まとめ



チャットのリッスンの仕方を覚えました。
チャンネルの指定方法は新しい概念だったと思います。
開きっぱなしのリッスン、フィルター無しのリッスンはやめましょう。
リッスンを止める処理を書くようにしましょう。

リッスンの受信は、引数に発言内容が入ってきました。
ふつうの変数として使うことができます。

おまけで、IF文の条件式を直接書く方法も学びました。

チャット関係の関数は、ほかにも少しあります。
IncSearch で [chat]で検索してみましょう。

今日学んだ内容が頭に入っていれば、他の関数も使えると思いますよ^^


次回予告




list NAMES_l;
default
{
touch_start(integer num)
{
if(llDetectedKey(0) == llgetOwner()){
llSay(0,"君はオーナーだ");
}

list name_l = [llDetectedName(0)];
if(llListFindList(NAMES_l, name_l)>-1){
NAMES += name_l;
}
}
}


タッチした人の情報を得る llDetectedXXX 系の関数を学びます。
それから、リストという型について学びましょう。
リストが使えると、情報をためることができてこれまた便利です。

みなさま、よい週末を^^

LSL 講座 リンク  
タグ :LSL初級

Posted by Jvn Writer at 10:34Comments(0)LSL講座

2008年02月22日

【提供】LSL HL2 bookmarklet


LSL Highlighter Bookmarklet



ちょっと思いついたことがあって
コードをいじっていたら LSL Highlighter の ブックマークレットができましたw
へーこうやってつくるんだ、って感じですw

残念ながら FireFox 用です。

LSL Highlight(FireFox / IE で動作確認)

IE対応にする方法、知ってる方がいたらおしえてください^^

使い方




  • 右クリックでブックマーク

  • 使いたいサイトで、ブックマークをクリック



何ができる?



pre タグで、LSLを表示しているサイトでこのブックマークレットを実行すると
LSL HighLighter 2 の機能が使えます。

お試しようにコードをはっておきます。
実行してみてください。


default
{
state_entry()
{
llSay(0,"LSL Highlighter no Bookmarklet!!");
}
}


明日は、このブログで LSL HighLighter 2 の公開をします。
ブロガーかつ、スクリプターの方必見ですよ^^

  続きを読む
タグ :LSLTool

Posted by Jvn Writer at 18:56Comments(4)ツール

2008年02月22日

【講座】誰でもできるLSL timer

jvnです。
治りそう治りそうといいながら、風邪がなかなか治りません。
今年の風邪は長引くなぁ、と思って検索してみたら
毎年同じことが言われているようです。。。


LSL 講座 リンク

今回はtimer を使った処理を考えましょう。
実践編です。

サンプルソース




integer FLAG = TRUE;
integer NUMBER = 0;
default
{
touch_start(integer num){

if(FLAG)
{
llSetTimerEvent(5); // ①
}else{
llSetTimerEvent(0); // ②
}

FLAG = !FLAG;

}

timer() // ③
{
llSay(0,(string)NUMBER);
NUMBER += 1;
if(NUMBER==10)
{
llSetTimerEvent(0);
NUMBER=0;
}
}




復習



次の点がわかるか、確認しましょう。

  • 最初のステートはどこか

  • タッチするたびに、どの部分が実行されるか



今日学ぶこと



今日は、タイマーイベントの使い方を学びます。

まず、タイマーのセットの仕方を学びます。
続いて、タイマーで起動されるイベントを学びます。
最後に、タイマーを使う上での注意点を学びます。

最後の注意点は、SIMに負荷をかけないために
とても大事なことなので必ず学んでください。


タイマーセットの仕方



タッチイベントがおこると
1回目は①
2回目は②
3回目は①

と交互に関数が実行されますね。
わからない方は、前回の LSL講座 IF を復習してください。

ここで実行されている関数が timer をセットする関数です。
引数に、何秒置きにタイマーを実行するかセットします。

5 がセットされれば、5秒置きにタイマーが実行されます。
0 がセットされれば、タイマー解除になります。

セットの仕方、以上。


タイマーの実行



察しの良い方はソースを見ただけでわかったかもしれません。
timerの時間がたつと、timer() イベントの中が実行されます。

10回 timer() が実行されたら、NUMBER の値を0にして、
タイマーをとめています。
これは、次のタイマーの注意点を考えているからです。


タイマーの注意点



LSL Portal にLSL でおこなってはいけないことについて書いてあります。
http://www.slmame.com/admin/entry.php

5秒以内のタイマーは使わないようにしましょう。

これは、今回のように動かしてすぐとめるようなものならば、該当しないと思います。
しかし、常に動かすものならば、1秒に一回処理なんてことはやめるようにしましょう。

理由は、SIMの負荷を軽減するためです。

どうして、SIMに負荷をかけてはいけないのでしょうか?
SIMは みなさんが使っているパソコンと同じコンピューターです。
最近はパソコンの性能があがってきているので、
サーバー専用機をつかわないでパソコンを使うことが増えてきているので
言葉どおり、サーバーも同じパソコンを使っているかもしれません。

LSLはサーバー上で実行されます。
ですから、重いプログラムや動きっぱなしのプログラムがあると
サーバーは処理が重くなってしまいます。

ラグや、ひどくなるとサーバー落ちの原因になることもあります。

みなさんがよかれと思ってつくったLSLが、
サーバーを落としてしまったら悲しいですよね。

LSLをつくるときは、サーバーに負荷をかけないように工夫しましょう。


テクニック1



今回は、テクニックが2つ使われています。


llSay(0,(string)NUMBER);


これは、キャストという技です。
型を変換したい場合は、このように行います。
これは、整数型を 文字型に変換しています。
llSay の2番目の引数は stringなので、
integer を渡したい場合はこのように行わなければいけません。



NUMBER += 1;


これは、 NUMBER = NUMBER + 1; と同じです。
NUMBER に 1 足すという意味です。

この2つのテクニックもよく使うテクニックなので覚えてしまいましょう^^


まとめ



今回は タイマーのセットの仕方、
タイマーイベントの呼び出されるタイミング、
キャストと 整数に数字を足す方法を学びました。

あまり新しいことはありません。
わからないことがあったら、今のうちに復習してわかるようにしましょう。

質問することはとてもよいことです。
遠慮なくコメントなりトラックバックなりしてください。

手を動かしてコーディングすることは、理解の助けになります。
コピーで終わりでなく、コーディングしましょう。


次回のサンプルソース



次回はLSLでチャットの発言をしたり、
他の人の発言を聞くための仕組みについて解説します。

サンプルソースは以前紹介したマイクスクリプトです。
こいつも見逃せませんね!


default{
state_entry(){
llListen(1, "", llGetOwner(), "");
llListen(3, "", llGetOwner(), "");
llListen(5, "", llGetOwner(), "");
}
listen(integer channel, string name, key id, string message){
if(channel == 1){
llWhisper(0,message);
}else if(channel == 3){
llSay(0,message);
}else if(channel == 5){
llShout(0,message);
}
}
}



LSL 講座 リンク  
タグ :LSL初級

Posted by Jvn Writer at 12:00Comments(0)LSL講座

2008年02月21日

【講座】誰でもできるLSL IF 質問


LSL 講座 リンク

こなさんより質問いただきましたので、回答させていただきます^^


llTargetOmega に渡している引数




例文からみると (<1,0,0>,PI,.5) の部分。 それぞれどういう意味なのでしょうか。
それとも意味を気にすることなく「そういうものだから」と入力するものなのでしょうか?


大変いい質問です。
説明を簡略化させるために、省いた部分でした。
質問をいただけたので、解説します^^

ソースの該当の部分はこちらですね。


llTargetOmega(<1,0,0>, PI, .5);


この関数に渡している値の意味を考えて見ましょう。

llTargetOmega をクリックすると、次のような構文が出てきます。

llTargetOmega(vector axis, float spinrate, float gain)

括弧の中の名前は引数の名前ですね。

axis = <1,0,0>
spinrate = PI
gain = .5

と、設定してあります。
もう一歩踏み込んで、下の LSL Portal 英 という部分をクリックしましょう。
リンデン公式の LSL 解説がでてきます。

同じ構文と、その下に関数の解説、引数の説明が書いてあります。

Rotates the object around axis at spinrate * llVecMag(axis) in radians per second with strength gain.

  • vector axis – arbitrary axis to rotate the object around

  • float spinrate – rate of rotation in radians per second

  • float gain – needs to be non-zero



jvnは英語が苦手なので、辞書をひきながら意味をなんとなく捉えてみましょう。

vector axis
 オブジェクトを回転させるための、任意の軸

float spinrate
 回転率 [ラディアス/秒]

float gain
 0じゃない値が必要


axis



1つめは、回転の軸を示します。
<1,0,0> はこなさんのお察しのとおり x,y,z の値です。

これは、こう考えてください。

 0,0,0 の点と
 1,0,0 の点を結んだ線

軸に長さは関係ないので、長さは無視します。

そうすると、X軸(オブジェクトをつくるときに出てくる赤い線のこと)
がでてきますね?

この軸を中心にして回転するといってるようです。

この引数が一番難しいです。

<0,1,0>

とか

<0,0,1>

を軸に指定すると、回る方向がどうなるか 考えて見ましょう。
実際にやったらどう回転しましたか??

<1,1,0> とか設定すると、どういう回転になるでしょうか。

まるで数学みたいな話しですが、数学です。
でも、LSLはわからなかったら実際に試して実験することができます。
これは勉強をするためにはとてもいい点です。
数学の授業ではなかなかそうはいきませんでしたよね。
ぜひいろいろ考えて実際の動きとくらべてみてください。


spinrate



回転率 [ラディアス/秒]

とあります。
ここには、1秒当たりに回転する角度を指定しなさい、って意味ですね。
1秒に360度まわるなら、360?
そう書きたいのはヤマヤマなんですがぐっとがまんです><

ここでは ラディアス で度を示しなさい、となっています。
ラディアスというのは 180度を パイで示す角度指定方法です。
パイって3.1415.。。。。。 ってやつですね。
最近の小学生は 3 と習います。 なげかわしい。

ここで設定している PI はそういうわけで、180度という意味です。

1秒間に180度回転する速さでまわす!
ってわけですね。

1秒間に360度回転させたい場合は、こう書きます。


llTargetOmega(<1,0,0>,PI*2,.5);


* は掛け算です。
PI*2 は 180度 ×2 なので 360度ということになります。

ではでは、1秒間に90度まわしたいときは、どう指定すればよいでしょう?
割り算は / とかきます。
1/2 は 0.5 ですね。

まぁ、正確にどのくらいの速さでまわしたいってことはあまりありませんよね。
私は、値を適当にセットしてみて、気分的に早かったり遅かったりしたら調整しています。

なので、こういうことがわかるようになっておきましょう。

1秒間に360度まわすときと
1秒間に180度まわすときは、どちらが早いでしょうか?

これさえわかれば、2*PI にしたり 0.5*PI にしたり、0.45*PI にしたりして、調整できますね^^
いちいち何度っていうのはあまり考えなくても大丈夫になります。


gain



3つめの説明は馬鹿にしてますね。

強さを示すようですが、「0以外でないといけない」としか書いていません。

jvnも意味がよくわからないので、適当な値をいつもいれています。
今回いれた.5 は 0.5 の意味です。


よくある変数の名前




FGってなに?




あとinteger FGの「FG」っていう単語の意味はなんでしょうか?


これは、フラグ の意味です。
0か1か示すのに、旗をイメージしてこの名前がついています。
旗が揚がっていれば1、さがっていれば0。
なので、慣れている人がみれば、 FG=TRUE となっていなくても、
FG には 0か1しか入らないのだな、とわかることができます。


そのほか、よくある変数名



変数名は自分の好きな名前で、もちろんかまわないのですが
LSLを書くたびにルールが変わると自分のためにもわかりにくいので、
自分ルールを決めちゃいましょう。

FG 以外によくありそうな変数名を思いつくまま列挙してみます。

integer KIND
 種類

integer NUM
 数

integer IDX
 インデックス
 何番目の~ というのを示す

string MESSAGE
 チャットで話す言葉か
 チャットから受信した言葉

うーん もっとたくさんあるんですが、全部書いても頭にはいりませんね><
LSL IncSearch でざーっとみると、関数の引数名がいろいろ書いてあると思います。
こういうのを見て意味をいろいろ考えて見ましょう。
そうすると、自然とどういう名前が適当かみえてくるんじゃないでしょうか^^

ちなみに、FG で検索したらでてきませんでした。
FLAG なら出てきます。

あまり略称使うのはよくないですね。
気をつけます。


以上で質問の答えになったでしょうか?

ここのところ、まだわからないという点がありましたら 聞いてください。

また、有識者の方も そこは違うだろ というつっこみや補足がありましたら
トラバなりコメントなりぜひしてください^^

LSL 講座 リンク  
タグ :LSL初級質問

Posted by Jvn Writer at 15:03Comments(3)LSL講座

2008年02月21日

【講座】誰でもできるLSL IF


LSL 講座 リンク

jvnです。
前回の講座はいかがだったでしょうか?
ペースが早い、わからないと思う方はコメントかメッセージをください。
その部分をもう一度解説します。
こういうのは聞いた方が、教える側にとっても教わる側にとってもプラスだと思います。
遠慮せずに聞いてくださいね。



integer FG = TRUE; // ①
default
{
touch_start(integer num){

if(FG) // ②
{
llTargetOmega(<1,0,0>,PI,.5);
}else{
llTargetOmega(<1,0,0>,0,0);
}

FG = !FG; // ③

}
}


復習



今日のサンプルコードです。
前回の予告から、②が書き換えられています。
また変更です。ごめんなさい。

まず、流れはわかりますか?
何を行ったときに、
どこが実行されるか(実行の内容はわからなくてもいいです)
把握できてますか?

まずは流れを理解することが大事です。
これは、講座の 基本 を見たらわかるはずですね。


変数は何が宣言されていますか?
その変数の型は 何ですか?
integer 型 は 整数です。


今日学ぶこと



今日は IF の使い方を学びます。
これを覚えると
変数の値の変化に応じて、処理を変えることができます。

今日のサンプルは、タッチを押す毎に、
回転が始まったり止まったりするスクリプトです。
これは応用が利きますね^^

その前に、型 integer の 1と0 の関係 と 定数を学びます。
1と0の関係は、コンピュータ特有の考え方なので、覚えましょう。


コンピュータの歴史



昔々のお話です。
最初のコンピュータは、真空管をたっくさんつなげてつくられていました。
真空管一個一個を ON か OFF にして、その状態を組み合わせて処理を行っていました。

この ON か OFF かという考え方は 今も生きています。

コンピュータは すべて 1か0 で判断する。
という話し、聞いたことありませんか?

この 1 が ON のこと
0 が OFF のことです。

1 を TRUE
0 を FALSE とも呼びます。


まずは、前提知識として、昔話しでした。


定数



①を見てみましょう。

integer FG = TRUE;


TRUE て変数?
でも宣言してないよ??

実は、よく使う値は あらかじめ リンデンさんが宣言しています。

この値は変数の様に変化することができないので、
定数と言います。

変数はころころ変わりますが、
定数はゆうづうがきかない頑固者です。

TRUE の正体を知るには、TRUE をクリックして、LSL PORTAL 英 をクリックしましょう。
これは、リンデン公式 の LSL サイトです。

integer TRUE = 1;

と書いてあります。
そうか、TRUE は1なんだ!

他の定数はどんなのがあるの?
という方は、 LSL IncSearch で [constants] と打ってください。
でてきたのが 定数の一覧です。
ほー

①では、integer FG を宣言して TRUE ( 1 ) をセットしました。

これは、こう書いても動作は同じです。


integer FG = 1;


じゃぁ、なんで わざわざ TRUE を使うのでしょう?

それは、意味が違うからです。

1 をセットしていたら、
ただの整数なので これは 2 とか 10 とか 24とか(jvnの年齢) 4096 とかがはいるかもしれないですね。

だけれど、 TRUE をセットしていたら
ははぁ、これは TRUE か FALSE しかはいらないんだな、と
勘でわかります。

このように、プログラムを自分以外の人が見たときにわかりやすくする
このことは、とても大事なことです。

自分しか見ないよ、というときも同じです。
半年後の自分が見てもわかるように書こう、と思いましょう。
半年後に 何か動作を変えたくなったとき、わかりにくいプログラムだと 全部書き直したほう早いです。
もしかしたら、一カ所変えるだけでいいのかもしれないのに!

定数と、基本編で話したインデントを使ってわかりやすいプログラムを書きましょう。




③の行は何をやっているんでしょうか?


FG = !FG;


FG に !FG を入れていますね。

! は 逆 という意味です。
TRUE の逆は FALSE です。

実は、この逆は TRUE と FALSE の場合だけ使えます。

3 の逆 とか 4 の逆というのも求められますが、
話しがややこしくなりますし、上級な技なので、この講座では説明をはぶきます。
0と1の逆 は定番なので覚えましょう。

ここでは
FG に TRUE が入っていれば、!FG は FAlSE。
FG に FALSE が入っていれば、!FG は TRUE。

③をとおるたびに、FG が TRUE,FALSE,TRUE,FALSE と交互に代わっていくのがわかりますね。


IF



さぁ、最後です。
②の IF 。
今回の目玉です。
IF ってどういう仕組みでしょう?


if(TRUE){
// TRUE のときはここをとおる
}else{
// FALSE のときはここをとおる
}


これだけです。
覚えるしかありません。

こんな変形技もあります。


if(TRUE){
// TRUE のときはここをとおる
}


TRUE の時だけ とおる。

今回のソースでは、タッチされるたびに、③で FG が交互に TRUE、FALSE と代わっていくので
IFで実行する関数がかわりますね。
なので、回転がON/OFF代わるわけです。

なるほど。

じつは、このTRUE とFALSE は条件式という式で得ることもできます。


FG = (NUMBER == 10);
if(FG){
}


== は 等しいとき、です。
変数 NUMBER が 10 と等しいとき、FG に TRUE が入ります。
それ以外のときは、FALSEが入ります。

【世界のナベアツ】 さんは 3の倍数のとき 馬鹿になるそうですね。
これを プログラムで書くなら こうです。


FG = ((NUMBER % 3) == 0);
if(FG){
llSay(0,"BAYO----NN"); // ばかになる!
}else{
llSay(0,"HUM"); // ばかにならない!
}


NUMBER % 3 は ナンバーを 3で割った余り という意味です。
余りが 0 なら FG = TRUE、
それ以外なら FG = FALSE
ですね。

このように、IFを使うと変数の値に応じて いろいろプログラムの動作をかえられます。
まずは、ON/OFF で動作を変えられる技 マスターしてみてください^^


今日のまとめ



今日は 0 と 1 の関係を学びました。
0 と 1 は FALSE と TRUE。
これは覚えましょう。

FALSE と TRUE は定数で、正体はinteger の 0 と 1。

(5 == 4) は FALSE
(1 == 1) は TRUE

ですね。

TRUE と FALSE を使うと IF で条件ごとに違う処理ができました。


if(FG){
// TRUE のとき
}else{
// FALSE のとき
}


この書き方は丸暗記しましょう。


次回予告



次回は、timer を使った処理を考えましょう。
実践編です。


integer FG = TRUE;
integer NUM = 0;
default
{
touch_start(integer num){

if(FG)
{
llSetTimerEvent(1);
}else{
llSetTimerEvent(0);
}

FG = !FG;

}

timer()
{
llSay(0,(string)NUM);
NUM += 1;
}



タイマーを使った処理の行いかた
タイマーを使うときの注意(SIMに負荷をかけないこと)
を学びましょう。

LSL 講座 リンク  
タグ :LSL初級

Posted by Jvn Writer at 12:10Comments(2)LSL講座

2008年02月20日

【講座】誰でもできるLSL 変な数


LSL 講座 リンク

こんにちは。
風邪がなおりつつある jvnです。


はじめに



今日もサンプルソースを変更します。。。
予習している人、ごめんなさい。
でも、その予習は無駄じゃない!


string MESSAGE = "Jvn love"; // ①

default
{
touch_start(integer num)
{
llSay(0,MESSAGE); // ②
MESSAGE = MESSAGE + " more love"; // ③
}
}



復習



ソースの流れがわからない人は 前回の講習をもう一度読んでください。

まず、○○ というステートに入るんでしたね。
それから イベントが起きると イベントの中の関数が実行されるんですよね。

こんかいは touch_start というイベントをつかっています、

touch_start イベント と llSay関数 の意味は自分で調べましょう。
簡単です 上のサンプルソースをクリックすればわかりますね?


変数




変な数



前回学んだステートの前に、変な行があります。①
llSay関数の引数(ひきすう)に変な値を渡しています。②

これはいったいなんでしょう。

こいつは変な数だから 変数といいます。
嘘です。
変数という名前は本当ですが、変な数だから というのは嘘です。
数学ででてきた x とか y と同じものです。

変数とは プログラムの実行中に変わる値のことです。
変値にしたほうがわかりやすいのに、と思いますが
変数と呼ぶことになっているので、変数と呼びましょう。


変数の宣言



変数を使うときは、 変数をこの名前で使うよ という宣言を書きます。①
ここでは string という型の MESSAGE という変数を使うよ ということを宣言しています。
LSLでは default ステートの前に書くことになっています。

おや
型 また新しい言葉が出てきました。
型ってなんでしょう。

llSay 関数をクリックしてみてください。
llSay(integer channel, string text)
なんて出てきますね。

この太字の部分が型です。

integer は整数をここに入れる、という意味です。
string は文字をここに入れる、という意味です。

channel と text は引数の意味をわかりやすくするための名前です。
ここは別に (integer a, string b) でもいいんですが、こういう名前のほうがわかりやすいですよね?

冒頭の宣言では MESSAGE と名づけていますが、この名前も 自由です。
できるだけ役割がはっきりわかる名前をつけるようにしましょう。


プログラムに出てくる変数は 方程式に出てくる変数のように いろいろなものが入ります。
整数、少数、文字、ベクトル値、回転値。。。
なので、この変数には どういう 型の値が入るか、というのを明確にする仕組みになっています。

この仕組みのおかげで、整数がほしいところに ”今日はいい日だった” なんて文字をいれるとちゃんとエラーを教えてくれます。

しばりを多くすることで、予想外のエラーを防ぐのがプログラムの考え方です。
なんだか窮屈に感じられるかもしれませんが、
覚えてくると、作法が決まっているのはわりと心地よいものです。


今日、覚える言葉は次の2つです。

変数


セットで覚えましょう。

変数ってなに?
型ってなに?

この質問に答えられるようになるまで、
ここまでの文章を読み直してください。


if( 答えられない質問がある ){
jump First;
}


あ、↑このソースはまだ気にしないでいいですw


変数に値を入れる



変数を宣言しただけでは、実際の値として使えません。
変数の中に値を入れなければいけません。

今回のサンプルソースで値を入れているのは、
①と③ のところです。

① では
文字の MESSAGE という変数を宣言するのと同時に "Jvn love" をセットしています。
宣言するときに 値を入れなくても問題はありません。


string MESSAGE;


これでも十分です。


③ はちょっとわかりにくいです。
MESSAGE に MESSAGE + "love " をセットしています。
これは "Jvn love more love" になります。
つけたしてるんですね。

文字の付け足しは

MESSAGE += "love "

ともかけます。
覚えているとちょっとかっこいい使い方です。

タッチというイベントが起こるたびに

  • llSay が実行されて

  • MESSAGE に " more love" が付け足される


以上、それだけです。


変数の値を読む



変数の値を関数に渡すと
関数は実行されます。


llSay(0,MESSAGE);


1回目はこう書いたのと同じ結果になります。

llSay(0,"Jvn love");


2回目はこう書いたのと同じ結果になります。

llSay(0,"Jvn love more love");


このように、変化する値をプログラムに書くには
変数は便利ですね。
変数 変な数って言ってごめんよ。お前はいいやつだ。


実行結果はどうなる?



では、実行してみましょう。
スクリプトをプリムに入れて タッチしてください。
もう一度タッチしてください。
もう一度タッチしてください。

他の人がいないところでやるのがお勧めです。
日本中のサンドボックスでjvnへの愛がささやかれるわけですね。
にやにや

何が表示されましたか??
どうしてそのように表示されるか説明できますか??

愛をささやく相手の名前を、あなたのLover(もしくは想い人(もしくは自分))の名前にしてみましょう。
小さな声でささやくなら llSay を llWhisper にしてみましょう。
愛を叫ぶなら どうすればいいですか? IncSearch の出番です chat で検索してみましょう。


まとめ



今日は、変数と型を学びました。
integer、string 以外にも 型はありますが、おいおい説明しましょう。
functions や events を IncSearch して、引数の型に思いを馳せてみましょう。


次回予告



次回は IF と 型 integer を学びます。
前回、次回予告で出したサンプルを今度こそ使います。
タッチするたびに 回転のON/OFFが切り替わるスクリプトを勉強しましょう。


integer FG = TRUE;
default
{
touch_start(integer num){

if(FG)
{
llTargetOmega(<1,0,0>,PI,.5);
}else{
llTargetOmega(<1,0,0>,0,0);
}

FG = !FG;

}
}


毎回言ってますが、コードは
手を動かして、打つべし、打つべし、打つべし。
体で学びましょう^^

LSL 講座 リンク
  
タグ :LSL初級

Posted by Jvn Writer at 12:05Comments(0)LSL講座

2008年02月19日

LSL関連 リンク集

風邪で一日家にいると時間があまって。。

LSL関連サイトをまとめました。


  • リファレンス 参考

  • 入門

  • 中級向け

  • 上級向け




全LSLスクリプター向け リファレンス



BlackSheep-LSL@Wiki
日本語のリファレンス情報はここが一番

LSL Portal
公式ページなので 情報は一番確実
英語メインですが日本語情報もあります

LSL IncSearch
上記2サイトを合体させたLSL検索サイト

LSL Wiki
公式の LSL Portal と別に LSL Wiki というのがあります。
関数のリストなどはLSL Portal が確実ですが、細かい挙動についてこちらのほうが詳しく説明があったりします。
また、LSL Portal ほど重くありません。
なんで情報がわかれているのか、腹立たしくもあります。。

LSL BBS
BlackSheep の Miz さんが立ち上げた 掲示板
わからないことはここ!


入門



Aipiro.com
目的別に tips がたくさん

Furry Japan in Second Life
ファーリーアバター関係のHPですが
スクリプト初級講座も載っています

College of Scripting
in-world のスクリプト大学
動いているサンプルがたくさん陳列されているので便利です


中級向け



Harayoki's
LSLの検証を数多くされています
勉強になります

LSLスクリプター
こちらも tips がたくさん

Second Life LSL メモ
いろいろ検証されていて網羅的にメモされています
ある程度わかる方は、こちらを見るのが一番早いかも。

Spirittan 開発ブログ
SL内アクションゲーム開発中の Sabro さんのブログ
LSL 色つけツールのルーツはここ!
ツールのルーツ。。


上級者向け



エースプログラマの uki-uki日記
プログラマさん かなり詳しいところまで検証されています

↓移転されました

INNX ブログ

LSLSL
こちらもかなり詳しい方です
web との連携にも言及されています  続きを読む

Posted by Jvn Writer at 20:15Comments(0)おすすめ

2008年02月19日

【講座】誰でもできるLSL 基本

LSL 講座 リンク

こんにちは jvnです。
風邪なおったかなぁ、と思ったら
具合が悪くて、会社を初早退です。
しばらくSLお休みしよう。。。と思いつつブログは更新


まずは基本



昨日の予告どおり、サンプルソースの解説をします


default // <-- ① デフォルトステート
{
state_entry() // ② イベント
{

llTargetOmega(<1,0,0>, PI, 0.5); // ③ここに好きな関数を入れてみよう

} // -->②ー1 state_entry イベントはここまで

} // -->①ー1 default ステートはここまで


コメントで要望があったので、実行している関数が違います。
基本は同じだと思ってください。

このスクリプトを プリムの中に書くと
おもむろにプリムがまわります。
ぐるぐる


今日の目標

 単純に実行されるだけのLSLを書けるようになる

もう実現しましたね。
あなた天才。

では、解説です。


導入



LSLに限らず、プログラムは
書いてあることを順番にコンピュータが実行します。

なので
 ・どのタイミングで
 ・なにを行うか

これさえ書けば、
実際に動くプログラムができあがります。

 文字をプリムに表示するのも
 タッチしてノートを渡すベンダーを作ることも
 回転するスクリューをつくるのも

LSLで動いているものは すべてこの原理で動いています。

タイミングについて
 ステート
 イベント
の項で説明します。

なにかを行う について
 関数
で説明します。

タイミングは軽く流すつもりですが
書いていたら長くなりました。
文字は多いですが、中身は薄いです。
さらっといきましょう。


LSL の実行タイミング



ステート



まず、LSLを実行すると
default という ステートに入ります。
① から ①ー1 までが defaultステートです。

ステートとはなんぞや という話しはまた今度。

「実行すると」 というのは次のタイミングです。


  • スクリプトをプリムに入れたとき

  • スクリプトのリセットを押したとき

  • スクリプトを変更して保存したとき



これらのタイミングで
default ステートに入ります。

おじゃまします


イベント



いらっしゃいませ

ステートにはいると
イベントがいくつか書いてあります。

イベントというのは タイミングを決めるものです。

 タッチしたときに ここを実行
 座ったときに ここを実行
 rezされたときに ここを実行

なんて感じに、イベントを設定することができる というわけ。

LSLでは どんなイベントが書けるのかなぁ と思った人は
LSL IncSearch で [events] と打ち込んでみましょう。
LSLで実行できるイベントの一覧がでてきます。


②に書いてあるのは 「ステートに入ったとき」というイベントです。
default に入ると、
 default に入る
 state_entry() に入る
こんなタイミングで処理が動きます。


ステートのことは触れません、といいましたが触れます。

ひとつのステートに 同じイベントをいくつも書くことは出来ません。

だから、同じイベントで違う処理を行いたいときは
ステートを複数書きます。

あーあ 説明しちゃった。


ステートも イベントも
{ から始まって
} で終わります。
この中括弧の使い方は覚えましょう。
LSLの基本です。

始まりと終わりの {} はスペースや改行無しで書いてもかまいませんが、
見にくくなるので、 スペースで頭をそろえましょう。
jvnは
 ステートの {} は行の頭
 イベントの {} はタブを1ついれてから書く
とやっています。
スペースの数は各々の勝手ですが、
ひとつのプログラムの中では統一したルールにしましょう。

これは 別にやらなくてもプログラムは動きますが
ソースを見やすくするためには とても重要な点です。
これを 「インデントを入れる」 と言います。

友達のソースを見て

default
{
state_entry
{
llSay(0,"Uhehehehee");
}
}


とか


default{state_entry{llSay(0,"Uhehehehee");}}


とか書いてあったら
「インデントをそろえてみたら 見やすくなるんじゃない?」
と言うとちょっと出来る人っぽくなります。

実際に言ったら ムッ とされました。
気をつけましょう。
出来るひとはねたまれます。


タイミング のまとめ



イベント という タイミング で LSLの実行の順番が決まる

ステート は イベント の セット である。

ということを覚えましょう。


何を行うか



関数



実際に何を実行するか 見てみましょう。

イベントの中には
関数 というものを書きます。
関数 は何を行うか を書くものです。

サンプルソースの ③ のところですね。

LSLで使える関数を 例のごとく LSL IncSearch で検索してみましょう。
[functions] で出てくるのが関数の一覧です。

334 個もでてきました。
これ全部覚えるのは大変です。

なので、関数の基本的な使い方を覚えたら あとはリファレンスを見ましょう。
それで十分です。
jvnも全部覚えていません。
ていうか、覚えられないから 検索ツールを作りました。

やっているうちによく使う関数は 覚えてしまいます。
何回も手で打ってるうちに覚えちゃうからです。

今後のこの講座では

 主だったイベントについての説明
 関数の使い方の説明

をやる、と思ってください。


さて、今日のサンプルソースは

llTargetOmega(<1,0,0>, PI, 0.5);

を実行しています。
プリムを回転させる関数ですね。

 関数名();

 関数名( 値 );

が、関数の書き方です。

; は関数のおしまいに書きます。
これがないと エラーが出ます。
意外にはまるので 気をつけましょう。


関数に渡す値のことは 引数 といいます。

jvnはこれをずっと いんすう と読んでいました。
会社に入ってばかにされました。
これは ひきすう と読みます。
いいですか ひきすう ですよ。
牛がもぐもぐするのは はんすう です。

ひきすう 覚えましょう。

引数が必要な関数があれば、必要ない関数もあります。
関数の説明と一緒に、引数の説明も必ずあるので
リファレンスを調べましょう。


llTargetOmega(<1,0,0>, PI, 0.5);


関数の説明と 引数の説明は マウスでクリックしたら出ます。
以上。

わはは。


まとめ



関数 は 実行すること を書く。

実行の仕方を 引数 で設定しなきゃいけないこともあります。


次回予告



次は タッチイベント の説明と
変数 というものを勉強します。

変数は 引数に渡す値をちょっと工夫して持つための仕組みです。


integer FG;

default
{
touch_start(integer num)
{
llSay(0,(string)FG);
FG = !FG;
}
}


くれぐれも、ソースをコピーすることなく
実際に手を動かして打ち込みましょう!

では また次回。

LSL 講座 リンク  
タグ :LSL初級

Posted by Jvn Writer at 14:26Comments(2)LSL講座

2008年02月18日

【講座】誰でもできるLSL 予告

LSL 講座 リンク

こんばんは、jvnです。
今日は会社があるので風邪薬を飲みませんでした。
そしたら調子がよかったので お治ったかな、と思って
いちおうさっき風邪薬を飲んだらまた調子が悪くなりました。
もしかして 風邪治ってる? 薬のせい?


LSL講座をはじめます



今日からLSL講座をひらこうかな、と思ってます。
LSL色つけツールも使ってみようかと。

といっても ためになるブログやホームページはたくさんあるので
特徴となる点が必要ですね。

なので こうしましょう。
誰でもできる LSL ということで 全くプログラム経験のない人を対象とします!


対象者



次のような人たちを対象とします。


  • プログラム経験したことがない

  • ものはつくれるけど LSLはちょっと><

  • jvn大好き




内容



できるだけ、動くサンプルを提示します。
ただ動くだけではなくて、組み合わせて実際に使える仕組みにします。
動いて うわ おもしろい って経験すると絶対に学ぶ速度があがります。

講座を受けるみなさんは、ソースをコピーするのではなく、
実際に手を動かしてコードを書いてください。
まねでもいいです。
手を動かすことが大事なんです。

LSL IncSearch と LSL 色つけツール を活用して
わからない点はどんどん調べてください。

日本語解説では Blacksheep Wiki の右にでるサイトはありません。
また、英語と少しながら日本語の説明もある 公式 LSL Wiki の情報は一番確実な情報です。
jvn のつくったツールはこの2つのサイトをソースにしています。
できるだけあっちこち見ないですむように つくったツールでもあります。
出来る人は自分であちこちみられるとおもいますが、
慣れない人はあちこちみつけるのが大変だと思うからです。


コメントしてください



ということで 明日から講座を始めたいと思いますが
みなさん、ぜひコメントしてください。

質問したほうがみなさんの理解を助けることになるでしょうし
私としても、どのあたりで みなさんがつまづくかわかりませんから、
質問していただけると 説明しやすいです。

あと、コメントがあるとやる気がでますのでw


最後にサンプルソース




default{
state_entry(){
llSetText("study! lsl!",<1,0,0>,1.0);
}
}


解説は明日します。
というか、マウスでなでまくれば理解出来ると思います。
まずは 予習。
それから、解説を読んでください。

くれぐれも 手を動かしてコードを書いてください。
それでは、また明日。

LSL 講座 リンク  
タグ :LSL初級

Posted by Jvn Writer at 20:32Comments(5)LSL講座

2008年02月17日

SL関連のキーワード

jvnです
風邪クスリを飲んだら頭がだるいです
これならお酒飲んでも同じですね


今日はネタがないので
SL周りのキーワードを集めてみます
これからSLはじめようとしている人の足がかりに
たまに更新するかも


オフィシャル



SL セカンドライフ
LindenLab SLを提供している会社
LSL SLの中で動くプログラミング言語
プリム オブジェクトの構成要素 部品 普通は球とか立方体の単純な形のみ
スカルプ・Sculpture 複雑な形のプリム 外部3Dモデラーでつくって取り込む


役割



クリエーター ものづくりを得意とする人 身に着けるものくらいの感覚
ビルダー 建築物づくりを得意とする人
テクスチャ屋 つくったオブジェクトに貼る画像を作る人 テクスチャ屋って言うかな
スクリプター LSLを書く人
DJ ネットラジオを通して、SL内で音楽配信する人


Webサービス



Wassr SL連動の独り言ツール
SLMaMe SL専用ブログサービス
NaviSL SL専用SNS


サイト



DJやりたい人へ
頭にきたどっとこむ
ネットラジオのやり方

スクリプターになりたい人へ
Makapu@BlackSheep
BlackSheep-LSL@Wiki
LSLのわかりやすい解説
Miz さんというスクリプターが書いています

LSL Portal
公式 Wiki
正確な情報はここに集まりますが 英語なのでわかりにくい・重い
Asukaさんが日本語訳作業をされています

Jvn の LSL IncSearch は上記2サイトの情報を 簡単に検索するためのツールです


眠いから 以上

スクリプト関連に偏重してる気がします
違う観点から つっこみ歓迎  

Posted by Jvn Writer at 19:06Comments(0)リンデンラボ

2008年02月16日

【LSL配布】 イベント用 マイク & LSL色付けツール

こんにちは。かぜのなおらないjvnです。
マスクが顔の一部になりつつある。。


今日は、緑の文字でしゃべるためのスクリプトを公開します。
イベントのときに、司会者の人が使ったりすると他の発言にまぎれないので便利です。

先日行ったライブでは、友人のRheya が同時通訳にこのスクリプトを使っていました。
Fortune Diner Valentine's Day Live

○○(japanese): 次の曲はなんたらかんたら
↑アーティストの名前

本人は翻訳うまくできなかった、と言ってましたがすごく助かりました。
英語できるのはやっぱりいいなぁ。


簡単なスクリプトですが、意外に使えます^^


ソースはこちら。


default{
state_entry(){
llListen(1, "", llGetOwner(), "");
llListen(3, "", llGetOwner(), "");
llListen(5, "", llGetOwner(), "");
}
listen(integer channel, string name, key id, string message){
if(channel == 1){
llWhisper(0,message);
}else if(channel == 3){
llSay(0,message);
}else if(channel == 5){
llShout(0,message);
}
}
}


使い方



  • 体に装着してるものに、このスクリプトを放り込みます。オブジェクト名が発言者名になるので、透明なオブジェクトに自分の名前をつけて装着するのがいいでしょう。

  • 「/1 今日はお集まりいただきありがとうございます」 のようにしゃべると、オブジェクトが緑文字で発言します

  • /1 がささやき。/3 が普通の発言。/5 がシャウト。で、おのおの声の届く範囲が異なります。



とても簡単なので、ぜひソースの仕組みを理解してつかってください。
なお、このスクリプトはコメント書き込みライセンスとします。
もっていく方は、コメント欄に一言お願いします。
jvnの自己満足のためですw


LSL Code HighLighter 2



今回のソース表示に、LSL色付けツール2 べーたばんを 使っています

機能




  • LSLソースが色付けされる

  • イベント名・関数名・コンスタント名 をクリックすると簡易リファレンスが表示される。

  • ワンクリックコピー 未実装




特徴




  • イベント・関数・コンスタント名 の定義ファイルは 自動更新

  • jquery 以外のライブラリはつかっていないのでファイル数が少ない・軽量




まだベータ版なので公開しません。
もう少しもみます。



使いたい方は、コメント欄にご記入ください。
ご連絡さしあげます。

機能要望もコメント欄にて募集中です。
行番号の表示は必要かな?  
タグ :LSLTool技術

Posted by Jvn Writer at 11:43Comments(10)

2008年02月15日

コミュニティツールとしてのSL

会社の後輩がカーリングに誘われた、と言ってました
さすが オリンピックを開催した長野です
わたし? スポーツは苦手です もやしです


自分の考えを伝えるツール



ある物事に関して 自分の考えがあるとする

その考えをあなたはどう表明しますか?

狭いコミュニティで思想を言うか
広いところに思想を書くのか


ブログというツールはどちらにも利用できるものだと思う
万人が読める というのと
万人に読ませるものを書く というのは別物だからだ

Web2.0 的に言うと
万人に読ませることができるようになったのは
多きな革新らしいが

私を含め、ほとんどの人は万人に向けてブログを書く、と
いうことにしり込みをする

けれど、それでいいのかという気持ちも無くはない


SLは狭いところで伝えるもの



SLを考えよう

SLは、万人にメッセージを伝えるよりも
同じ場を共有してる人に メッセージを伝えるツールなのかな、と思っている

何か伝えるのに
あっちいってこっちいって
SL内を出歩く人は。。。
あ、ちんどんさんがそうか

まぁ、あまり一般的ではない


たいていは ブログで情報を発信して
それを見た人たちがSL内で議論している

新聞で読んだことを 学校や居酒屋で話題にするようなイメージ

SLも世界につながっているのにね

では、SLは Webの流れを逆流しているのか?


話題を変えよう




これは 不思議の国のアリスにでてくる
いかれ帽子屋風に声を出して読んでほしい
そのとき、人差し指は顔の横で天を指すべきである
どうでもいいけど

自分がなにごとかを成したいとおもうとき
実現方法はおおきくわけると2つある

社会全体のためになることをするか
自分の身の回りの人のためになることをするか


高校生のころに読んだ Go という本が好きだ



俺は日本人でも朝鮮人でもない
俺にレッテルを貼るな
という、主人公の叫びに共感するのもあるけれど

けして気負わないで
けれど 思想をもった言葉がぼろぼろでてくるところがわりと好きです

主人公が 父にボクシングを習うシーン
トレーニングのはじめに 父は主人公に言う

 右腕を前に突き出せ

 そのまま 時計まわりに回れ

言われるがままに主人公がまわる

 そのこぶしの届くところが お前の守るべき場所だ

かっこよすぎる。
かっこいいと思うのは 私だけではないと思う。


話題を戻そう



人差し指は天をむいていますか
どうでもいいけど


思想を伝えるのも
世の中に何かを成すことだ

そういう観点で見ると、狭い世界で思想をぶつくさるのは
Go の父親の主張にかなう

SLは、Webの世界でありながら
エリアを限定する作用を持っている

じゃぁ、その辺の居酒屋で好きなもの同士話しをすればいいではないか、というと
そうではない。

同じ考え方を持ったひとが
あなたの住んでいる地域にいるとは限らないからだ

そこに SL の Web らしさが発揮される

今までの世界では
いくら考えを深めようとしても、
結局は 自分の身の回りに同好の士がいなければ伝わらなかった
もしくは、多数の少数派が集まる都会に行くのが常だった

けれど、SLでは 田舎にいながらにして
自分と同じ趣味を持つ人たちと 場を形成することができる

物理制約から 人を解き放ち
マイノリティを集める仕組みが ここにある

それは新しい世界を生み出す土壌を示す


結論



広い世界になにごとか成したい と思うのと
自分の手の届く世界を守りたい と思うのは
どっちも大切でかっこよい

SLは後者を実現しやすいツールであり
ブログとは 補間関係にある

SLで、物理制約にとらわれず
議論することができるのは 新しい世界を生み出す土壌になりうるのだ  
タグ :Web2.0雑感

Posted by Jvn Writer at 17:20Comments(2)社会

2008年02月14日

コミュニケーションツールとしてのSL


気づいたらバレンタインデーでした
オフィスの机の上が甘味だらけ。
甘いにおいが幸せです。


SL の話し



SLやってると クリエーターが多いな、と実感します
ユーザが自分の創意工夫で 世界を広げていける
そういうセカンドライフだからこそ なんでしょうね

クオリティの高いものが
ものすごいスピードで作られています。


ウェブのコラボレーション文化



実はこれって ウェブならではの特質です。

先日読んだ ウィキノミクスという本は、ウェブを通じて産まれつつある
コラボレーションビジネス について述べています。



昨今、分業たりえなかった産業が独占データを開放し、
無数の小(個人含む)の力を結集させ
作業効率、利益を飛躍的にアップさせています。
(ex.今まで技術独占企業だったボーイングが、サプライチェーンで分業を行いはじめた)

ネットというツールのコラボレーションしやすさが、その傾向を後押ししており
この本の筆者達自身、カナダとイギリスの自宅にいながらにして
24時間、いつでもSkypeで連絡を取りながら
同じオフィスにいるかのように 作業を進めたとか。

Linux という Microsoft に対抗するOS が作られた経緯や
エイズ対抗薬を作るプロジェクトの話しなど
読んでわくわくする本でした。


SLに話しを戻して



Lovers の店員は、おもてなしや、
人と話すことが好きな人たちが店員をやっています。
これは、まぁコミュニティBARを銘打ってるいじょう当たり前ですね。

偶然にも、店員はそれぞれ
 ビルダー、テクスチャ、スクリプタ、センス
という特技を持っています。

イベントだー わー
引越しだー わー
改装だー わー
ドアが動かなくなったー わー

その都度 わいのわいのやると、大抵のものができあがります。


個人的になにかつくりたいときも、時には手伝いあったりします。

たとえば、先日は magnolia さんが 趣味でつくったもの用にオブジェクトベンダ をほしいとおっしゃって

具体的案を聞く(5分)
オブジェクトの雛形をマグさんが作るく(5分)
jvn がスクリを組む(30分)
渡して、実際に挙動を見てもらう(5分)
でほぼできあがり
テクスチャは今度貼るそうです。

これが、総計1時間以内にできました。

こんなこと、SLの世界ではどこでも起きていることなんだけど
じつは これってすごいんじゃないかな。

二人は会おうと思ったら 片道数時間かかるところに住んでるんです。
電気代以外の料金をかけることなく、これだけのスピードでコラボレーションができる、というわけです。

そりゃぁ ボーイングだって安価に高性能飛行機作れるわ。


日本のあちこちにいる人が
いや 世界のあちらこちらにいる人が

遠くにいながらにしてひとつの空間を共有し
ひとつのものをつくりだし
時にはひとつの場さえつくりだす(私たちだと BARという空間)可能性


まとめ



実はSLって、SLの中だけで完結してなくて
RLの視点からみたら、ものすごいコラボレーションツールたり得るのではないか
と気づきました。


なんとなくいつも同じところにいる人たちで
たまに手を貸し合って何か作ってるように感じてたんだけど
RLのフィルターに通しなおしてみると ものすごいことやっていたんだな、という
いまさら再発見な話し

しばらくSL内に住んでると そういったことが 当たり前になりすぎちゃって 気づかないもんですね。
  
タグ :Web2.0

Posted by Jvn Writer at 17:20Comments(0)社会

2008年02月14日

LSL 色つけツール0.2 進捗状況

土地もちは
お金が足りなくなりますね。


今日は LSL Highlighter 2 の進捗状況 を報告します。



  • 色分け


    • LSLの 構文(for や if など)、関数、定数、イベントを色分け

    • 機能完

    • 現状IEだとおかしくなる
    • デザインを練る


    • 色分けのための定義情報は自動的に最新のものになる

    • 完了


  • LSLの 関数・イベント・定数 にリファレンスへの参照をつける


  • 関数にマウスを当てると、簡単な説明と リファレンスへのリンクが現れる

  • 機能完

  • デザインを練る


  • ポップ内リンククリックでリンク先窓表示(LSL IncSearch 同様の効果)


  • ライブラリをつかわず、自力で機能つくれないか


  • 無駄な負荷を避ける


    • javascript でつくるが、LSL構文が本文に含まれない場合、ライブラリを読み込まない

    • 完了


  • コピー機能


    • ワンクリックコピー





    jquery を使っています。
    機能実装の アイディアやアドバイスばしばし 受け付けていますので
    よろしくお願いします。

    最新進捗



    以下のページの情報は、常に最新情報です

    LSL Highliter 2.0 構想メモ  

Posted by Jvn Writer at 00:10Comments(0)

2008年02月12日

ご飯をおいしく食べるには


 今日のランチは、学校時代の先輩のお店に行ってきた。

週に一、二回は顔を出しているのに 先週は顔をだせなかった。

いつもと同じように

 日替わりランチ

を頼み、本を読んで待っていると
若鶏のブルーチーズソースがけ が出てきた。

私は、ブルーチーズが好きで。
これがまた若鶏のカリカリとよくあって
おいしくておいしくて。

おいしいなぁ、と食べながら
この おいしいなぁ を先輩に伝えたいと思った。

 おいしくて 昼間からワインを飲みたくなっちゃいましたよ。

なんか違う。

言葉じゃない。
態度で示すんだ。

まず、ゆっくり味わって食べよう。

それから 表情に出さないと。


無表情でご飯を食べていた自分に気づく。

一口一口をいとおしむように、
おいしさを表情に出してみた。

そしたら おいしさが増した。
すごく増したのではないけど、確かにおいしさが増した。
2割増しぐらいおいしい。

今まで無表情でご飯を 食べていたのかなぁ、と思うともったいない。

そうか、今日これに気づいたことで
人生が 2割増しぐらい豊かになったんだ。

うちに帰ってご飯を食べるとき、おいしそうに食べよう。
そしたら、母もうれしいだろう。

将来結婚したら、おいしそうに妻のご飯を食べるのだ。
そしたら、妻もうれしいだろう。

私もおいしい。
母や妻がうれしかったら、私もうれしいだろう。


小さな発見が
大きな発見になって

みぞれの降る中
ひとり、幸せな  今日の昼下がり  

Posted by Jvn Writer at 12:53Comments(2)つれづれなるままに