注射器置き場
ゲーム製作等をやっているブログです
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
▲Page top

ウディタに存在する(他は知りません)変数操作ビット積と変数条件のビットを満たすの使い方について、備忘録の意味も込めてまとめてみた


意味なら分かってる!という人は→こちら利用価値へ 使い方へ


まず、ビットとは10100、1101などのように、二進数で表す数字の桁の一つあるいは複数のことであり、それぞれ十進数で20(2^4+2^2)、13(2^3+2^2+2^0)を指す。



ビット積、ビットを満たす、それぞれの意味はこんな感じ
AとBのビット積→AとBをそれぞれ二進数に直し、それぞれの桁をかけた数値……とはいっても、二進数は数字が1と0しかない(一番左の1より左は0と扱う)ので、どちらも1なら1、それ以外なら0となるので、その結果を並べてるだけ


ABビット積
3(11)8(1000)0(0)
14(1110)13(1101)12(1100)
7(111)34(100010)2(10)
1(1)13(1101)1(1)



AがBのビットを満たす→AとBのビット積がBと一致する……つまりは、AとBを二進数に直した際、Bの1になる部分が全て、Aでも1なら条件を満たすと扱う


AB可否
15(1111)17(10001)×
3(11)2(10)
8(1000)4(100)×
5(101)1(1)









使い方へ


ビット積を使うというのは、噛み砕いてしまうと、はいかいいえの二択だけではあるが、一つの変数で複数のスイッチを切り替え、判定できるというものだ。

そして、利用価値としては、多くの場合他の条件、他の計算でこと足りるので、基本的には必要にならない。あると便利なケースもある、その程度。
そんなあると便利なケースとはこういうケース→はいかいいえの二択でいいが、やや管理すべき数が多い


例えば、あるキャラ(以下X)に関して、会った事があるかと、信頼されているか、死亡フラグが立っているかの三つがあるとする。
通常ならば、「Xに会ったことがあるか」、「Xに信頼されているか」、「Xに死亡フラグが立っているか」と変数を三つ用意しなければならないが、ビットを使えば一つで済む。
起動条件に使う枠も一つで済むから、より複雑な条件を組むことも出来る

パターン例
Xに直接会ったことがあり、信頼もされている
通常の場合
「Xに会ったことがあるか」が1
「Xに信頼されているか」が1
この二つが条件となる。

対して、ビット積の場合、
1のビットが面識、2のビットが信頼を指すとすると(細かくは後述)「X」が3のビットを満たすだけでその条件指定に出来る


他にも、あるイベントにおいて、ランダムだったり、任意だったりで、参加したキャラが変化したとする。その参加したキャラを登録したい、そうなったとき、結構な便利さを発揮する

そこに参加したキャラは、次のイベントには参加できないなどやろうとすると、通常変数はその参加しうるキャラの数だけ用意しなくてはならなくなるところを、変数ひとつで出来る



だが、ビット積の使い方を習得する手間>それによって省ける手間なところはあるし、いっそコモンで作ればいいというのが真理ではある。

だが、この枠を節約するというのは、複雑な戦闘を組みたいという人にとっては、複雑さの程度にもよるが、実はかなり大きな問題だったりする。
戦闘をいじろうとした、あるいは戦闘をいじったことのある人は知っている通り、戦闘中のステータスを入れておく「10:×┏ 戦闘一時ステータス[基]」は最初から使っている項目が多く、大量の要素を組み込もうとすると、ウディタの根幹部にある限界、項目数の壁にぶち当たる事があったりする。そんな時に大いに役立ってくれるわけだ。


用途がはっきりしたところで、ようやく重要な使い方に移ろうと思うけれど、ビット積、ビットを満たすの意味がここで再チェックしたい人はこちらへ。
再チェックの済んだ、または要らない人は先へどぞ。





使い方
まずは条件のビットを満たすから
使い方は大きく分けて3ステップ
1 ビットで判定というのは、2進数に直した際、その桁が1か0でオンかオフかが決まるというものなので、2の累乗の数字がスイッチとなる。なので、まず1(2^0)から始めて、ビット……つまりは二の累乗のどの数にどのスイッチを割り当てるか決める(分からなくならないよう、メモ用のコモン用意してもいい)
2 スイッチをオンにしたい場所で、変数にその対応するビットを加算する。最初はウディタの仕様上、全ての変数は0で、ビットも全部オフなので気にしなくても大丈夫、オフにする場合はビット積の部分で記述
3 そのスイッチがオンなら起動するイベントの起動条件にビットを満たすを設定
3の具体的な方法についてはビットを満たすの記述を参照

ちなみに、ウディタだと、ビットを満たさないという条件はないので、それをやりたい場合は少々複雑になる。
条件分岐(変数)で満たしてほしくないビットを満たすと、上記以外を合わせて使うか、その条件で起動したいイベントより右のページに満たしてほしくないビットを満たすを起動条件とするイベントを入れて、優先度で消すことになる。


次に計算のビット積
こちらの処理は端的に言えば、指定したスイッチをオフにする、というもの
どう使うかというと、通常のものでいう、代入の感覚である。
元がオンであろうと、オフであろうと、処理の後は指定したスイッチがオフになる。
結局は一つの変数なので、素直に代入を行うと、全てのスイッチが変わってしまう上、オンからオフならば指定したビットを減算、オフからオフならば指定したビットを加算でいいものの、オンでもオフでもオンに……ということは他の処理ではできない(回りくどいことをすれば別だけど、結構めんどくさい)ので、これを使うことになる。

使用例
ビットを8つ使う場合
一つも操作しないときの数、二進数表記11111111となる511(2^8-1)から、オフにしたいスイッチのビットを引いたものとのビット積を取ることで、そのスイッチをオフにする事が出来る。
8にあたるスイッチをオフにする場合→511-8=503(11110111)
256と1にあたるスイッチをオフにする場合→511-256-1=254(01111110)
こうして出てきた値と変数のビット積を取り、そのままその変数に代入すると、その変数の指定したスイッチだけがオフになる。
オフでもオンでもオンにということをやりたいときは、この後にビットを加算すると、元がオフであることが保証されているので、確実に行う事が出来る。




以上になりますが、何か確認したい、よく分からないことがあれば遠慮なくどうぞ。
スポンサーサイト
▲Page top

▲Page top














管理者にだけ表示を許可する

▲Page top
▲Page top

プロフィール

大佐

Author:大佐
ウディタでゲームを作ったり、コモンを組んだりしています

最新記事

最新コメント

月別アーカイブ

カテゴリ

アクセスカウンター

検索フォーム

RSSリンクの表示

リンク

ブロとも申請フォーム

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。