Re: 787の起動について(Re: 本体の起動について)
toshi
投稿数: 1540
samさん
toshiです。
私が787/Nasal/system.nasは正しいと思っている件について、私なりの考えをご説明したいと思います。
ただし、私もプログラミング言語全般に関する詳しい知識を持っているわけではないので、間違いに気付いた方はフォローをお願いします。
samさんは、787/Nasal/system.nasにある
if(getprop("/sim/model/start-idling")) [
を
if(getprop("/sim/model/start-idling")== 0) [
にするのが【文法的に】正しいのではないか、とお考えになったのでしたね、
私は、そのどちらも【文法的に】正しいと思います。
ただし、後者(samさんの修正)はその意味するところが変だと思います。
まず最初に、FlightGearはプロパティツリーという構造を使っており、プロパティと呼ばれるFlightGear内部の状態変数を書き換えることで、機体の挙動やマルチプレイヤーの機体の表示といった、あらゆる動作を実現しています。
# wikiの「訳)特徴」にごく簡単な説明があります。
プロパティツリー (FlightGearメニューの[File]>[Browse Internal Properties])からたどるとと良く分かるのですが、/sim/model/start-idlingの変数型はブール型(論理型)です。
ブール型は、真か偽かの2値を持っており、真なら1、偽なら0で表現する方法が(nasalに限らず)良く使われています。
/sim/model/start-idlingの値は、787フォルダの中でまずはじめにロードされる機体設定ファイルAircraft/787/787-set.xmlにある
<start-idling type="bool">0</start-idling>
により、0に設定されています。
また、start-idlingという名前からすると、これはFlightGear起動時のエンジン状態を設定するためのプロパティであり、アイドル(つまり動いている)状態なら1、停止状態なら0のであることが想像できます。。
従って、作者は、デフォルト設定として、FlightGear起動時にエンジン停止状態とすることを意図としています。
ただし、おそらくユーザの利便性も考えて、この値を1に書き換えればエンジンアイドル状態でFlightGearを起動できるように、このプロパティをわざわざ作ってくれているのだと思います。
次に、787/Nasal/system.nasにある
の部分は初期化ルーチンの中にあります。
/sim/model/start-idlingのプロパティの値を取得(getprop)し、真の時はエンジンを始動するために必要なプロパティを設定(setprop)し、偽のときは逆にelse以下でエンジンを止めています。
# getpropやsetpropといったnasalコマンドの詳細に興味がある方は、wikiの「Nasal マニュアル」をご参照ください。
先に示したように、/sim/model/start-idlingの値は0ですので、最初のif文に0(偽)が代入され、else以下のコマンドが実行されます。
そのために、787はエンジン停止状態で起動するわけです。
ここでもし、samさんが行ったように
if(getprop("/sim/model/start-idling")== 0) [
と書き換えると、if文の中身は真になりますので、既にご経験されたように、エンジンが始動した状態で起動することになります。
このsamさんの修正は、【文法的には】おかしくないので文法エラーは発生しませんが、【その意味するところ】としては変です。
なぜなら、「もしstart-idlingが0ならばエンジン始動状態に、1ならばエンジン停止状態に初期化する」というあべこべの意味になってしまうからです。
以上、説明が下手ですみませんが、なんとなくでもお分かりいただけましたでしょうか?
toshiです。
私が787/Nasal/system.nasは正しいと思っている件について、私なりの考えをご説明したいと思います。
ただし、私もプログラミング言語全般に関する詳しい知識を持っているわけではないので、間違いに気付いた方はフォローをお願いします。
samさんは、787/Nasal/system.nasにある
if(getprop("/sim/model/start-idling")) [
を
if(getprop("/sim/model/start-idling")== 0) [
にするのが【文法的に】正しいのではないか、とお考えになったのでしたね、
私は、そのどちらも【文法的に】正しいと思います。
ただし、後者(samさんの修正)はその意味するところが変だと思います。
まず最初に、FlightGearはプロパティツリーという構造を使っており、プロパティと呼ばれるFlightGear内部の状態変数を書き換えることで、機体の挙動やマルチプレイヤーの機体の表示といった、あらゆる動作を実現しています。
# wikiの「訳)特徴」にごく簡単な説明があります。
プロパティツリー (FlightGearメニューの[File]>[Browse Internal Properties])からたどるとと良く分かるのですが、/sim/model/start-idlingの変数型はブール型(論理型)です。
ブール型は、真か偽かの2値を持っており、真なら1、偽なら0で表現する方法が(nasalに限らず)良く使われています。
/sim/model/start-idlingの値は、787フォルダの中でまずはじめにロードされる機体設定ファイルAircraft/787/787-set.xmlにある
<start-idling type="bool">0</start-idling>
により、0に設定されています。
また、start-idlingという名前からすると、これはFlightGear起動時のエンジン状態を設定するためのプロパティであり、アイドル(つまり動いている)状態なら1、停止状態なら0のであることが想像できます。。
従って、作者は、デフォルト設定として、FlightGear起動時にエンジン停止状態とすることを意図としています。
ただし、おそらくユーザの利便性も考えて、この値を1に書き換えればエンジンアイドル状態でFlightGearを起動できるように、このプロパティをわざわざ作ってくれているのだと思います。
次に、787/Nasal/system.nasにある
if(getprop("/sim/model/start-idling")) {
setprop("/systems/electrical/outputs/eec-Lbus", 30);
(中略)
}
else {
setprop("/sim/model/Boeing-787-8/n1[0]",0);
(中略)
};
/sim/model/start-idlingのプロパティの値を取得(getprop)し、真の時はエンジンを始動するために必要なプロパティを設定(setprop)し、偽のときは逆にelse以下でエンジンを止めています。
# getpropやsetpropといったnasalコマンドの詳細に興味がある方は、wikiの「Nasal マニュアル」をご参照ください。
先に示したように、/sim/model/start-idlingの値は0ですので、最初のif文に0(偽)が代入され、else以下のコマンドが実行されます。
そのために、787はエンジン停止状態で起動するわけです。
ここでもし、samさんが行ったように
if(getprop("/sim/model/start-idling")== 0) [
と書き換えると、if文の中身は真になりますので、既にご経験されたように、エンジンが始動した状態で起動することになります。
このsamさんの修正は、【文法的には】おかしくないので文法エラーは発生しませんが、【その意味するところ】としては変です。
なぜなら、「もしstart-idlingが0ならばエンジン始動状態に、1ならばエンジン停止状態に初期化する」というあべこべの意味になってしまうからです。
以上、説明が下手ですみませんが、なんとなくでもお分かりいただけましたでしょうか?
投票数:13
平均点:6.15
投稿ツリー
-
本体の起動について
(r.naka, 2008-12-16 16:49)
- Re: 本体の起動について (zero1962, 2008-12-16 21:30)
-
Re: 本体の起動について
(r.naka, 2008-12-17 17:09)
- Re: 本体の起動について (Tat, 2008-12-18 5:57)
- Re: 本体の起動について (r.naka, 2008-12-19 23:44)
-
Re: 本体の起動について
(sam, 2009-3-24 12:38)
-
787の起動について(Re: 本体の起動について)
(toshi, 2009-3-25 2:01)
- Re: 787の起動について(Re: 本体の起動について) (toshi, 2009-3-27 2:17)
-
787の起動について(Re: 本体の起動について)
(toshi, 2009-3-25 2:01)
- Re: 本体の起動について (sam, 2009-3-25 10:56)
- Re: 本体の起動について (sam, 2009-3-25 11:40)
- Re: 本体の起動について (sam, 2009-3-27 10:44)
-
Re: 本体の起動について
(takehiro, 2009-3-27 18:20)
- Re: 本体の起動について (MiYABi, 2009-3-27 20:09)
- Re: 本体の起動について (toshi, 2009-3-29 2:45)
- Re: 本体の起動について (sam, 2009-3-28 11:22)
- Re: 本体の起動について (takehiro, 2009-3-29 0:25)
- Re: 本体の起動について (sam, 2009-3-29 9:55)
- Re: 本体の起動について (takehiro, 2009-3-29 23:15)
- Re: 本体の起動について (sam, 2009-3-30 22:41)
- Re: 本体の起動について (takehiro, 2009-3-31 0:10)