前回の記事に出てきた「論理積 and」のBの使い方、つまりはVRM入道「
and命令って何の役に立つの?」で
ghost氏が使った「論理積 and」の使い方は本当に役に立つのか?ということを検証してみました。まぁ、タイトルが結論になっちゃっていますが(笑)。
テストするために終着駅を作成しスクリプトを書きました。
ghost氏があの記事を書かれた時点では未だSearchPoint命令の実用性に気が付いておられなかった(?)ようなので、サンプルコードにはSearchPointが使われていません。よって、部品の固有名で参照されているので汎用性が乏しい。そこで、サンプルコードは流用せずに1から書き直しました。・・・その結果、
コピペで増殖させても使える終着駅が完成しました。舞台作りに1時間、スクリプト作成に1時間程度のもんです。コレはコレで使えそうだから、そのうち使うとして、
この「論理積 and」を使ったスクリプトは確かにスッキリと書けて良い流れでしたが、ポイントの動作を指定する上で、
//番線動作指示メソッド
BeginFunc MethodSensorEvent
GetSenseTrain ObjTrain
mov this VarPlatformNo ObjTrain VarPlatformNo
ifeq VarPlatformNo 1
set ObjTrain VarFlag 0
endif
ifeq VarPlatformNo 2
set ObjTrain VarFlag 3
endif
ifeq VarPlatformNo 3
set ObjTrain VarFlag 5
endif
ifeq VarPlatformNo 4
set ObjTrain VarFlag 9
endif
ifeq VarPlatformNo 5
set ObjTrain VarFlag 1
endif
EndFunc
赤い文字のように10進数で表記するので、やはり直感的には判りづらいものです。そこで、
//番線動作指示メソッド
BeginFunc MethodSensorEvent
GetSenseTrain ObjTrain
mov this VarPlatformNo ObjTrain VarPlatformNo
ifeq VarPlatformNo 1
set ObjTrain VarFlag 0000
endif
ifeq VarPlatformNo 2
set ObjTrain VarFlag 0011
endif
ifeq VarPlatformNo 3
set ObjTrain VarFlag 0101
endif
ifeq VarPlatformNo 4
set ObjTrain VarFlag 1001
endif
ifeq VarPlatformNo 5
set ObjTrain VarFlag 0001
endif
EndFunc
2進数のように表記してやると、ポイントをどう動かすのか判りやすいでしょう。
ということで
、「10進数で表記して2進数で処理するandを使う方法」よりも「2進数で表記して10進数で処理するmodを使う方法」の方が現時点では扱い易そうという結論になりました。VRMスクリプトで2進数表記の指定が出来れば、「論理積 and」を使う方が良いんだろうけどね。

0