2008/3/4

SearchPoint命令にやっぱり使い道がない件  VRMスクリプト禅問答
ここまでの流れ。

SearchPoint命令って使い道ねーじゃん
   ↓
いや、こんなことが出来るぞ、ゴメンよI.MAGiC!!
   ↓
そしたら、こんなことも出来るんじゃねーの!!
   ↓
あれ・・・仮組みしたけど意図通りに動かねーぞ?
   ↓
やっぱり駄目じゃん・・・@ ← 今ここ

結論から言うと、SearchPoint命令が検出できるのは、命令を実行する編成の先頭台車が踏んでいるレールの(進行方向に)次のレールがポイントの場合に限られることがわかりました。

つまり・・・

=[編成>=□=(128mm)=□=(128mm)=□=(ポイント)=・・・

※ □はジョイント

こんな経路があったとします。編成が左から右へ向かって走行しており、タイマーイベントでSearchPoint命令の第1パラメーターに256.0を与えて実行し続けているとしましょう。製品付属のスクリプトリファレンスの記述通りであれば、編成が1つ目のジョイントを通過した時点でポイントが検知できるはずです。が、実際には、2つ目のジョイントを通過して、ポイントまでの距離が128mmを切らないと検知されません。

現時点でリリースされているVRMの最長レールはIFLX384(384mmフレキシブルレール)であり、これを伸ばして得られる最大直線は512mmです。ポイント切替のためのガイドメッセージを出したり、ポイントを閉塞点と見做したりするには些か短距離であり、それ以前に、ポイントの直前に必ずロングレールを配さねばならない、というのはナンセンスです。

ゆえに「SearchPoint命令はやっぱり使い道がない」と言わざるを得ません。いや、厳密に言えばコレしか使い道がない、と言うべきでしょうか。っつーか、リファレンスの記述を真に受けて、ボクが投じた無駄な時間を返してください、な気分。

そんなこんなで、ちょっとvrm4cv用スクロール開発は、頓挫とは言わないまでも、対応要度がボクの中では激減してしまいました。まぁ、誰に求められているワケでもないのでどっちでもいーですが。
0

2008/2/25

オブジェクト参照がコンパイル時に名前解決出来ない場合、ビュワー起動不能になる現行仕様は妥当なのか?  VRMスクリプト禅問答
どちらかというとI.MAGiCの中の人向けアイデアメモ。
独り言:
今回の事例もそうですが、せめてスクリプトで部品や変数の有無を確かめる条件式が欲しいですねぇ。それがあれば必要パッケージを持っていなかったり、編成を変えたりしても今より柔軟にスクリプトを組めると思いますけど。

Caldia氏の言っているのは、たとえばC言語におけるディレクティブに当たるものになると思うんですが。

(1) ほとんどのVRMユーザーは、VRMスクリプトがコンパイル型言語処理系であることについて無自覚であること。すなわち、スクリプトの字面はビュワーが起動する瞬間にのみ意味があり(thisに関する挙動が典型的)必ずしもそれぞれのスクリプト命令が実行される瞬間と一対一対応しないこと。
(2) ゆえに、階の異なる言語処理系(VRMスクリプトがビュワーの挙動を決定するのに対し、Caldia氏の言う仮称“VRMディレクティブ”はコンパイラの挙動を決定する)を、一般的なVRMユーザーが理解できるとは思えないこと。
(3) 仮に理解するユーザーがいるとして、VRMユーザーのスクリプトを書く目的は、第一に自分のVRM環境で動作することであり、他人のVRM環境での動作を保障するためにVRMディレクティブを厳密に記述する人がいるとは思えないし、仮に記述したとしても、記述した本人のVRM環境ではその記述が正しいか否か判断できないこと。

以上の3つの理由により、ちょっと違うんでないかい、と思ったワケです。

で、以下は、ユーザーにはどうでも良くて、中の人にご一考いただきたいと思うことなのですが。

続きを読む
0

2008/2/24

オブジェクト参照の方向非対称性について  VRMスクリプト禅問答
第4号の音源部品を使った作品であっても、そのメソッド/グローバル変数を外部から参照しなければ・・・つまり、音源部品が他の部品の状態をタイマーイベント等で監視して発声するようなロジックを採用すれば、第4号が欠落した環境であってもビュワー起動を阻害することはない。

について無問自説。

2つのオブジェクトが連携して何かが起きる仕掛け(もっともイメージしやすいのは、センサーが編成を検知したら何かが起きる、というパターン)を実現するには、大雑把に考えて二通りの考え方があり、それぞれに一長一短があるという話なのだが、上掲引用元つながりで「編成がセンサーを踏んだら音源部品で音が鳴る」を例に示してみる。

音源部品を例にしてはいるが、理屈は信号機などの「主にセンサーから駆動され、一部のパッケージにのみ収録されている部品」すべてに共通する考え方だと思ってもらっていい。

クリックすると元のサイズで表示します
(クリックで拡大表示されます、以下同)

上掲例が“普通の書き方”になる。センサーが編成を検知すると、SetEventSensor命令のイベント設定従ってメソッドMtdSenseTrainが実行される。その中のcall命令によって音源BELL1のメソッドMtdPlaySoundが実行され、音が鳴る、という流れだ。

図中、オブジェクト(部品)間の名前の参照を赤い矢印で示している。具体的にはオブジェクト名BELL1とメソッド名MtdPlaySoundが、センサーSENSOR1側から音源BELL1に向かって参照されていることがわかる。

このようなスクリプトを含むVRMレイアウトを、音源部品を含む第4号がインストールされていない環境で開くと下掲図のような状態になる。

クリックすると元のサイズで表示します

色を薄くしている部分は、スクリプトも含めて、ファイルを開いた時点でレイアウト上から消えてなくなる。この結果、参照先を失った赤い矢印(×印で“参照できない”ことを示している)がビュワー起動時にエラーとなり、レイアウトをビュワーで見ることが出来なくなる。

続きを読む
0

2008/2/22

SearchPoint暴走列車  VRMスクリプト禅問答
先だって“SearchPoint命令の使い道がない”と書いたんですが、使い道を見つけてしまいました。バカ、バカ、三日前のオレのバカ。使い道ない、なんて言ってゴメンよ、I.MAGiCの中の人。っつーか、中の人に謝れ!謝れ!三日前のオレ。

と、既にネタ臭さをプンプン漂わせておりますが、実現される事柄は至極まともです。ちょっと難がありますけども。

*     *     *

とりあえず、ポイントがたくさんあるけれども行き止まりのないレイアウトを作ります。リバース区間があったりした方が面白いです。面倒臭いと感じる人は、とにかく、フレキシブルレールでたくさんのポイントを手当たり次第につなげばOK。

クリックすると元のサイズで表示します
<たとえば、こんなのでもいい>

ポイントを10コ配置して適当につないでみました。わかりやすいようにポイントをレイヤー分けして表示色を変えていますが、これは必須ではないです。ただし、ポイントの名前はユニークにしてください。ポイントをコピー&貼り付けしていなければ、ユニークな名前になっているはずですが、念のためご確認を。ポイントの名前もユニークでなくてもOK。

続きを読む
1


teacup.ブログ “AutoPage”
AutoPage最新お知らせ