[英]my c++ game architecture
我是一個相當有經驗的程序員,但我仍然相對較新的OOP架構和c ++設計。 我的大部分經驗都是使用C#和Java。 我最近努力用c ++編寫一個簡單的游戲引擎。 我使用SDL作為圖形。 在這篇文章中,我想討論我的架構並獲得一些反饋。 特別是,我遇到了一個我想要幫助的設計問題。 所以,這里是:
我的問題是:我嘗試做一種界面風格的設計。 它涉及一系列允許每個對象實現行為的抽象基類。 例如,如果我想要一個可移動的對象,它必須從包含一個名為move()
的虛函數和一些位置坐標的可移動基類繼承。 如果我希望它是可碰撞的,那么該對象將繼承可碰撞的抽象類,它包含虛函數checkCollision()
和handleCollision()
以及一個hitbox成員變量。 像播放器這樣的對象繼承了這兩個基類以及其他幾個基類。
只要我在主循環中手動完成所有操作,這就足夠了。 我可以說:
player.move();
player.checkCollision();
player.handleCollision();
player.draw().
這沒關系。 但我希望能夠在主循環中有一個矢量或通用對象數組,並執行以下操作:
for each object in vector
if object is of type movable
object.move();
if object is of type collidable
object.checkCollision();
我認為我可以通過動態鑄造實現這一目標,但我真的無法想出任何東西。 我已經嘗試將它們存儲為void指針,但這並不像我想要的那樣工作。 我一直在閱讀有關視頻游戲的游戲對象組件架構,我可能會嘗試,但我真的想要挽救我已經寫過的內容。 我認為這是一個很好的學習機會。 如果有人有任何想法我會非常感激。 我的架構與其他簡單的游戲引擎設計相比如何? 我的界面架構是否有意義還是完全不穩定?
如果您使用的是C ++,請嘗試SFML ,它比SDL更快,如果您了解OpenGL ,也可以使用它。
對於你的問題:
class Entity {
//constructor and other stuff
void virtual exec() =0; ///<= pure virtual method
};
class Movable : Entity {
void move(); //do somthing
void exec() {move();};
};
class Collidable : Entity {
void col(); //do your job
void exec(){col();};
};
std::vector<Entity*> e_v;
///push some instance
for (Entity* e : e_v)
e->exec();
如何在基類中使用模板方法模式和非抽象空虛函數?
class Entity
{
void update()
{
move();
checkCollision();
}
virtual void move() {}
virtual void checkCollision() {}
};
class Movable : public virtual Entity
{
virtual void move() {} // Stuff
};
class Collidable : public virtual Entity
{
virtual void checkCollision() {} // Stuff
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.