0:自身のマスクと、他のキャラクタのカテゴリで判定する。
→全キャラクタと衝突判定(自分のマスクと相手のカテゴリでAND演算)
つまり、常に衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。
正:同じグループ番号同士の場合、必ずヒットする。それ以外は0と同等。
→同じグループ番号の場合は必ず衝突し、異なるグループ番号の場合は衝突判定(自分のマスクと相手のカテゴリでAND演算)
つまり、同じグループ番号以外と衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。
負:同じグループ番号同士の場合、必ずヒットしない。それ以外は0と同等。
→同じグループ番号の場合は必ず衝突せず、異なるグループ番号の場合は衝突判定(自分のマスクと相手のカテゴリでAND演算)
つまり、同じグループ番号以外と衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。
相手のカテゴリビットと、自分のマスクビットで、AND演算を行う。
0であればヒットしない。0以外であればヒットする。
①0000と1010
0000 → 0のため、衝突せず
②1111と1010
1010 → 0でないため、衝突する
③0001と1010
0000 → 0のため、衝突せず
④1110と1010
1010 → 0でないため、衝突する
⑤1010と1010
1010 → 0でないため、衝突する
⑥0101と1010
0000 → 0のため、衝突せず
⑦1000と1010
1000 → 0でないため、衝突する
⑧0111と1010
0010 → 0でないため、衝突する
どちらかが0(ONビットなし)であれば、AND演算の結果は0となる。
どの桁でも1が重ならない場合(どこでもONビットが一致しない場合)、AND演算の結果は0となる。
1が重なる桁が1つでもある場合(どこかでONビットが一致する場合)、AND演算の結果は0とならない。
0以外の同一値であれば、AND演算の結果は0以外の同一値となり、0とはならない。
全キャラクタと衝突させたい場合、全キャラクタのマスクとカテゴリを0以外の同一値にしておけば良い。
- ビットのAND演算(2進数では、ともに1の場合のみ1となり、それ以外は0)
1 AND 1 → 1
1 AND 0 → 0
0 AND 1 → 0
0 AND 0 → 0
同じ値の時は同じ値を返し、異なる値の場合は0を返す。
ともに1の時のみ1を返し、どちらかが0の時は0を返す。
①自分の衝突判定の有無
自分のマスクと相手のカテゴリで判定
②相手の衝突判定の有無
相手のマスクと自分のカテゴリで判定
自分のマスクを0にしておけば、自分の衝突判定では、衝突しない。
自分のカテゴリを0にしておけば、相手の衝突判定では、衝突しない。
自分のマスクもカテゴリも0にしておけば、どの衝突判定でも、衝突しない。
自分と同じキャラクタ同士で衝突したい場合は、マスクもカテゴリも0にしてはならない。
自分と同じキャラクタ同士で衝突したい場合は、マスクとカテゴリ0以外の同一値にしておくと確実。
①
|
マスク |
カテゴリ |
A |
1111 |
1111 |
B |
1111 |
1010 |
C |
1111 |
0101 |
D |
1111 |
0000 |
|
Aカテゴリ |
Bカテゴリ |
Cカテゴリ |
Dカテゴリ |
|
1111 |
1010 |
0101 |
0000 |
Aマスク:1111 |
1111:○ |
1010:○ |
0101:○ |
0000:× |
Bマスク:1111 |
1111:○ |
1010:○ |
0101:○ |
0000:× |
Cマスク:1111 |
1111:○ |
1010:○ |
0101:○ |
0000:× |
Dマスク:1111 |
1111:○ |
1010:○ |
0101:○ |
0000:× |
②
|
マスク |
カテゴリ |
A |
1010 |
1111 |
B |
1010 |
1010 |
C |
1010 |
0101 |
D |
1010 |
0000 |
|
Aカテゴリ |
Bカテゴリ |
Cカテゴリ |
Dカテゴリ |
|
1111 |
1010 |
0101 |
0000 |
Aマスク:1010 |
1010:○ |
1010:○ |
0000:× |
0000:× |
Bマスク:1010 |
1010:○ |
1010:○ |
0000:× |
0000:× |
Cマスク:1010 |
1010:○ |
1010:○ |
0000:× |
0000:× |
Dマスク:1010 |
1010:○ |
1010:○ |
0000:× |
0000:× |
③
|
マスク |
カテゴリ |
A |
0101 |
1111 |
B |
0101 |
1010 |
C |
0101 |
0101 |
D |
0101 |
0000 |
|
Aカテゴリ |
Bカテゴリ |
Cカテゴリ |
Dカテゴリ |
|
1111 |
1010 |
0101 |
0000 |
Aマスク:0101 |
0101:○ |
0000:× |
0101:○ |
0000:× |
Bマスク:0101 |
0101:○ |
0000:× |
0101:○ |
0000:× |
Cマスク:0101 |
0101:○ |
0000:× |
0101:○ |
0000:× |
Dマスク:0101 |
0101:○ |
0000:× |
0101:○ |
0000:× |
④
|
マスク |
カテゴリ |
A |
0000 |
1111 |
B |
0000 |
1010 |
C |
0000 |
0101 |
D |
0000 |
0000 |
|
Aカテゴリ |
Bカテゴリ |
Cカテゴリ |
Dカテゴリ |
|
1111 |
1010 |
0101 |
0000 |
Aマスク:0000 |
0000:× |
0000:× |
0000:× |
0000:× |
Bマスク:0000 |
0000:× |
0000:× |
0000:× |
0000:× |
Cマスク:0000 |
0000:× |
0000:× |
0000:× |
0000:× |
Dマスク:0000 |
0000:× |
0000:× |
0000:× |
0000:× |
⑤
|
マスク |
カテゴリ |
A |
1010 |
1111 |
B |
0101 |
1010 |
C |
0101 |
0101 |
D |
1010 |
0000 |
E |
0000 |
0011 |
F |
1111 |
1100 |
|
Aカテゴリ |
Bカテゴリ |
Cカテゴリ |
Dカテゴリ |
Eカテゴリ |
Fカテゴリ |
|
1111 |
1010 |
0101 |
0000 |
0011 |
1100 |
Aマスク:1010 |
1010:○ |
1010:○ |
0000:× |
0000:× |
0010:○ |
1000:○ |
Bマスク:0101 |
0101:○ |
0000:× |
0101:○ |
0000:× |
0001:○ |
0100:○ |
Cマスク:0101 |
0101:○ |
0000:× |
0101:○ |
0000:× |
0001:○ |
0100:○ |
Dマスク:1010 |
1010:○ |
1010:○ |
0000:× |
0000:× |
0010:○ |
1000:○ |
Cマスク:0101 |
0101:○ |
0000:× |
0101:○ |
0000:× |
0001:○ |
0100:○ |
Dマスク:1010 |
1010:○ |
1010:○ |
0000:× |
0000:× |
0010:○ |
1000:○ |
Eマスク:0000 |
0000:× |
0000:× |
0000:× |
0000:× |
0000:× |
0000:× |
Fマスク:1111 |
1111:○ |
1010:○ |
0101:○ |
0000:× |
0011:○ |
1100:○ |
同じキャラクタ同士でも衝突する場合としない場合がある。
自分と相手の衝突と相手と自分の衝突では判定結果が異なる場合がある。
実際には、2進数→16進数へ変換した値で代入する必要あり。
最終更新:2014年08月03日 02:27