本体の起動について
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
本体の起動について
msg# 1
r.naka
居住地: 京都
投稿数: 31
r.nakaです。
fgrunをウィザードから起動しようとしても起動できません。
コマンドラインの内容を貼り付けます。
Option '--trace-read=' needs a parameter
Usage: fgfs [ option ... ]
General Options:
--help, -h Show the most relevant command line options
--verbose, -v Show all command line options when combined
with --help or -h
--fg-root=path Specify the root data path
--fg-scenery=path Specify the base scenery path;
Defaults to $FG_ROOT/Scenery
--language=code Select the language for this session
--disable-save-on-exit Don't save preferences upon program exit
--enable-save-on-exit Allow saving preferences at program exit
--control=mode Primary control mode (joystick, keyboard,
mouse)
Aircraft:
--aircraft=name Select an aircraft profile as defined by a top
level <name>-set.xml
--show-aircraft Print a list of the currently available
aircraft types
--min-status={alpha,beta,early-production,production}
Allows you to define a minimum status level
(=development status) for all listed aircraft
Initial Position and Orientation:
--airport=ID Specify starting position relative to an
airport
--runway=rwy_no Specify starting runway (must also specify an
airport)
--carrier=[name|ID] Specify starting position on an AI carrier
--parkpos=name Specify which starting position on an AI
carrier (must also specify a carrier)
--vor=ID Specify starting position relative to a VOR
--ndb=ID Specify starting position relative to an NDB
--fix=ID Specify starting position relative to a fix
Environment Options:
--wind=DIR@SPEED Specify wind coming from DIR (degrees) at SPEED
(knots)
--turbulence=0.0 to 1.0 Specify turbulence from 0.0 (calm) to 1.0
(severe)
--ceiling=FT_ASL[:THICKNESS_FT]
Create an overcast ceiling, optionally with a
specific thickness (defaults to 2000 ft).
For a complete list of options use --help --verbose
Hit a key to continue...
fgrunをウィザードから起動しようとしても起動できません。
コマンドラインの内容を貼り付けます。
Option '--trace-read=' needs a parameter
Usage: fgfs [ option ... ]
General Options:
--help, -h Show the most relevant command line options
--verbose, -v Show all command line options when combined
with --help or -h
--fg-root=path Specify the root data path
--fg-scenery=path Specify the base scenery path;
Defaults to $FG_ROOT/Scenery
--language=code Select the language for this session
--disable-save-on-exit Don't save preferences upon program exit
--enable-save-on-exit Allow saving preferences at program exit
--control=mode Primary control mode (joystick, keyboard,
mouse)
Aircraft:
--aircraft=name Select an aircraft profile as defined by a top
level <name>-set.xml
--show-aircraft Print a list of the currently available
aircraft types
--min-status={alpha,beta,early-production,production}
Allows you to define a minimum status level
(=development status) for all listed aircraft
Initial Position and Orientation:
--airport=ID Specify starting position relative to an
airport
--runway=rwy_no Specify starting runway (must also specify an
airport)
--carrier=[name|ID] Specify starting position on an AI carrier
--parkpos=name Specify which starting position on an AI
carrier (must also specify a carrier)
--vor=ID Specify starting position relative to a VOR
--ndb=ID Specify starting position relative to an NDB
--fix=ID Specify starting position relative to a fix
Environment Options:
--wind=DIR@SPEED Specify wind coming from DIR (degrees) at SPEED
(knots)
--turbulence=0.0 to 1.0 Specify turbulence from 0.0 (calm) to 1.0
(severe)
--ceiling=FT_ASL[:THICKNESS_FT]
Create an overcast ceiling, optionally with a
specific thickness (defaults to 2000 ft).
For a complete list of options use --help --verbose
Hit a key to continue...
投票数:19
平均点:5.79
Re: 本体の起動について
msg# 1.1
zero1962
居住地: 三重県
投稿数: 229
>fgrunをウィザードから起動しようとしても起動できません。
動かないのは、fgrunではなくて、fgfs.exeなのですね。
bin/win32/fgrun.exeを起動することはできますか?
直接クリックして、機体選択画面が現れなにか航空機の回転がはじまりますか?fgrunが起動できているなら、1つ画面をもどしてfgfsのパス、
ルートdataのパス、シーナリーのパスなどが正しく設定されていますか?
ひょっとしたらブランクかも?fgrunで設定するパラメータがなされてないとrunでfgfsを起動してもうまく動かないかもしれません。
私は過去にパスがブランクになっていたことがありました。
お力にはなれなかったかもしれませんが、再インストールもすぐできると
思いますのでフォルダ名を少しかえておこなってみてください。
がんばってください。
動かないのは、fgrunではなくて、fgfs.exeなのですね。
bin/win32/fgrun.exeを起動することはできますか?
直接クリックして、機体選択画面が現れなにか航空機の回転がはじまりますか?fgrunが起動できているなら、1つ画面をもどしてfgfsのパス、
ルートdataのパス、シーナリーのパスなどが正しく設定されていますか?
ひょっとしたらブランクかも?fgrunで設定するパラメータがなされてないとrunでfgfsを起動してもうまく動かないかもしれません。
私は過去にパスがブランクになっていたことがありました。
お力にはなれなかったかもしれませんが、再インストールもすぐできると
思いますのでフォルダ名を少しかえておこなってみてください。
がんばってください。
投票数:22
平均点:5.45
Re: 本体の起動について
msg# 1.2
r.naka
居住地: 京都
投稿数: 31
r.nakaです。
zero1962さん、
そうです、動かないのはfgfs.exe です。
再インストールしたのですが立ち上がりませんでした。
zero1962さん、
そうです、動かないのはfgfs.exe です。
再インストールしたのですが立ち上がりませんでした。
投票数:21
平均点:6.19
Re: 本体の起動について
msg# 1.2.1
Tat
投稿数: 375
--trace-read= (プロパティーの読み出しを監視するオプション)にプロパティーのパスが設定されていないというエラーです。多分このオプションを利用するところにチェックしてしまったけど、パス名が空白なのでエラーになったというところでしょう。
fgrun は利用した事は有りませんが、通常は不要なオプションですので、fgrun で該当するオプションを無効にしてください。
fgrun は利用した事は有りませんが、通常は不要なオプションですので、fgrun で該当するオプションを無効にしてください。
投票数:17
平均点:5.29
Re: 本体の起動について
msg# 1.3
r.naka
居住地: 京都
投稿数: 31
Tatさん、zero1962さん こんばんは
r.nakaです。 携帯から書き込むので、 少し見苦しい文になるかもしれません。
Tatさんの仰った所を修正すると起動するようになりました。
ありがとうございました。
これからもよろしくお願いします。
r.nakaです。 携帯から書き込むので、 少し見苦しい文になるかもしれません。
Tatさんの仰った所を修正すると起動するようになりました。
ありがとうございました。
これからもよろしくお願いします。
投票数:26
平均点:6.15
Re: 本体の起動について
msg# 1.4
sam
居住地: 東京
投稿数: 10
以下は、joystickのコラムでtoshiさんとボーイング787の起動について、お話しした続きですが、コラム違いのため、こちらに書かせていただきます。
Toshiさん、お早うございます。なるほど、やりようはあるものですね。
しかし、かなり面倒ですね。
1.9.0の787の設定と1.9.1の設定の違いはnasalファイルのあるなしです。
悪戦苦闘の末、Nasalフォルダーのsystem.nasの79行目
if(getprop("/sim/model/start-idling")) [
これって、文法上正しいのでしょうか?勿論言語によっては、ある条件が、すでに設定される言語も無きにしもあらず・・・そこで、試しに
if(getprop("/sim/model/start-idling")== 0) [
としたところ、無事、サイドブレーキの掛かった状態でスロットルの状態が反映され、起動できるようになりました。
但し、airport選択画面で指定された、airportからの離陸が許され、locationなどに、airportを指定した場合は許されません。
飛びたいairportをリストに登録する必要がありますが・・・
ただ、これが正しい変更なのか、どうかは、全く分かりません。
Toshiさん、お早うございます。なるほど、やりようはあるものですね。
しかし、かなり面倒ですね。
1.9.0の787の設定と1.9.1の設定の違いはnasalファイルのあるなしです。
悪戦苦闘の末、Nasalフォルダーのsystem.nasの79行目
if(getprop("/sim/model/start-idling")) [
これって、文法上正しいのでしょうか?勿論言語によっては、ある条件が、すでに設定される言語も無きにしもあらず・・・そこで、試しに
if(getprop("/sim/model/start-idling")== 0) [
としたところ、無事、サイドブレーキの掛かった状態でスロットルの状態が反映され、起動できるようになりました。
但し、airport選択画面で指定された、airportからの離陸が許され、locationなどに、airportを指定した場合は許されません。
飛びたいairportをリストに登録する必要がありますが・・・
ただ、これが正しい変更なのか、どうかは、全く分かりません。
投票数:12
平均点:5.00
787の起動について(Re: 本体の起動について)
msg# 1.4.1
toshi
投稿数: 1540
「ジョイスティック動作状況」のトピックから移動してきました。
これまでの経緯は、「2009-3-23付けのsamさんの投稿」と「2009-3-24付けの私の投稿」をご参照ください。
さて、samさんから、787の起動に関して、いくつかの興味深い話題を提供していただいております。
1.9.0で動いて1.9.1では動かない、という件を含めて、いくつか確認させてください。
引用:引用:
質問1:
samさんの環境では、1.9.0と1.9.1とでそれぞれ異なる787機体ファイル(zip形式)をダウンロードしてお使いになっている、という理解してよろしいですか?
もしそうなら、ダウンロードした787機体ファイルのそれぞれのファイル名(zip形式)を教えていただけませんか?
ダウンロードしたファイル名が不明な場合は、Aircraft/787/787-set.xmlの6行目付近にある<aircraft-version>行に書かれているバージョンを、1.9.0と1.9.1それぞれについて教えてください。
# できれば前者が分かる方が助かります。
以下、もう少し補足します。
先の私の投稿で紹介した787機体ファイルは、各FTPミラーサイト(たとえばftp://ftp.ibiblio.org/pub/mirrors/flightgear/ftp/Aircraft/ )にある2008/12/21付けの787_02_2008.zipですが、このファイルは、2008-12-23にリリースされたFlightGear 1.9.0に合わせて配布が始まったものです。
現時点においても各FTPミラーサイトには全く同じファイルがありますので、基本的には1.9.0でも1.9.1でも同じ787の機体ファイルを使っているはずです。
ただし、FTPサイトによっては機体ファイルの更新が遅れることもありますので、ダウンロードしたタイミングによっては、FlightGear 1.0.0用の古い機体ファイルを1.9.0でお使いになっていた可能性があります。
また、本家の機体ダウンロードページに掲載されなかったこともあり、FTPミラー以外の全然違うルートで入手している可能性もあります。
実際、787の開発は英語フォーラムを中心にして行われているので、FTPミラー以外の別のところに機体ファイルが時々アップロードされているようです。
引用:
正しいと思います。
質問2:
samさんが1.9.1の787でやりたいことは、何でしょうか?
もし、手動の起動手順が面倒なので、FlightGearを起動してすぐに飛行できる状態にしたい、ということがお望みならば、お勧めの方法があります。
Aircraft/787/787-set.xml 21行目
この0を1に変えてみてください。
ただし、samさんが行った修正は元に戻していただく必要があります。
samさんの修正は、期せずしてうまく始動してしまった感がありまして、実のところは機体作者の意図とは正反対の修正をしてしまっています。
# でも、自分でいろいろやってみることは何より大事なことです。
なぜ私が、元の787/Nasal/system.nasが正しいと思うのかについては、また時間があるときにゆっくりご説明したいと思いますので、しばらくお待ちください。
これまでの経緯は、「2009-3-23付けのsamさんの投稿」と「2009-3-24付けの私の投稿」をご参照ください。
さて、samさんから、787の起動に関して、いくつかの興味深い話題を提供していただいております。
1.9.0で動いて1.9.1では動かない、という件を含めて、いくつか確認させてください。
引用:
ところで,toshiさん、1.9.0で動くボーイング787、1.9.1ではアクセルが動かない、全く飛ぶ事が出来ない。
1.9.0の787の設定と1.9.1の設定の違いはnasalファイルのあるなしです。
質問1:
samさんの環境では、1.9.0と1.9.1とでそれぞれ異なる787機体ファイル(zip形式)をダウンロードしてお使いになっている、という理解してよろしいですか?
もしそうなら、ダウンロードした787機体ファイルのそれぞれのファイル名(zip形式)を教えていただけませんか?
ダウンロードしたファイル名が不明な場合は、Aircraft/787/787-set.xmlの6行目付近にある<aircraft-version>行に書かれているバージョンを、1.9.0と1.9.1それぞれについて教えてください。
# できれば前者が分かる方が助かります。
以下、もう少し補足します。
先の私の投稿で紹介した787機体ファイルは、各FTPミラーサイト(たとえばftp://ftp.ibiblio.org/pub/mirrors/flightgear/ftp/Aircraft/ )にある2008/12/21付けの787_02_2008.zipですが、このファイルは、2008-12-23にリリースされたFlightGear 1.9.0に合わせて配布が始まったものです。
現時点においても各FTPミラーサイトには全く同じファイルがありますので、基本的には1.9.0でも1.9.1でも同じ787の機体ファイルを使っているはずです。
ただし、FTPサイトによっては機体ファイルの更新が遅れることもありますので、ダウンロードしたタイミングによっては、FlightGear 1.0.0用の古い機体ファイルを1.9.0でお使いになっていた可能性があります。
また、本家の機体ダウンロードページに掲載されなかったこともあり、FTPミラー以外の全然違うルートで入手している可能性もあります。
実際、787の開発は英語フォーラムを中心にして行われているので、FTPミラー以外の別のところに機体ファイルが時々アップロードされているようです。
引用:
悪戦苦闘の末、Nasalフォルダーのsystem.nasの79行目
if(getprop("/sim/model/start-idling")) [
これって、文法上正しいのでしょうか?
正しいと思います。
質問2:
samさんが1.9.1の787でやりたいことは、何でしょうか?
もし、手動の起動手順が面倒なので、FlightGearを起動してすぐに飛行できる状態にしたい、ということがお望みならば、お勧めの方法があります。
Aircraft/787/787-set.xml 21行目
<start-idling type="bool">0</start-idling>
ただし、samさんが行った修正は元に戻していただく必要があります。
samさんの修正は、期せずしてうまく始動してしまった感がありまして、実のところは機体作者の意図とは正反対の修正をしてしまっています。
# でも、自分でいろいろやってみることは何より大事なことです。
なぜ私が、元の787/Nasal/system.nasが正しいと思うのかについては、また時間があるときにゆっくりご説明したいと思いますので、しばらくお待ちください。
投票数:15
平均点:6.00
Re: 本体の起動について
msg# 1.5
sam
居住地: 東京
投稿数: 10
Toshiさん、いろいろ、ご指導有り難うございます。
787のバージョンが複数あるとは全く知りませんでした。
動機は、単純で、どなたかの記事で、787の使用記を読み、ネットで探してダウンロードした物で、02_2008です、1.9.0も1.9.1も787はこのファイルだけです。
777とか747とかと違って、うまく動かない、何故だろう? と言うのが動機です。
そもそも、何故、私が、このプログラムにはまったかは、多分多くの皆様と同じ理由だと思います。
この理屈っぽさ、凝りよう、真実性・・・これは、10人や20人のプロジェクトではとうてい成し得ない凄さを感じます。
まだ、日も浅く、本当の深みも分からぬまま、いろいろ、いじくり回すのは性分でしょうか、お許し下さい。
書き換えを元に戻し、教えて頂いた、0を1に書き換える方法を試してみます。
787のバージョンが複数あるとは全く知りませんでした。
動機は、単純で、どなたかの記事で、787の使用記を読み、ネットで探してダウンロードした物で、02_2008です、1.9.0も1.9.1も787はこのファイルだけです。
777とか747とかと違って、うまく動かない、何故だろう? と言うのが動機です。
そもそも、何故、私が、このプログラムにはまったかは、多分多くの皆様と同じ理由だと思います。
この理屈っぽさ、凝りよう、真実性・・・これは、10人や20人のプロジェクトではとうてい成し得ない凄さを感じます。
まだ、日も浅く、本当の深みも分からぬまま、いろいろ、いじくり回すのは性分でしょうか、お許し下さい。
書き換えを元に戻し、教えて頂いた、0を1に書き換える方法を試してみます。
投票数:12
平均点:3.33
Re: 本体の起動について
msg# 1.6
sam
居住地: 東京
投稿数: 10
toshiさん、無事動きました。有り難うございました。
それから、nasalファイルのあるなしではなく、使うか、使わないかの誤りです。
舌足らずで申し訳ありません。
それから、nasalファイルのあるなしではなく、使うか、使わないかの誤りです。
舌足らずで申し訳ありません。
投票数:9
平均点:4.44
Re: 787の起動について(Re: 本体の起動について)
msg# 1.4.1.1
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
Re: 本体の起動について
msg# 1.7
sam
居住地: 東京
投稿数: 10
Toshiさん、Samです。
いや、よく分かりました。
すると、if(getprop("/sim/model/start-idling") の中身は、NOT=0の時に真の意味なんですね。
探していた、スクリプトの構文の説明、Nasalマニュアル、ご紹介有り難うございます。
早速、印刷します。
これで、スクリプトが何を、やっているのかが、少し見える様になるかも知れません。
知らなかった、隠れたコマンド、こんな飛ばし方をすると、こんなことが起こるはず・・・
色々なことが見えるかも知れません、楽しみですね。
今後、また、ご質問すると思いますが、よろしくお願いします。
いや、よく分かりました。
すると、if(getprop("/sim/model/start-idling") の中身は、NOT=0の時に真の意味なんですね。
探していた、スクリプトの構文の説明、Nasalマニュアル、ご紹介有り難うございます。
早速、印刷します。
これで、スクリプトが何を、やっているのかが、少し見える様になるかも知れません。
知らなかった、隠れたコマンド、こんな飛ばし方をすると、こんなことが起こるはず・・・
色々なことが見えるかも知れません、楽しみですね。
今後、また、ご質問すると思いますが、よろしくお願いします。
投票数:12
平均点:4.17
Re: 本体の起動について
msg# 1.8
takehiro
居住地: Kawasaki
投稿数: 101
samさん、こんにちは。
「if(getprop("/sim/model/start-idling") の中身は、NOT=0の時に真」という言葉の意味がわからないのですが、if文について補足させていただきます。
ifは()の中身がtrueであるかどうか判断することしかしません。
つまり、ある変数の値がいくつであるとか、そういったことはまったく気にしていません。True かどうか、です。
ではFalseならどうか?といいますと、こちらは通常elseが受け持ちます。
"=="とか"<"とか、"!="とか比較演算をする式がありますが、この演算子も返す値はTrue or Falseです。
if(hoge == true){ .... }という文を時々目にしますが、これは if(hoge)で書き換えられるという理由がわかると思います。
読みやすさを重視するのなら、前者でもかまわないと思いますが…。
余談になりますがbool型の変数に対して、中身が1か0かと問うのは本来間違いで、処理系によってTrueの中身が異なることがあります。
bool型にはtrueかfalseを代入するのが間違いないと思います。
nasalでどうなのかは知りませんが・・・
「if(getprop("/sim/model/start-idling") の中身は、NOT=0の時に真」という言葉の意味がわからないのですが、if文について補足させていただきます。
ifは()の中身がtrueであるかどうか判断することしかしません。
つまり、ある変数の値がいくつであるとか、そういったことはまったく気にしていません。True かどうか、です。
ではFalseならどうか?といいますと、こちらは通常elseが受け持ちます。
"=="とか"<"とか、"!="とか比較演算をする式がありますが、この演算子も返す値はTrue or Falseです。
if(hoge == true){ .... }という文を時々目にしますが、これは if(hoge)で書き換えられるという理由がわかると思います。
読みやすさを重視するのなら、前者でもかまわないと思いますが…。
余談になりますがbool型の変数に対して、中身が1か0かと問うのは本来間違いで、処理系によってTrueの中身が異なることがあります。
bool型にはtrueかfalseを代入するのが間違いないと思います。
nasalでどうなのかは知りませんが・・・
投票数:13
平均点:3.85
Re: 本体の起動について
msg# 1.8.1
MiYABi
居住地: 羽田の近く
投稿数: 10
xmlの定義として、787_02_2008.zipの787-set.xmlは
型と値の一貫性がなくてなんだか不安になります。
L34
だったり
L50
だったり
L89
だったり…
型と値の一貫性がなくてなんだか不安になります。
L34
<start-engines type="bool">0</start-engines>
L50
<internal type="bool">true</internal>
L89
<switch type = "bool"></switch>
投票数:10
平均点:6.00
Re: 本体の起動について
msg# 1.9
sam
居住地: 東京
投稿数: 10
Toshiさん、お早うございます。
まだ、教えていただいた、構文の解説書を全て読んだわけではないので、理解はまだですが、IF文に関しては、変数の値がある値であるか、或いはある値でないかで、TrueかFalseを決めるものだと理解しております。
つまり、アセンブラで言うコンペア何々、条件ジャンプです。
CPUは数値判断しか出来ないからです。
IF A=BまたはIF A NOT=B 或いは IF A>B 等Bは勿論、実数でもいいのですが・・・このように書くのが普通です。
IF Aと言う書き方は、言語によって、IF A=0 或いはIF A=NOT 0等の省略で、あくまで省略できるという、約束事です。
if(getprop("/sim/model/start-idling") この記述の("/sim/model/start-idling")の中身は何でしょう、True,を判断する材料は何でしょう、==0が間違いならNOT 0ではないのか、
と言うのが、前回の投稿です。
まだ、教えていただいた、構文の解説書を全て読んだわけではないので、理解はまだですが、IF文に関しては、変数の値がある値であるか、或いはある値でないかで、TrueかFalseを決めるものだと理解しております。
つまり、アセンブラで言うコンペア何々、条件ジャンプです。
CPUは数値判断しか出来ないからです。
IF A=BまたはIF A NOT=B 或いは IF A>B 等Bは勿論、実数でもいいのですが・・・このように書くのが普通です。
IF Aと言う書き方は、言語によって、IF A=0 或いはIF A=NOT 0等の省略で、あくまで省略できるという、約束事です。
if(getprop("/sim/model/start-idling") この記述の("/sim/model/start-idling")の中身は何でしょう、True,を判断する材料は何でしょう、==0が間違いならNOT 0ではないのか、
と言うのが、前回の投稿です。
投票数:6
平均点:5.00
Re: 本体の起動について
msg# 1.10
takehiro
居住地: Kawasaki
投稿数: 101
Samさん、こんにちは。
横から失礼します。
アセンブリでいうと jnz に該当するんでしょうかね。
あくまでも比較しているのは比較演算子になります。
IF A=Bという書き方をするのはBASICでしょうか?
IF A=0 などの省略で…というのは言語によってはあるのかもしれませんが、nasalやC, Java等ではTrue/Falseの判断のみ行いますので、そのような「約束事」は存在していません。
比較はあくまで「比較演算子」のお仕事です。
Samさんのおなじみの言語とは若干異なっているかもしれませんが・・・
横から失礼します。
アセンブリでいうと jnz に該当するんでしょうかね。
あくまでも比較しているのは比較演算子になります。
IF A=Bという書き方をするのはBASICでしょうか?
IF A=0 などの省略で…というのは言語によってはあるのかもしれませんが、nasalやC, Java等ではTrue/Falseの判断のみ行いますので、そのような「約束事」は存在していません。
比較はあくまで「比較演算子」のお仕事です。
Samさんのおなじみの言語とは若干異なっているかもしれませんが・・・
投票数:10
平均点:2.00
Re: 本体の起動について
msg# 1.8.2
toshi
投稿数: 1540
takehiroさん、samさん
こんばんは。toshiです。
takehiroさん:
if文の解説をしていただき、ありがとうございました。
おかげさまで少し理解が深まりました。
私、本当にプログラムのことは良く知らない人でして、プログラムのソースを見るのはFlightGear関連の動作を調べるときくらいですので、ご助言をいただけるのはとても助かります。
良く見るif文の形式は、
ですが、実は
と同じことであり、条件式の部分は比較演算子が判定してtrueかfalseの論理値を返し、if文は、論理値がtrueなら文1を、falseなら文2を実行する、というように私は理解しました。
納得です。
samさん:
私の先の投稿で、
引用:と書きましたが、いい加減な理解の下で書いていましたので、この部分を改めて考えてみました。
まず、前にも書きましたが、/sim/model/start-idlingはブール型のプロパティです。
次に、nasalのgetprop()は、ブール型のプロパティを引数にとると、数値の1か0に変換します。
# ブール型のtrueやfalseではありません。
参考: Using Nasal with FlightGear
http://www.plausible.org/nasal/flightgear.html
このことから、if(getprop("/sim/model/start-idling")== 0) という文法は問題ないと言えると思います。
一方、if(getprop("/sim/model/start-idling"))という文法は、getprop("/sim/model/start-idling")は1か0ですので、確かにちょっと気になります。
# samさんの最初の質問に戻ってしまいました...
nasalのif()が、論理値falseを0、論理値trueを1で表すことを許容してくれるかどうか、がポイントだと思います。
# 他の言語(処理系?)では、論理値falseを0、論理値trueを「0以外の整数」で扱う場合があるようです。
nasalのif()の定義については、ちゃんとした説明を見つけられていないのですが、nasalのページには以下のような例があることから、きっと許されているのだろうと想像します。
また、if(getprop("/sim/model/start-idling"))という書き方を良く見かけることからも、きっと問題ないだろうと思いますが、確証があるわけではありません。
参考: Nasal: Not another scripting language!
http://www.plausible.org/nasal/doc.html
ただし、注意していただきたいことは、
if(getprop("/sim/model/start-idling")) [
が許されるなら、1はtrueと同義、0はfalseと同義になるように動作するはずだ、ということです。
したがって、条件式を使って同じ動作を表すように書き直すと、
if(getprop("/sim/model/start-idling")== 0)
ではなく、
if(getprop("/sim/model/start-idling")== 1)
とする必要があります。
p.s. samさんに、ジョイスティックの動作について教えていただきたいことがあります。
http://flightgear.jpn.org/modules/d3forum/index.php?post_id=2254 に質問を書きましたので、お読み頂けますと幸いです。
こんばんは。toshiです。
takehiroさん:
if文の解説をしていただき、ありがとうございました。
おかげさまで少し理解が深まりました。
私、本当にプログラムのことは良く知らない人でして、プログラムのソースを見るのはFlightGear関連の動作を調べるときくらいですので、ご助言をいただけるのはとても助かります。
良く見るif文の形式は、
if(条件式)
文1
else
文2
if(論理値)
文1
else
文2
納得です。
samさん:
私の先の投稿で、
引用:
samさんは、787/Nasal/system.nasにある
if(getprop("/sim/model/start-idling")) [
を
if(getprop("/sim/model/start-idling")== 0) [
にするのが【文法的に】正しいのではないか、とお考えになったのでしたね、
私は、そのどちらも【文法的に】正しいと思います。
まず、前にも書きましたが、/sim/model/start-idlingはブール型のプロパティです。
次に、nasalのgetprop()は、ブール型のプロパティを引数にとると、数値の1か0に変換します。
# ブール型のtrueやfalseではありません。
参考: Using Nasal with FlightGear
http://www.plausible.org/nasal/flightgear.html
このことから、if(getprop("/sim/model/start-idling")== 0) という文法は問題ないと言えると思います。
一方、if(getprop("/sim/model/start-idling"))という文法は、getprop("/sim/model/start-idling")は1か0ですので、確かにちょっと気になります。
# samさんの最初の質問に戻ってしまいました...
nasalのif()が、論理値falseを0、論理値trueを1で表すことを許容してくれるかどうか、がポイントだと思います。
# 他の言語(処理系?)では、論理値falseを0、論理値trueを「0以外の整数」で扱う場合があるようです。
nasalのif()の定義については、ちゃんとした説明を見つけられていないのですが、nasalのページには以下のような例があることから、きっと許されているのだろうと想像します。
また、if(getprop("/sim/model/start-idling"))という書き方を良く見かけることからも、きっと問題ないだろうと思いますが、確証があるわけではありません。
if(1) {
var i=1234;
for(var i=0; i<10; i+=1) {}
print(i); # i==10 here, not 1234!
}
http://www.plausible.org/nasal/doc.html
ただし、注意していただきたいことは、
if(getprop("/sim/model/start-idling")) [
が許されるなら、1はtrueと同義、0はfalseと同義になるように動作するはずだ、ということです。
したがって、条件式を使って同じ動作を表すように書き直すと、
if(getprop("/sim/model/start-idling")== 0)
ではなく、
if(getprop("/sim/model/start-idling")== 1)
とする必要があります。
p.s. samさんに、ジョイスティックの動作について教えていただきたいことがあります。
http://flightgear.jpn.org/modules/d3forum/index.php?post_id=2254 に質問を書きましたので、お読み頂けますと幸いです。
投票数:9
平均点:5.56
Re: 本体の起動について
msg# 1.11
sam
居住地: 東京
投稿数: 10
Toshiさん、takehiroさん、こんにちは。
Takehiroさん、いや、言語は何でもいいです。決まりを覚えればいいだけの話ですから。
どうせ、マシン語になるわけですから・・・
Nasalについての、日本語の詳しい説明が手に入らないので、pealに似ているとの記述から以下を拾いました。
願わくば、nasalもこの通りであって欲しい、と言うところでしょうか。
Perlでは、集合型でないデータ型である数や文字列には区別がない(すべてスカラーと呼ばれる)。ブール演算では、要素を持たない集合型、空の文字列、値が 0 と等しい数値、文字列 "" と "0"、未定義変数が "false" と解釈される。これら以外の全ての値は "true" と解釈される(例えば 0.0 とか 0E0 といった文字列は「0 だが true」となる)。
集合型の要素は、存在するかしないかを評価されることもあり[1]、全ての変数は定義されているかいないかを評価されることがある[2]。ハッシュや配列の要素で値が undef であるものは、存在しているが未定義である。存在と定義の区別は、スカラーをブーリアンのように扱う際に重要である。
Toshiさんの、仰る通り、if(xxxxxx)==0 の様に書くと0がtrueになる。
これは、これで理解出来ました、有り難うございました。
Takehiroさん、いや、言語は何でもいいです。決まりを覚えればいいだけの話ですから。
どうせ、マシン語になるわけですから・・・
Nasalについての、日本語の詳しい説明が手に入らないので、pealに似ているとの記述から以下を拾いました。
願わくば、nasalもこの通りであって欲しい、と言うところでしょうか。
Perlでは、集合型でないデータ型である数や文字列には区別がない(すべてスカラーと呼ばれる)。ブール演算では、要素を持たない集合型、空の文字列、値が 0 と等しい数値、文字列 "" と "0"、未定義変数が "false" と解釈される。これら以外の全ての値は "true" と解釈される(例えば 0.0 とか 0E0 といった文字列は「0 だが true」となる)。
集合型の要素は、存在するかしないかを評価されることもあり[1]、全ての変数は定義されているかいないかを評価されることがある[2]。ハッシュや配列の要素で値が undef であるものは、存在しているが未定義である。存在と定義の区別は、スカラーをブーリアンのように扱う際に重要である。
Toshiさんの、仰る通り、if(xxxxxx)==0 の様に書くと0がtrueになる。
これは、これで理解出来ました、有り難うございました。
投票数:13
平均点:4.62
Re: 本体の起動について
msg# 1.12
takehiro
居住地: Kawasaki
投稿数: 101
こんにちは。どうでもいいことかもしれませんが・・・
>どうせ、マシン語になるわけですから・・・
本当でしょうか?Nasalのようなインタプリタの場合はいかがでしょう?
>if(xxxxxx)==0 の様に書くと0がtrueになる
つまり、0をtrueとして定義する、ということでしょうか?
0をtrueとして置き換えるということでしょうか?
>どうせ、マシン語になるわけですから・・・
本当でしょうか?Nasalのようなインタプリタの場合はいかがでしょう?
>if(xxxxxx)==0 の様に書くと0がtrueになる
つまり、0をtrueとして定義する、ということでしょうか?
0をtrueとして置き換えるということでしょうか?
投票数:11
平均点:5.45
Re: 本体の起動について
msg# 1.13
sam
居住地: 東京
投稿数: 10
Takehiroさん、こんばんは
CPUはマシン語以外は実行できません。数十年前、BASICのソースをいきなり、実行するというCPUも有りましたが、これとて、ONE―CHIPの中に、インタプリタのROMを積んだものでした。
今の、半導体の集積度とベリログのような、便利な道具が有れば、コンパイラの一つ位、ハードで積むことは、やって出来ないことはありませんが、デバッグと編集を外のコンパイラでやる以上、実行だけのコンパイラをCPUに積むメリットは有りません。
インタプリタとは、高級言語をステップごとに機械語に訳して、実行しては、また次のステップを読み込み、機械語に翻訳する、と言う動作を繰り返します。
対して、コンパイラは全文章を一気に機械語に直して、実行するときは、ソースを必要としません。
この、一気に全文章を翻訳するのに、コンパイルの時間が必要なのです。
一方、インタプリタは1ステップだけ訳せばいいので、コンパイルと言う特別な作業をする必要がないのです。
ですから、インタプリタは実行時間が遅い反面、実行させながら、どの行の記述が気に入らない、等と言うことが、すぐ分かり、修正しながら、プログラムを完成させると言う目的にはぴったりだと思います。
Flightgearのように、人の書いたものを、自分の好きなように書き換える、これも、コンパイラでは簡単にはいきませんね。
ただ、インタプリタが完成していれば、コンパイラを作るのは、難しくはありません。
難しいのは、むしろデバッガーでしょう。
その為、昔GAME等という、記号言語では、インタプリタとコンパイラを両方用意して、
インタプリタで散々、デバッグをして、これで良しとなってから、コンパイルする、と言う方法をとっていました。
そろそろ、FlightGearも重くなってきたこともあり、コンパイラを用意するのも一つの方法だと思っています。
If(xxxxx) と if(xxxxx)=0
後者はベーシックで言う、 IF (XXXXX)=0 THEN と言うやつで THEN がTRUEになります。 ELSEがFALSE になるわけで、私が問題にしたのは、前者の場合、何が真で、何が偽か、と言うことで、答えは前ページにあるように分かりました。
その後、nasal の 文章にいろいろな文字列、数字、配列などを、定義して、何が入っているのか、検証してみましたが、残念ながらnasalはpeal程、複雑なことをやっていません。
こんな、コンパクトにまとめられた、インタープリタにあまり、難しいことを要求するのは無理、必要なことは、やってある、と言うことでしょうか。
ちなみに、 <yyyy>0<yyyy> <yyyy>true<yyyy> <yyyy><yyyy> <yyyy>0.5<yyyy> <yyyy>”A”<yyyy> <yyyy>xyz<yyyy> <yyyy>false<yyyy>
まだまだ、いろいろやってみましたが、全部 falseになります。
<yyyy>2.56<yyyy> <yyyy>257<yyyy> <yyyy>9999<yyyy>
これらは、true と判断されます。
もうお分かりでしょう、nasalでは、どうやら、最初の一文字しか、見ていないようなのです。
最初の1文字が1〜9はtrue それ以外は全部falseなのです。
勿論、<のように、宣言文に使うような記号を入れると、エラーとなりますが・・・
でも、分かってしまえば、これはこれでいいんです。
言語が、どうなっているのか、分からなければ、手も足も出ない。
以上、お答えになっているでしょうか?
CPUはマシン語以外は実行できません。数十年前、BASICのソースをいきなり、実行するというCPUも有りましたが、これとて、ONE―CHIPの中に、インタプリタのROMを積んだものでした。
今の、半導体の集積度とベリログのような、便利な道具が有れば、コンパイラの一つ位、ハードで積むことは、やって出来ないことはありませんが、デバッグと編集を外のコンパイラでやる以上、実行だけのコンパイラをCPUに積むメリットは有りません。
インタプリタとは、高級言語をステップごとに機械語に訳して、実行しては、また次のステップを読み込み、機械語に翻訳する、と言う動作を繰り返します。
対して、コンパイラは全文章を一気に機械語に直して、実行するときは、ソースを必要としません。
この、一気に全文章を翻訳するのに、コンパイルの時間が必要なのです。
一方、インタプリタは1ステップだけ訳せばいいので、コンパイルと言う特別な作業をする必要がないのです。
ですから、インタプリタは実行時間が遅い反面、実行させながら、どの行の記述が気に入らない、等と言うことが、すぐ分かり、修正しながら、プログラムを完成させると言う目的にはぴったりだと思います。
Flightgearのように、人の書いたものを、自分の好きなように書き換える、これも、コンパイラでは簡単にはいきませんね。
ただ、インタプリタが完成していれば、コンパイラを作るのは、難しくはありません。
難しいのは、むしろデバッガーでしょう。
その為、昔GAME等という、記号言語では、インタプリタとコンパイラを両方用意して、
インタプリタで散々、デバッグをして、これで良しとなってから、コンパイルする、と言う方法をとっていました。
そろそろ、FlightGearも重くなってきたこともあり、コンパイラを用意するのも一つの方法だと思っています。
If(xxxxx) と if(xxxxx)=0
後者はベーシックで言う、 IF (XXXXX)=0 THEN と言うやつで THEN がTRUEになります。 ELSEがFALSE になるわけで、私が問題にしたのは、前者の場合、何が真で、何が偽か、と言うことで、答えは前ページにあるように分かりました。
その後、nasal の 文章にいろいろな文字列、数字、配列などを、定義して、何が入っているのか、検証してみましたが、残念ながらnasalはpeal程、複雑なことをやっていません。
こんな、コンパクトにまとめられた、インタープリタにあまり、難しいことを要求するのは無理、必要なことは、やってある、と言うことでしょうか。
ちなみに、 <yyyy>0<yyyy> <yyyy>true<yyyy> <yyyy><yyyy> <yyyy>0.5<yyyy> <yyyy>”A”<yyyy> <yyyy>xyz<yyyy> <yyyy>false<yyyy>
まだまだ、いろいろやってみましたが、全部 falseになります。
<yyyy>2.56<yyyy> <yyyy>257<yyyy> <yyyy>9999<yyyy>
これらは、true と判断されます。
もうお分かりでしょう、nasalでは、どうやら、最初の一文字しか、見ていないようなのです。
最初の1文字が1〜9はtrue それ以外は全部falseなのです。
勿論、<のように、宣言文に使うような記号を入れると、エラーとなりますが・・・
でも、分かってしまえば、これはこれでいいんです。
言語が、どうなっているのか、分からなければ、手も足も出ない。
以上、お答えになっているでしょうか?
投票数:9
平均点:4.44
Re: 本体の起動について
msg# 1.14
takehiro
居住地: Kawasaki
投稿数: 101
こんばんは。
確かにCPUは機械語のみ実行することができます。
昔はプログラミングの解説書のインタプリタの項を読むと、命令をステップごとに機械語に翻訳していく、という解説が書いてあって首をかしげたことがありました。
この表現でいくと命令を機械語に変換していくように思われますが実際は直接機械語に変換されず、インタプリタが対応する行動をとっているに過ぎないので、あまり正確ではないな、と思ったものです。
最終的にはインタプリタのもっているバイナリの一部を実行するので機械語を実行しているのですが。
最近ではそのような本はすっかり見かけなくなりましたね。
関係ないですが最近の半導体は高速化&小型化が進んでしまって、パスコンのリードでさえ無視できない要素になってしまって、面倒に感じます。
ラッピングワイヤで配線するなんて、今ではできないですね。
>If(xxxxx) と if(xxxxx)=0
私がわからないのは「0がtrueになる」ということです。THEN の後には真のときの文、ELSE の後には偽のときの文、というはわかるのですが・・・
>Nasal の True / False
なるほど、貴重な実験データをありがとうございます。
参考にいたします。
確かにCPUは機械語のみ実行することができます。
昔はプログラミングの解説書のインタプリタの項を読むと、命令をステップごとに機械語に翻訳していく、という解説が書いてあって首をかしげたことがありました。
この表現でいくと命令を機械語に変換していくように思われますが実際は直接機械語に変換されず、インタプリタが対応する行動をとっているに過ぎないので、あまり正確ではないな、と思ったものです。
最終的にはインタプリタのもっているバイナリの一部を実行するので機械語を実行しているのですが。
最近ではそのような本はすっかり見かけなくなりましたね。
関係ないですが最近の半導体は高速化&小型化が進んでしまって、パスコンのリードでさえ無視できない要素になってしまって、面倒に感じます。
ラッピングワイヤで配線するなんて、今ではできないですね。
>If(xxxxx) と if(xxxxx)=0
私がわからないのは「0がtrueになる」ということです。THEN の後には真のときの文、ELSE の後には偽のときの文、というはわかるのですが・・・
>Nasal の True / False
なるほど、貴重な実験データをありがとうございます。
参考にいたします。
投票数:8
平均点:5.00