expressionとMel

expressionとMelは見た目が似ているので同一視してしまうことが多いのですが、実際のところexpressionはリアルタイムで値を記述しておく物と言う意識がないと思ったとおり動かなくて困ることがあります。
「そうじゃないんだよな~」と思う動きをするときは大体これが原因です。
特にif文などで制御したいattributeを参照させる場合などです。

if(pCube1.visibility==0){
 pCube1.visibility=1;
}else{
 pCube1.visibility=`rand 0 2`;
}

このようなexpressionは不安定な動きをします。
ですので、書き換える必要があります。

if文を使わずに分岐させる方法を考えなくてはなりません。

ではどうやって分岐させればよいのでしょうか?
このような場合利用してみて欲しいのが「演算式」です。
演算で分岐させる方法は、四則演算だけで考えていると答えが見つかりにくいのですが、実のところif文もアセンブラーではただ単なる演算でしかありません。
なので、アセンブラーの手法を利用すればif文を使わずに分岐させることができるということです。

利用する演算子は「== , != , < , > ,&&, ||」などの比較演算子と呼ばれる演算子です。
if文の()のなかで利用していたものですね。
これらの演算子は演算結果として、0か1を返してくる性質がありますので、それを利用します。
たとえば上記のexpressionは以下のように書き換えることができます。

pCube1.visibility=(pCube1.visibility!=0)*(int)`rand 0 2`;

このように比較演算子で得られた値(0or1)を入力したい数字に乗算することで分岐させることができます。
これにより、この式を評価している間にステータスが変わってしまうことがなくなります。

広告
カテゴリー: ちょいテク系 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中