・グループ番号について 0:自身のマスクと、他のキャラクタのカテゴリで判定する。 →全キャラクタと衝突判定(自分のマスクと相手のカテゴリでAND演算) つまり、常に衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。 正:同じグループ番号同士の場合、必ずヒットする。それ以外は0と同等。 →同じグループ番号の場合は必ず衝突し、異なるグループ番号の場合は衝突判定(自分のマスクと相手のカテゴリでAND演算) つまり、同じグループ番号以外と衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。 負:同じグループ番号同士の場合、必ずヒットしない。それ以外は0と同等。 →同じグループ番号の場合は必ず衝突せず、異なるグループ番号の場合は衝突判定(自分のマスクと相手のカテゴリでAND演算) つまり、同じグループ番号以外と衝突判定(自分のマスクと相手のカテゴリでAND演算)あり。 ---- ・マスクビットとカテゴリビットについて 相手のカテゴリビットと、自分のマスクビットで、AND演算を行う。 0であればヒットしない。0以外であればヒットする。 ・ビットのAND演算の具体例(2進数の場合) ①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演算(ともに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にしておけば、どの衝突判定でも、衝突しない。 ---- ・表での管理 ① ||マスク|カテゴリ| |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:○| ----