假設我有一個類實體。
然後,我有課N多是從實體
如衍生:繼承的設計類
class Snake : public Entity{...};
class Mouse : public Entity{...};
現在我有一個類播放器,是一個實體。
我可以創建從任何類型的實體繼承的類播放器嗎? 例如:
class Player : public Entity -->(but instead of entity be any type of entity)
可以這樣做嗎?
這是通過使用模板來實現的嗎?
我讀過的模板,可以在CPP文件中明確指定,即
template class Entity<Snake>;
我想達到以下
在我的播放器類我有中移動一個moveCamera功能現在只有當玩家移動,相機移動。如果AI蛇移動,相機不應該移動。
這是我在實體類渲染功能是虛擬
void Entity::Render(float interpolation)
{
if(currentAnimation != 0){
float x = this->currLocation.x - (this->currentVelocity.x * (1.0f - interpolation)) - camera->getLocation(L_FACTOR_CURRENT).x;
float y = this->currLocation.y - (this->currentVelocity.y * (1.0f - interpolation)) - camera->getLocation(L_FACTOR_CURRENT).y;
currentAnimation->Render(x,y);
}
}
這是我gameUpdate功能和基本移動的實體,其各自的世界座標
void Entity::GameUpdate(float gameUpdateDelta)
{
this->Move();
}
因此,對於我的玩家的移動功能我會調用相機的移動功能,然後調用基類的移動功能......現在可以調用基類的移動功能的擴展類了..
我的移動功能on是虛擬的,因此蛇和鼠標可以以不同的方式移動。
你爲什麼要這樣做?似乎你需要組合,而不是繼承?看看[裝飾模式](http://en.wikipedia.org/wiki/Decorator_pattern) - 可能會幫助 –
我將如何使用裝飾器模式來做同樣的事情? –
可以使用模板,但在這種情況下,您要查找的是一個概念,它不是C++的一部分。相反,實體會成爲您在模板中調用的特定成員函數集合 - 它不會被編碼到語言中。但組合*在大多數情況下是更好的解決方案。 –