2008年06月29日
2008年06月21日
2008年06月20日
2008年06月18日
2008年06月18日
2008年06月16日
角田健一ビッグバンド
昨日、久しぶりにコンサートに行ってきました。
前半は武満徹の作品集、後半はJAZZの名曲集という構成で、とにかくアレンジが凄い!
感動してちょっぴりメガネが曇ってしまいました。
帰りにCDも買ってきました。
CDジャケットです。
角田健一ビッグバンドのホームページ
前半は武満徹の作品集、後半はJAZZの名曲集という構成で、とにかくアレンジが凄い!
感動してちょっぴりメガネが曇ってしまいました。
帰りにCDも買ってきました。
CDジャケットです。
角田健一ビッグバンドのホームページ
2008年06月16日
Second Life Release Candidate
Second Life Viewerはスクリプトに漢字を使うと文字化けして見れません。
ところがテスト版のSecond Life Release Candidateを使うと、ばっちり漢字が使えます。
私のように英語に弱いスクリプタでも日本語でコメントが書けます。
また、解説書などのサンプルスクリプトの漢字も読めるようになります。
ダウンロードURLは
http://secondlife.com/support/downloads.php
です。
ページ下のRelease Candidate Viewersの欄からダウンロードできます。
他にも将来リリースされる機能などが追加されていますので新しいもの好きには
たまらないでしょう。
なお、正規版とは別にインストールされるので、正規版も使えます。
ところがテスト版のSecond Life Release Candidateを使うと、ばっちり漢字が使えます。
私のように英語に弱いスクリプタでも日本語でコメントが書けます。
また、解説書などのサンプルスクリプトの漢字も読めるようになります。
ダウンロードURLは
http://secondlife.com/support/downloads.php
です。
ページ下のRelease Candidate Viewersの欄からダウンロードできます。
他にも将来リリースされる機能などが追加されていますので新しいもの好きには
たまらないでしょう。
なお、正規版とは別にインストールされるので、正規版も使えます。
2008年06月16日
スクリプト講座11 コメント
スクリプトによく//という文字が入っていますが、これはコメントです。
リンデンスクリプトでは//の後ろから行末までがプログラムとして無視されます。
ここに説明を書いておけば後々のメンテナンスに便利ですし、他人が見ても参考になります。
例えば、
--------------------------------------------------------------------------------------------------------------
touch_start(integer total_number) // User clicked.
--------------------------------------------------------------------------------------------------------------
とか、スクリプトの冒頭で
--------------------------------------------------------------------------------------------------------------
//
// Test script - 08.06.16 - Version 1.0
//
--------------------------------------------------------------------------------------------------------------
のように使います。
(今のところ漢字は使えないようです)
それでは、また次回お会いしましょう。
リンデンスクリプトでは//の後ろから行末までがプログラムとして無視されます。
ここに説明を書いておけば後々のメンテナンスに便利ですし、他人が見ても参考になります。
例えば、
--------------------------------------------------------------------------------------------------------------
touch_start(integer total_number) // User clicked.
--------------------------------------------------------------------------------------------------------------
とか、スクリプトの冒頭で
--------------------------------------------------------------------------------------------------------------
//
// Test script - 08.06.16 - Version 1.0
//
--------------------------------------------------------------------------------------------------------------
のように使います。
(今のところ漢字は使えないようです)
それでは、また次回お会いしましょう。
2008年06月16日
スクリプト講座10 New Scriptの解説9
今回はNew ScriptのllSayについて解説します。
New Scriptの実行文はllSay(0, "Hello, Avatar!");とllSay(0, "Touched.");です。
なんでllSay("Hello, Avatar!");としないのか?0ってなんだ?という疑問が残ります。
この0はチャットチャンネルです。TVのチャンネルと同様これが一致しないと会話ができません。
0チャンネルは唯一チャット画面に出るチャンネルなのです。
1以上のチャンネルはチャット画面に出ません。
では何に使われるかというと、主にオブジェクト間の会話に使われます。
会話を聞くにはllListen関数とlistenイベントハンドラを使います。
これについては改めて説明しましょう。
今回でNew Scriptの解説はおしまいです。
皆さんお疲れ様でした。
それでは、また次回お会いしましょう。
New Scriptの実行文はllSay(0, "Hello, Avatar!");とllSay(0, "Touched.");です。
なんでllSay("Hello, Avatar!");としないのか?0ってなんだ?という疑問が残ります。
この0はチャットチャンネルです。TVのチャンネルと同様これが一致しないと会話ができません。
0チャンネルは唯一チャット画面に出るチャンネルなのです。
1以上のチャンネルはチャット画面に出ません。
では何に使われるかというと、主にオブジェクト間の会話に使われます。
会話を聞くにはllListen関数とlistenイベントハンドラを使います。
これについては改めて説明しましょう。
今回でNew Scriptの解説はおしまいです。
皆さんお疲れ様でした。
それでは、また次回お会いしましょう。
2008年06月16日
2008年06月16日
2008年06月15日
スクリプト講座9 New Scriptの解説8
さて、今回はNew Scriptを2つ作るとどうなるか実験してみます。
まず「新しいスクリプト」ボタンを2回押して2個のスクリプトを作ります。
New Scriptを次のように書き換えます。
New Script1を次のように書き換えます。
さて実行してみましょう。
1つのオブジェクトに複数のスクリプトがあるとそれぞれ独立して実行されます。
人のスクリプトを見るときはこの点に注意しましょう。
またリンクされたオブジェクトにも複数のスクリプトが入っている場合があります。
それでは、また次回お会いしましょう。
まず「新しいスクリプト」ボタンを2回押して2個のスクリプトを作ります。
New Scriptを次のように書き換えます。
New Script1を次のように書き換えます。
さて実行してみましょう。
1つのオブジェクトに複数のスクリプトがあるとそれぞれ独立して実行されます。
人のスクリプトを見るときはこの点に注意しましょう。
またリンクされたオブジェクトにも複数のスクリプトが入っている場合があります。
それでは、また次回お会いしましょう。
2008年06月15日
スクリプト講座8 New Scriptの解説7
さて、これまでNew Scriptを解説してきました。
残るのはtouch_start(integer total_number)ですね。
total_numberの型はinteger(整数)なので文字表示専用のllSayでは表示できません。
そこで(string)を使います。
(string)は型変換(キャストといいます)をします。 どんな型でも文字にしてしまうのです。
これは特にスクリプトの動作確認に重宝します。
では(string)を使ってtotal_numberを見てみましょう。
スクリプトはこうなります。
どうですか、クリックするとtotal_numberがチャット画面に出ます。
ここで+は"total_number = "と(string) total_numberという文字を連結しています。
文字同士を+でつなげることができるのです。
この辺はJavaScriptと似ていますね。(独り言)
これでNew Scriptの正体が大体わかったと思います。
それでは、また次回お会いしましょう。
残るのはtouch_start(integer total_number)ですね。
total_numberの型はinteger(整数)なので文字表示専用のllSayでは表示できません。
そこで(string)を使います。
(string)は型変換(キャストといいます)をします。 どんな型でも文字にしてしまうのです。
これは特にスクリプトの動作確認に重宝します。
では(string)を使ってtotal_numberを見てみましょう。
スクリプトはこうなります。
どうですか、クリックするとtotal_numberがチャット画面に出ます。
ここで+は"total_number = "と(string) total_numberという文字を連結しています。
文字同士を+でつなげることができるのです。
この辺はJavaScriptと似ていますね。(独り言)
これでNew Scriptの正体が大体わかったと思います。
それでは、また次回お会いしましょう。
2008年06月15日
スクリプト講座7 New Scriptの解説6
さて、New Scriptではチャットに表示される文字を変更するのが面倒です。
そこで一番上に文字を設定する文を作りましょう。
--------------------------------------------------------------------------------------------------------------
string g_entry = "Hello, Avatar!";
string g_touch = "Touched.";
--------------------------------------------------------------------------------------------------------------
ここに変更したい部分をまとめて書きました。
g_entry、g_touchは変数といいます。
詳しく言えばグローバル変数といいます。 それでg_がついているのです。
(私はgEntry、gTouchと書きます、各自スタイルは違ってもいいですが、とにかくグローバル変数にはgをつけましょう)
グローバル変数はスクリプトの入れ子の外に書きます。
電卓のメモリと同じにメモリしておいてから後で呼び出すことができます。
こうすると文字変更はここだけ変更すればよく、下のスクリプトは変更しないで済みます。
ではstringとはなんだ。これは変数の型で「文字」を現します。
型は他にinteger(整数)、float(実数)などがあります。
これは文字に間違って数字を入れてしまうといったミスを防ぐ効果があります。
また、ここで気がつくのは文の終わりの;です。 ;は実行文の区切りを示します。
改行は無視されても;は必要なのです。
変数については後で改めて説明します。
それでは、また次回お会いしましょう。
そこで一番上に文字を設定する文を作りましょう。
--------------------------------------------------------------------------------------------------------------
string g_entry = "Hello, Avatar!";
string g_touch = "Touched.";
--------------------------------------------------------------------------------------------------------------
ここに変更したい部分をまとめて書きました。
g_entry、g_touchは変数といいます。
詳しく言えばグローバル変数といいます。 それでg_がついているのです。
(私はgEntry、gTouchと書きます、各自スタイルは違ってもいいですが、とにかくグローバル変数にはgをつけましょう)
グローバル変数はスクリプトの入れ子の外に書きます。
電卓のメモリと同じにメモリしておいてから後で呼び出すことができます。
こうすると文字変更はここだけ変更すればよく、下のスクリプトは変更しないで済みます。
ではstringとはなんだ。これは変数の型で「文字」を現します。
型は他にinteger(整数)、float(実数)などがあります。
これは文字に間違って数字を入れてしまうといったミスを防ぐ効果があります。
また、ここで気がつくのは文の終わりの;です。 ;は実行文の区切りを示します。
改行は無視されても;は必要なのです。
変数については後で改めて説明します。
それでは、また次回お会いしましょう。
2008年06月15日
スクリプト講座6 New Scriptの解説5
前回は状態の追加を行いましたが、状態angryに行きっぱなしでした。
これだと実用性はあまりありません。
そこで状態angryからdefaultに戻るスクリプトを書いてみましょう。
state angryの中でstate default;を実行しています。
やはりdefaultも状態であることがわかります。
本格的なスクリプトはこのようにして多くの状態をいったりきたりすることになります。
わざと難しく書いてると思われますが、これがリンデンスクリプトの大枠なのでぜひ理解してください。
それでは、また次回お会いしましょう。
これだと実用性はあまりありません。
そこで状態angryからdefaultに戻るスクリプトを書いてみましょう。
state angryの中でstate default;を実行しています。
やはりdefaultも状態であることがわかります。
本格的なスクリプトはこのようにして多くの状態をいったりきたりすることになります。
わざと難しく書いてると思われますが、これがリンデンスクリプトの大枠なのでぜひ理解してください。
それでは、また次回お会いしましょう。
2008年06月15日
スクリプト講座5 New Scriptの解説4
今回はNew Scriptにもうひとつの状態を作ってみます。
前回、状態をシーンに例えましたが、今回は触られたので怒ってしまうというシーンを作成してみましょう。
新しい状態angryを追加するとこうなります。
angryにも同じくイベントハンドラのstate_entryとtouch_startがあります。
実行してみましょう。
状態default内のtouch_startのstate angry;で状態はangryに移ります。
状態の概念はゲームを作るときなどには必須となります。
それがサポートされているのはリンデンスクリプトの特徴といえるでしょう。
それでは、また。
前回、状態をシーンに例えましたが、今回は触られたので怒ってしまうというシーンを作成してみましょう。
新しい状態angryを追加するとこうなります。
angryにも同じくイベントハンドラのstate_entryとtouch_startがあります。
実行してみましょう。
状態default内のtouch_startのstate angry;で状態はangryに移ります。
状態の概念はゲームを作るときなどには必須となります。
それがサポートされているのはリンデンスクリプトの特徴といえるでしょう。
それでは、また。
2008年06月15日
スクリプト講座4 New Scriptの解説3
今回はイベントハンドラについて探ってみましょう。
New Scriptにはtouch_startというイベントハンドラがありましたが、単にtouchでもいいのではないか。
実はtouchというイベントハンドラがあるのです。
ここではtouch_startとtouchの違いを見てみましょう。
New Scriptのtouch_startをtouchに書き換えてみてください。
さて、どうなったでしょうか?
簡単なのでぜひやってみてください。
New Scriptにはtouch_startというイベントハンドラがありましたが、単にtouchでもいいのではないか。
実はtouchというイベントハンドラがあるのです。
ここではtouch_startとtouchの違いを見てみましょう。
New Scriptのtouch_startをtouchに書き換えてみてください。
さて、どうなったでしょうか?
簡単なのでぜひやってみてください。
2008年06月14日
スクリプト講座3 New Scriptの解説2
前回はいっぺんに難しい話をしてしまって困惑された方もいらっしゃるかと思います。
「スクリプタは一日にしてならず」、「士農工商スクリプタ」なのです。
今回はNew Scriptを日本語に訳してみます。
もう一回見てみましょう。
さて、これを日本語に訳します。
--------------------------------------------------------------------------------------------------------------
最初の状態
開始
新しい状態に入ったら()
開始
「やあ、おまえさん!」とチャットする。
終了
オブジェクトがクリックされたら(オブジェクト数)
開始
「さわったでしょ。」とチャットする。
終了
終了
--------------------------------------------------------------------------------------------------------------
と、こうなります。
右にずらして書かれた部分は前回説明したように入れ子を表現しています。
これは通常はTabキーで入力し、インデントといいます。
日本語にするとあらためてインデントの大切さがわかると思います。
スクリプトの骨組みは状態(state)とイベントハンドラで構成されています。
状態は映画のシーンのようなものです。映画や小説はいくつかのシーンの移り変わりで構成されます。
defaultは「我輩はオブジェクトである」に相当します。
ここでは状態は1つしかありませんが、いくつも作れます。
プログラマの間ではシーンが移り変わる様を「状態遷移」などと呼んでいます。
イベントハンドラ(お弁当ハンドラじゃないです)は外界とのやり取りを扱います。
たとえば、状態が変化した、クリックされた、座った、近づいた、時間がきたなどいろいろあります。
実はstate_entry()もれっきとしたイベントハンドラなのです。
なお、イベントハンドラと関数定義は似ていますので注意してください。
(エディタ画面ではイベントハンドラは青、ライブラリ関数は赤になっています)
結局、New Scriptは状態1個とイベントハンドラ2個で構成されていることになります。
難しい話をしたからといってNew Scriptでつまずかないでくださいね。
それではまた。
「スクリプタは一日にしてならず」、「士農工商スクリプタ」なのです。
今回はNew Scriptを日本語に訳してみます。
もう一回見てみましょう。
さて、これを日本語に訳します。
--------------------------------------------------------------------------------------------------------------
最初の状態
開始
新しい状態に入ったら()
開始
「やあ、おまえさん!」とチャットする。
終了
オブジェクトがクリックされたら(オブジェクト数)
開始
「さわったでしょ。」とチャットする。
終了
終了
--------------------------------------------------------------------------------------------------------------
と、こうなります。
右にずらして書かれた部分は前回説明したように入れ子を表現しています。
これは通常はTabキーで入力し、インデントといいます。
日本語にするとあらためてインデントの大切さがわかると思います。
スクリプトの骨組みは状態(state)とイベントハンドラで構成されています。
状態は映画のシーンのようなものです。映画や小説はいくつかのシーンの移り変わりで構成されます。
defaultは「我輩はオブジェクトである」に相当します。
ここでは状態は1つしかありませんが、いくつも作れます。
プログラマの間ではシーンが移り変わる様を「状態遷移」などと呼んでいます。
イベントハンドラ(お弁当ハンドラじゃないです)は外界とのやり取りを扱います。
たとえば、状態が変化した、クリックされた、座った、近づいた、時間がきたなどいろいろあります。
実はstate_entry()もれっきとしたイベントハンドラなのです。
なお、イベントハンドラと関数定義は似ていますので注意してください。
(エディタ画面ではイベントハンドラは青、ライブラリ関数は赤になっています)
結局、New Scriptは状態1個とイベントハンドラ2個で構成されていることになります。
難しい話をしたからといってNew Scriptでつまずかないでくださいね。
それではまた。
2008年06月14日
スクリプト講座2 New Scriptの解説
オブジェクトに最初にできるNew Scriptとはなんだろうか。
白紙でもいいのになぜスクリプトが最初から入っているのか。
今回はそのNew Scriptについて解説します。
まず、スクリプトはいったいどこから実行されるのか?という疑問があります。
これはdefaultから開始されます。そしてその中のstate_entry()が実行されます。
{ }で囲まれた部分は実行の単位で、ブロックと呼ばれます。これは入れ子にできます。
{ だけあって } のないスクリプトはありえないのです。
defaultという箱の中にstate_entry()という箱とtouch_start(integer total_number)
という箱が入っていることになります。
つまりllSay(0, "Hello, Avatar!");が最初の実行文ということになります。
llSayはチャット画面に文字を出す関数です。
関数とは何だ? 関数は一まとめのスクリプトを実行します。
関数は本来は何行にもわたるスクリプトを別な場所に書いておき(定義するといいます)、
それを1行で実行できるようにしたものです。
llで始まるのはリンデンスクリプトが用意してくれている関数です。
これをライブラリ関数といいます。
さて、llSay(0, "Hello, Avatar!"); は "Hello, Avatar!" という文字をチャット画面に表示します。
じゃ次は touch_start(integer total_number) が実行されるのか?というとそうではありません。
これはイベントハンドラといい、この場合オブジェクトがクリックされたときに実行されます。
touch_startの中身は実行というより「登録」になります。
実際にクリックして初めて中身の llSay(0, "Touched."); が実行されます。
後察しの通り、結果としてチャット画面に "Touched." が表示されます。
これはクリックというイベント(動作、変化)が起きたときに実行されるのでイベントハンドラなのです。
BASIC言語ではON KEYのようなものです。
このようにNew Scriptに最初から入っているスクリプトはあなどれません。
では、スクリプトを削除して保存するとどうなるか?
なんとエラーが出て保存できないのです。理不尽ですね。
じゃどうすればいいかというと、
--------------------------------------------------------------------------------------------------------------
default
{
state_entry()
{
}
}
--------------------------------------------------------------------------------------------------------------
こうすれば初めて保存できます。
つまりC言語でいえばmain()に相当する文なのです。
これが最小限のスクリプトという「ルール」なので覚えておきましょう。
余談ですが、これは改行をとってしまい1行で書けてしまいます。
--------------------------------------------------------------------------------------------------------------
default{ state_entry() {} }
--------------------------------------------------------------------------------------------------------------
これでも先ほどのスクリプトと同じ意味なのです。
つまり一部例外はありますが、実行文の改行は無視されるのです。
人のスクリプトを見るときにはこの点に注意しましょう。
前回のオブジェクトを回転するスクリプトは
--------------------------------------------------------------------------------------------------------------
default{ state_entry() { llTargetOmega( <0,0,1>, 1, 1.0 ); } }
--------------------------------------------------------------------------------------------------------------
と1行でかけます。(llTargetOmegaは前述のようにライブラリ関数です)
これはコピペには便利ですね。
なぜこうしないかというと{ }の対応がわかりづらい、読みにくいスクリプトになるからです。
そこでNew Scriptのような { と } の対応がわかりやすい書き方が推奨されるのです。
(逆にプログラマの間では1行プログラムコンテストなんてのもあります)
それでは、今回はこの辺で。
今回から質問を受け付けますのでお気軽に。
白紙でもいいのになぜスクリプトが最初から入っているのか。
今回はそのNew Scriptについて解説します。
まず、スクリプトはいったいどこから実行されるのか?という疑問があります。
これはdefaultから開始されます。そしてその中のstate_entry()が実行されます。
{ }で囲まれた部分は実行の単位で、ブロックと呼ばれます。これは入れ子にできます。
{ だけあって } のないスクリプトはありえないのです。
defaultという箱の中にstate_entry()という箱とtouch_start(integer total_number)
という箱が入っていることになります。
つまりllSay(0, "Hello, Avatar!");が最初の実行文ということになります。
llSayはチャット画面に文字を出す関数です。
関数とは何だ? 関数は一まとめのスクリプトを実行します。
関数は本来は何行にもわたるスクリプトを別な場所に書いておき(定義するといいます)、
それを1行で実行できるようにしたものです。
llで始まるのはリンデンスクリプトが用意してくれている関数です。
これをライブラリ関数といいます。
さて、llSay(0, "Hello, Avatar!"); は "Hello, Avatar!" という文字をチャット画面に表示します。
じゃ次は touch_start(integer total_number) が実行されるのか?というとそうではありません。
これはイベントハンドラといい、この場合オブジェクトがクリックされたときに実行されます。
touch_startの中身は実行というより「登録」になります。
実際にクリックして初めて中身の llSay(0, "Touched."); が実行されます。
後察しの通り、結果としてチャット画面に "Touched." が表示されます。
これはクリックというイベント(動作、変化)が起きたときに実行されるのでイベントハンドラなのです。
BASIC言語ではON KEYのようなものです。
このようにNew Scriptに最初から入っているスクリプトはあなどれません。
では、スクリプトを削除して保存するとどうなるか?
なんとエラーが出て保存できないのです。理不尽ですね。
じゃどうすればいいかというと、
--------------------------------------------------------------------------------------------------------------
default
{
state_entry()
{
}
}
--------------------------------------------------------------------------------------------------------------
こうすれば初めて保存できます。
つまりC言語でいえばmain()に相当する文なのです。
これが最小限のスクリプトという「ルール」なので覚えておきましょう。
余談ですが、これは改行をとってしまい1行で書けてしまいます。
--------------------------------------------------------------------------------------------------------------
default{ state_entry() {} }
--------------------------------------------------------------------------------------------------------------
これでも先ほどのスクリプトと同じ意味なのです。
つまり一部例外はありますが、実行文の改行は無視されるのです。
人のスクリプトを見るときにはこの点に注意しましょう。
前回のオブジェクトを回転するスクリプトは
--------------------------------------------------------------------------------------------------------------
default{ state_entry() { llTargetOmega( <0,0,1>, 1, 1.0 ); } }
--------------------------------------------------------------------------------------------------------------
と1行でかけます。(llTargetOmegaは前述のようにライブラリ関数です)
これはコピペには便利ですね。
なぜこうしないかというと{ }の対応がわかりづらい、読みにくいスクリプトになるからです。
そこでNew Scriptのような { と } の対応がわかりやすい書き方が推奨されるのです。
(逆にプログラマの間では1行プログラムコンテストなんてのもあります)
それでは、今回はこの辺で。
今回から質問を受け付けますのでお気軽に。
2008年06月13日
shadeのヘルプが開けない
私は3DCGソフトにshade 10 basicを使っていますが、ユーザーガイドがPDFになっています。
Adobe Readerをアップデートしたらそれが開かなくなってしまいました。
レジストリを調べましたがだめでした。
結局Adobe Readerのヘルプメニューから「Adobe Reader インストールの修復」を実行することで解決しました。
Adobe Readerをアップデートしたらそれが開かなくなってしまいました。
レジストリを調べましたがだめでした。
結局Adobe Readerのヘルプメニューから「Adobe Reader インストールの修復」を実行することで解決しました。