提示コードですがmStageが一万要素ある為マップとプレイヤーやマップと敵などを最初から当たり判定していると負荷が大きく処理が重たいのですがどうすればマップ上でプレイヤーに近いものだけを当たり判定出来るのでしょうか? 提示画像のようなゲームの場合左上から当たり判定をしていると。1万要素のベクターを当たり判定していると重たくなるので近いものだけを判定させたいです。
質問内容 [ 近いものだけど判定する場合どういった手法で行えばいいのか? ]
cpp
1 std::shared_ptr<Stage> stage; //ステージ
cpp
1 2//エネミーとの当たり判定 3void Stage::ColEnemy(std::shared_ptr<Enemy_Mng> enemy) 4{ 5 //MapChip chip; 6 for (std::vector<MapChip>::iterator itr = mStage->begin(); itr != mStage->end(); itr++) 7 { 8 //chip = *itr; 9 for (std::vector<Enemy>::iterator it = enemy->getEnemy()->begin(); it != enemy->getEnemy()->end(); it++) 10 { 11 //交差判定 12 if (Box_Collision::Intersect(*itr->mCol, it->mCol) == true ) 13 { 14 switch (itr->mCol->getObjectType()) 15 { 16 //ブロック 17 case StageObjectType::Block: 18 { 19 glm::ivec2 pos = itr->mCol->getPosition(); 20 it->FixPos(pos); //座標を修正 21 it->setMove_Rand(); //乱数を再設定 22 it->setMovePixel(); //移動量をリセット 23 }break; 24 25 //レンガ 26 case StageObjectType::Brick: 27 { 28 glm::ivec2 pos = itr->mCol->getPosition(); 29 it->FixPos(pos); //座標を修正 30 it->setMove_Rand(); //乱数を再設定 31 it->setMovePixel(); //移動量をリセット 32 33 }break; 34 35 36 } 37 } 38 } 39 } 40} 41 42
cpp
1 2//エネミーのバレットとの当たり判定 3void Stage::ColEnemy_Bullet(std::shared_ptr<Enemy_Mng> enemy) 4{ 5 //ステージ 6 for (std::vector<MapChip>::iterator st = mStage->begin(); st != mStage->end(); st++) 7 { 8 //エネミー 9 for (std::vector<Enemy>::iterator itr = enemy->getEnemy()->begin(); itr != enemy->getEnemy()->end(); itr++) 10 { 11 //バレット 12 for (std::vector<Bullet>::iterator b = itr->getBullet()->begin(); b != itr->getBullet()->end(); b++) 13 { 14 //交差判定 15 if (Box_Collision::Intersect(b->mCol, *st->mCol) == true) 16 { 17 b->setPosition(b->getPosition()); 18 b->mIsMapHit = true; 19 } 20 } 21 } 22 } 23} 24 25
回答2件
あなたの回答
tips
プレビュー