ソラマメブログ
プロフィール
ぺんぎん
ぺんぎん
どもっす( ◎v◎ )
ぺんぎんっす。

「ぺんぎんさん」でいいっす。
「ぺんさん」でもOKっすよ。
何だって良いんっすけどね。
[個体名:Naoya Bellic]
(非商用)
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人

2010年09月18日

9/15(水)のオフィスアワーっす

オフィスアワー3回目の内容についてまとめたっす。
オフィスアワーっぽいオフィスアワーになってたっすね。
どうもぺんぎんっす( ◎v◎ )


使った原稿など
9/8のオフィスアワーまとめ
9/11のオフィスアワーまとめ


string name = llDetectedName(0);
llOwnerSay(name);

llOwnerSay(llDetctedName(0));
は同じなの?

第2回で使うお題に関してっすね。
どちらでもオブジェクトは同じ発言をするっすね。
llDetectedName(0)の値を2回以上使うなら上の方が良いっす。
1回しか使わないならどっちでも良いっす。
それぞれ一長一短あって、
上は遅くなるけど可読性(読みやすさ)が良くなる場合がある。
下は速いけど可読性に劣る。
っていう具合っす。
自分ならこの場合llOwnerSay(llDetctedName(0));とするっすね。
お題は説明用にと作ってあるもんっすから、無駄な部分もあるっす。
その部分を的確に指摘してもらえると、ちょっと嬉しくなるっすね。
やりがいがあるっす。

collision_startイベントが起きないんだけど…
物理でない2つのオブジェクトを間隔を空けて置いて、
ちょっとずつ近づけてみるというスクリプトだったっす。
collision_startイベントが起きた時のオブジェクト間の距離を
出してみようという実験っすね。
collision_startイベントが起きなかったのは
「どちらも物理ではないオブジェクトのコリジョン(衝突)」
だったからっす。
このことについてはcollision_startイベントの
英語のページに書いてあるっす。
日本語のページには書いてなかったっす。
見比べてみてくださいっす。
こんな事があるので英語ページを推奨してるわけっすよ。

次のネタが面白かったっす。
まとめるのに一苦労したっす…
話があっちこっち飛んでたので整理して書くっすね。
パラグラフに分かれてるっすけど、一連の流れで出てきたことっす。
touch_startイベントやcollision_startイベントが
「起きるとき」「起きていないとき」、裏で何が起こってるの?

今日、18日の講座2回目の内容にも関係あるっす。
LSLは「○○されたとき△△する」っていうのがベースにあるっす。
逆に言えば、○○されなければ何もしないっす。
ここら辺のことは「イベントドリブン」の仕組みとかを調べると良いっすよ。
○○されなければ動かない、っていうのはちょっと違う感じっす。
動いてることは動いてるっす。
ずーっと動いてて、○○されたときに△△するっす。
それまでは何もしないっす。
…良い説明があれば教えてくださいっす。

listenが「重い」と言われてるのは何で?
何もしないならtouch_startとかと同じじゃないの?

見えない部分の事なので、以下は想像っす。
まず、touch_startイベントはタッチされたとき、
listenイベントは条件に合う発言があったときに起こるっすよね。
listenが重いとされてるのは、「条件に合うかどうかの処理」が
行われてるからじゃないかと自分は推測してるっす。
発言が条件に合ってるかどうかを判定しないといけないので、
とりあえず全部聞く→判定→listenイベント起動
という流れになってるんじゃないかと思うわけっす。
タッチ→touch_startイベント起動
よりも判定の分だけ処理が多くなるんじゃないっすかねぇ?
何度も言うっすけど、想像っすよ。
touch_startは「タッチされましたよー」と教えてくれて、
listenは聞き洩らさないように必死になってる感じっす。
touch_startとかとlistenがどれほど違うかは試したいっすね。

スクリプトの外の部分って難しいよね
そうっすね。

でも、そういうのを想像するのも良いよね
そうっすね。

llSayシリーズではllRegionSayが一番軽いんじゃないか疑惑
昔懐かしのネタっすね。
距離に関する判定が無いので、その分だけ軽い?ってことっす。
隣接するSIMについても考える必要がないっすね。
あれ?これって結論出てたっすかね?

llListenで条件を絞っても、listenイベント内でif文は使う?
必要なら使うっすよ。
チャンネルが変わったり(ランダムに変更することが多いっすよね)、
Aと発言があったら処理Bを、Cと発言があったら処理Dを、
という発言内容によって処理を分けるときとか、いろいろ考えられるっす。

ここまでが流れの中で出てきたことっす。
次からは違う話っす。

コンパクトに書くのも大事だよね
そうっすね。

最近の髪の毛のリサイズスクリプト事情
ちょっと前までは全てのプリムにスクリプトが入ってたっすね。
上の方で書いたっすけど、イベントが起きてないスクリプトも
止まってるわけじゃなく動いてるっす。
なので、スクリプトの本数が多くなれば影響も出てくるわけっす。
多数のスクリプトに分けた理由はllSetLinkPrimitiveParamsの
Delayにあるっす。
LSL portalで見ると、Delayに0.2と入ってるっすよね?
これは1回実行するごとに0.2秒止まっちゃうってことを表してるっす。
それが100プリム分、100回だと0.2秒×100=20秒になるっす。
そんなに待ってられないので100本のスクリプトに分けて、
「カタチを変えろ!」とそれぞれに命令を出してやることで
Delayを1回分の0.2秒で済ませようとしてたわけっす。
必要が無くなったらスクリプトを消せるものだったり、
llGetLinkPrimitiveParamsやllSetLinkPrimitiveParamsFastで
処理を行って、1本のスクリプトだけで済ませたのも出てきたっすね。

髪の毛屋さんはスクリプトも自作してる?
スクリプトもオブジェクトも自作してるヒトって、そう多くない印象っす。
統計を取ったわけじゃないんっすけどね。

ローカル変数の名前って重複させると問題ある?
エラーが出なければ問題ないっす。
でも、後で見たときに混乱するっすからオススメはしないっす。

integer a; と integer a = 0; のどちらで宣言した方が良い?
ちょっと試してみたんっすけど、Monoだと速度差は誤差の範囲っす。
LSL2では試してないんっすけど、後者の方が圧倒的に速いらしいっす。
なのでこれもケースバイケースっすね。
値のセット漏れを防ぐために無効な値で初期化するのは良くやるっす。
key owner = NULL_KEY; とかっすね。



18日(土)はオフィスアワーじゃなくて講座の日っす。
場所を間違えないようにっすね。






同じカテゴリー(デジアカ)の記事
 全6回のまとめっす (2011-02-07 19:50)
 締め切りについてっす (2011-01-12 00:35)
 講座5回目の宿題についてっす (2010-12-19 23:46)
 質問は12月いっぱいまでっすよ (2010-12-05 14:02)
 講座6回目っす (2010-11-21 01:09)
 講座4回目の宿題についてっす (2010-11-13 16:53)

Posted by ぺんぎん at 02:36│Comments(0)デジアカ
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。