У меня есть класс Character
, который наследуется от базового класса CollidableObject
. CollidableObject
имеет, как вы могли догадаться, методы обнаружения коллизий между другими CollidableObject
s, такими как CircleCollidableObject
и SquareCollidableObject
.C++ - передача интеллектуального указателя производного класса
bool CollidableObject::collidesWith(std::shared_ptr<CollidableObject> &pCollidable)
{
...
}
Я использую это, чтобы запускать другие проверки и в конечном итоге обрабатывать столкновение. В принципе, я хочу, чтобы иметь возможность прокручивать символы в моей игре, пройти через два Character
s (что, опять же, наследовать от CollidableObject
) и обнаруживать любые столкновения.
void CharacterManager::collisions()
{
for(std::vector<std::shared_ptr<Character>>::iterator i = mCharacters_.begin(); i != mCharacters_.end(); i++) {
for(std::vector<std::shared_ptr<Character>>::iterator j = mCharacters_.begin(); j != mCharacters_.end(); j++) {
if(i == j) continue;
(*i)->collidesWith(*j);
...
}
Я предпочел бы не сделать mCharacters_
вектор в вектор CollidableObjects
, если я не должен. Но я не уверен, что это единственный способ.
Постараюсь это. И я не знал о следующем, поэтому спасибо за это. –
'bool CollidableObject :: collidesWith (const CollidableObject &)' будет моей подписью выбора. – 5gon12eder
Изменение умного указателя на raw приводит к тому, что унаследованные методы и члены недоступны по какой-либо причине. Есть идеи? –