ソラマメブログ

2008年11月17日

蝶の作り方 - 逐次解説(その3)

// This function is called whether the sensor senses anything or not
-----
no_sensor であれ sensor であれ その最初で呼ばれている
-----
sensor_any() {
// Get my velocity
vector myvel = llGetVel();
-----
速度を myvel に入れ
-----
// Apply friction
llApplyImpulse(-(myvel * friction * mass), FALSE);
-----
摩擦を適用している
-----
FALSE はローカル座標ではないということ
-----
// Schooling behavior
if (school && llGetTime() - school_timer > school_update_interval) {
-----
群れ動作で 群れ動作のタイミングになったら
-----
llSay(school_comm_channel, (string)myvel);
-----
自分の速度を群れチャネルに伝える
-----
school_timer = llGetTime();
}
// Get my position
vector mypos = llGetPos();
-----
位置を mypos に入れ
-----
// Check for air/water breach
if (flight_mode == 1) {
// water
-----
水棲生物の場合 w
-----
if (mypos.z >= llWater(mypos) - llVecMag(llGetScale())) {
// llSay(0, "collide() called due to air/water breach.");
collide();
}
-----
水から出そうになったら 下方向に力を加える
-----
} else if (flight_mode == 2) {
// air
-----
水棲でない場合
-----
if (mypos.z <= llWater(mypos) + llVecMag(llGetScale())) {
// llSay(0, "collide() called due to air/water breach.");
collide();
}
-----
水に入りそうになったら 上方向に力を加える
-----
}
// Stay near spawn location
if (llVecDist(mypos, spawn_location) > max_distance) {
-----
rez された場所から max_distance 以上離れていたら
-----
// Compensate for being near sim border
if (spawn_location.x - mypos.x > 100) {
mypos.x += 255;
}
-----
ここはいまいちわからない w
-----
// llSay(0, "collide() called due to too much distance from my spawn point.
// mypos=" + (string)mypos + ", spawn_location = " + (string)spawn_location);
collide(mypos - llVecNorm(spawn_location - mypos));
-----
rez された場所に向け力を加える
-----
}
// Stay above ground level
if (mypos.z <= llGround(ZERO_VECTOR)) {
collide(mypos - llGroundNormal(ZERO_VECTOR));
}
-----
地面に潜りそうになったら 上方向? に力を加える
-----
}
default {
state_entry() {
-----
rez されると以下を実行する
-----
llResetTime();
-----
スクリプト時間を初期化(wiki 見たら使うなみたいなことが書かれてあるな w)
-----
llSay(0, "Fishy spawned.");
-----
Fishy spawned. を出力
-----
// School
if (school) {
llListen(school_comm_channel, "", NULL_KEY, "");
}
-----
群れ動作を行う場合 群れチャネルを llListen する
-----
// Sandbox
llSetStatus(STATUS_SANDBOX, sandbox);
-----
STATUS_SANDBOX の設定
-----
llSetStatus(STATUS_BLOCK_GRAB, FALSE);
-----
TRUE だと掴めれなくなるのかな...
-----
spawn_location = llGetPos();
-----
初期位置を spawn_location に入れる
-----
// Initialize physics behavior
mass = llGetMass();
-----
質量を mass に入れる
-----
llSetBuoyancy(1.0);
-----
浮力を 1.0 に
-----
ということは 浮いちゃうってことね w
-----
llSetStatus(STATUS_PHYSICS, TRUE);
-----
物理に
-----
llVolumeDetect(TRUE);
-----
ファントムにし collision_start と collision_end を受け取れるようにする
-----
が collision は受け取らないようなことが書かれてある ふむ~
-----
// Initialize sensor
llSensorRepeat(llGetObjectName(), NULL_KEY, ACTIVE|SCRIPTED, sensor_distance, PI, timer_length);
-----
同じ名前で 物理な 動いているか 動いているスクリプトを持つ 距離 sensor_distance 以内のオブジェクトを
-----
timer_length 毎にスキャンする
-----
}
collision_start(integer total_number) {
// llSay(0, "collide() called due to physical object collision.");
collide(llDetectedPos(0));
-----
ぶつかったら ぶつかった相手と逆の方向に力を加える
-----
}
no_sensor() {
sensor_any();
}
-----
(続く)

同じカテゴリー(walking のスクリプティング講座)の記事
 プロフィール写真の表示に問題 (2009-11-30 20:55)
 ミニ太陽系 (2009-03-21 06:03)
 関数から文字列を返したら何か問題になる? (2009-03-18 18:02)
 llListFindList って型って関係ないんだったっけ (2009-03-18 14:02)
 夏時間(PDT)の実験 (2009-03-08 22:04)
 15パズルの作り方(その3) (2009-03-08 06:03)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。