忍者ブログ

背伸びした視点のブログ→ビット積ちゃんマジ薄幸少女


ビット積ちゃんマジ薄幸少女  2010 / 10 / 28 ( Thu )

こんばんは。次の日のご飯何にするか考えてたらお腹すいてその日の夜食になったぽりです。


今日はすごく久しぶりにウディタミニテクニック記事。本日はなんだかウディタ使いまくってる方でもなかなか知らない人が多いっぽい機能があったので、緊急講座を行なおうと思います。

けっこうなウディタリアンでもなかなか使ってる人がいないらしいので、一般のユーザーさんだと使い方はおろか、存在すら知らない人がいるんじゃないかな?



その機能とは、

bit1.png


こいつです。


ビット積とは何か、そしてどう使えばいいかのさわりを紹介したいと思います。

出来るだけ分かりやすく説明しようと思うのですが、今回、2つだけ前知識として知っていて欲しいことがあります。


予習1.2進数というものがあり、「1=1 , 2=10 , 3=11 , 4=100……」と続いていくこと

予習2.0×0=0 , 1×0=0 , 0×1=0 , 1×1=1であること


以上です。この2つについて思い出してから、↓の「続きを読む」からどうぞ。


まず、ビット積とは何か、これは説明書にも簡単に書いてありますが、2つの数をビット(2進数)に直したとき、各ケタを掛け算した結果が戻ってきます。

例えば11(2進数で1011)と14(2進数で1110)のビット積を計算したとき、

72c322f1.png

と計算され、10が答えになります(※普通の掛け算と違い、各ケタを掛け算してることを忘れずに)


計算そのものはどういうものか分かってくれたと思うので、次は実用編。
じゃあ、これが何に役立つの?というと、ゲームで0と1というと何か心あたりありませんか?



アレです。スイッチ(フラグ)を処理するのに使います。


例えば、こんな場所があったとします。


bit3.png

そして処理の内容は、「スイッチ1を押したらボックス1が変わる、スイッチ2を押したらボックス2が変わる……」というものにしたいと思います。

この処理を組む一番簡単な方法は、
◇スイッチ1を押したら変数1に1を代入

◇変数1が1のとき、ボックス1が変わる

◇スイッチ2を押したら変数2に1を代入

◇変数2が1のとき、ボックス2が変わる

という感じでしょう。もちろんこれでも十分OKですが、どうせ0~1しか使わないのに変数領域4つも占領するとか無駄な気がしませんか?4つならまだしも、10個とかあったら通常変数のリストもかなり長くなるし大変。


ならばここで役立つのがビット積です。この4つのスイッチを1つの変数でまかないましょう。



bit4.png

まず、4つのスイッチを上のようにナンバリングします。(「=」の右は2進数での値です。)
スイッチ処理は、
◇スイッチ1が押されたらIDである1を変数に足し算する
◇スイッチ2が押されたらIDである2を変数に足し算する
……という感じ。ちなみに5個以上の時はIDは「16→32→64→128→……」と倍々に増えていきます。


さて、もしここまで正しく処理できたなら、スイッチ1と3だけ押したとき変数には1+4=5が代入されています。さてここからどうやってボックス処理を導き出すのでしょうか。



さて、5というのは2進数で0101です。2進数0001と0100を足し算したのだから当然といえば当然ですが。

このへんで勘の良い方は気づいたでしょうか。1を足せば必ず2進数の一番下は1、足さなければかならず0になります。
ならばこの変数と1のビット積を取れば、スイッチ1を押した時だけ1、押して無いときは0になるのです!

同様に、この変数と2(0010)のビット積を取れば、スイッチ2を押したときだけ2、押して無いときは0になります。

もっと応用すれば、この変数と6(0110)のビット積をとった場合、
スイッチ2がON、スイッチ3がOFF 2(0010)
スイッチ2がOFF、スイッチ3がON 4(0100)
スイッチ2も3もON 6(0110)

となり、2つのスイッチの状況を条件分岐1つで分岐させることができます。


ウディタの変数が保存できる最大数というのが2147483648で、これを2進数に直すと31ケタになります。つまり、理論上は1つの変数に最大31個のスイッチを入れることが出来るのです!



さてこのビット積が真に実力を発揮するのは「汎用性のあるコモンを自作したとき」
自作で汎用性のあるコモンを作ったとき、それを「コモンイベント呼び出し」で呼び出す必要があります。そして、コモンを呼び出すときにコモンセルフ0~3に設定項目を入力することが出来ます。

ですが、汎用性があるシステムってのはたまに設定項目4つじゃ足りなくなる時があります。そのときにこれ。ON/OFF系の設定項目なら31個まで1つの変数に圧縮できるので、設定項目を非常に多くしてもそのまま使える時が来る場合があります。



その他には自作戦闘システムとかにも使えそうです。例えば、「このアイテムは鎧でもあるけど盾として装備することも出来るんだ!」というアイテムを作りたい時、

武器(右手) 1(00001)
武器(左手) 2(00010)
4(00100)
8(01000)
装飾 16(10000)

として保存し、盾として装備できるかは4とのビット積、鎧として装備できるかは8とのビット積で調べたらどうでしょう。12(01100)ならば4とのビット積に4を、8とのビット積に8を返すので、盾にも鎧にもなるアイテムの完成です。



さてここまで長々と書きましたビット積。大体どんなものか分かってもらえましたでしょうか。

ですが見てくださった方にはとある大事なお知らせがあるのです。


ここまで書いたとおり、ビット積はあると便利ですが、ビット積が無いと作れない処理というものは実はありません。一番最初のスイッチ処理もただ単に変数4個使えばビット積なしで作れますし、それ以外のも個数分変数を用意して、個数分条件分岐すれば普通に処理することが出来ます。ビット積はあくまでラクするための機能なのです。だからこそこんなに知名度が低い機能になってしまったのですが。


ですがちゃんと覚えたらラク出来る処理がいっぱいあるのは事実です。ゲーム製作に余裕が出てきたら勉強してみるのも一手です。


※追記:「動画再生コモン」にビット積を使って実際に「コモンイベント呼び出し」時に6つの設定項目を変数1個で処理させる部分があります。興味があったら解析してみてはどうでしょう。

拍手

PR

Comment

お名前
タイトル
文字色
URL
コメント
パスワード

プラグイン

カウンター

サイト移動

メインページへ行く
背伸びした視点の日々
旧ブログへ行く
この視点の日々

執筆者として参加していたようです
ウディタ新聞

ついったー

カレンダー

04 2017/05 06
S M T W T F S
1 2 3 4 5
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

プロフィール

HN:
ぽり0655
年齢:
28
性別:
男性
誕生日:
1989/04/16
自己紹介:
主に日記を書きながら、たまにゲームを作ったり作らなかったり。

最新記事

最新コメント

※ぽりが返信したコメントには、タイトル横にマークが付いています
[07/28 MK]
[03/10 拍手したものです]
[12/25 NONAME]
[12/13 拍手したものです]
[09/15 拍手したものです]

カテゴリー

ブログ内検索

アーカイブ

RSS

管理者専用