エクステンション解説/Bit Mask Object

Last-modified: 2011-10-29 (土) 14:59:46

Bit Mask Objectとは

BitMask( "Bit Mask Object", 1, 1, "&")とかでビット演算ができる。

作成者Jax
バージョン(2009年7月23日)
対応ランタイムWindows,HWA

入手方法

以下のリンクからダウンロードして下さい。

ビット演算をゲームでどのように使うのか?

Bit Mask Objectを使えば、複雑な処理を一つのイベントにまとめることが出来る可能性があります!
たとえば、ロールプレイングゲームのようなものを作っていて、目の前に扉があったとします。
その扉は、魔法使いは通れる、武道家は通れる、勇者は通れる、敵も通れるが一般人は通れないとします。
そのような場合にビット演算を使うととても便利なことがあります。

はたして、ビット演算とはいったいなんなのでしょうか。
たとえば、17と28のandを取ると結果は16になります。
何故でしょう?
2つの数を2進数に変換すると、17 (10001) 28 (11100) になります。
andは互いの数が1のときに1を返し、それ以外は0を返す演算子なので

10001 & 11100 = 10000

に、なるわけです。
ここで、
5の位の数が魔法使い
4の位の数が武道家
3の位の数が勇者
2の位の数が敵
1の位の数が一般人
だということをあらかじめ決めたとします。

そして扉には11110という値を持たせておきます。

そこで扉と勇者がぶつかったときに、扉と勇者のandを取ります。
勇者は3の位なので、4 (00100)という値を持っています。

00100 & 11110 = 00100

という結果が返ってきます。
返ってきた値が0以上であれば扉は開けることができます。

ここでもし、一般人がぶつかったとします。

00001 & 11110 = 00000

なので、扉を開けることはできません。
これがゲームとビット演算とのうまい使い方だと僕はおもっています。

Bit Mask Objectの使い方

Bit Mask Objectは基本的にオブジェクトからデータを抽出から使えるようになります。
Bit Mask ObjectにはBit mask on two numbers と Bit mask on one number の2種類の演算方法があります。
Bit mask on two numbersは、C言語でもおなじみ、2つの値から一つの結果を得るものです。
Bit mask Objectは、and や or、xorの他に便利な演算子が用意されているため、Bit mask on one numberという一つの値から演算することが出来る処理も含まれています。

Bit mask on two numbersで使える演算子

0	指定した位のビットを0に
1	指定した位のビットを1に
&	指定した位のandを取る
|	指定した位のorを取る
^	指定した位のxorを取る
f	指定した位を最初に指定した数の位にする
L	指定した位を2つ目(最後)に指定した数の位にする
t	Not the value of the first bit

Bit mask on one numberで使える演算子

0	指定した位のビットを0に
1	指定した位のビットを1に
t	指定した位を0なら1、1なら0に
-	指定したくらいをいじらない

Bit Mask Objectのビット演算はC言語のビット演算とは異なり、位ごとに演算することができます。(しなければなりません)コレは、どういうことなのか少々理解しがたいかもしれませんが、とてもシンプルです。

まず、Bit mask on two numbersの関数ですが以下のように3つの値を渡す必要があります。

BitMask( "Bit Mask Object", > 値を入力 <, > 値を入力 <, > 文字列を入力 <)

それぞれ、first,second,maskとなってますが、一つ目と二つ目は、ビット演算したい値になり
最後のmask(文字列を渡す部分)では各桁をどの演算子で結果を得るのかを渡すことになります。

要するに、17 (10001) と 28 (11100) のandを取りたければ

BitMask( "Bit Mask Object", 17, 28, "&&&&&")

と、値を渡してあげればOKです。
また、

BitMask( "Bit Mask Object", Val("0b10001"), Val("0b11100"), "&&&&&")

のように入力することによって視覚的にわかりやすく書くことも可能です。

コメント