簡體   English   中英

我的c ++游戲架構

[英]my c++ game architecture

我是一個相當有經驗的程序員,但我仍然相對較新的OOP架構和c ++設計。 我的大部分經驗都是使用C#和Java。 我最近努力用c ++編寫一個簡單的游戲引擎。 我使用SDL作為圖形。 在這篇文章中,我想討論我的架構並獲得一些反饋。 特別是,我遇到了一個我想要幫助的設計問題。 所以,這里是:

  • 在我的主要功能中,我初始化所有SDL內容以繪制到屏幕等。
  • 然后我實例化我打算使用的所有對象:floor,wall,player等。
  • 接下來我開始主循環。 該循環執行每個對象的移動,碰撞檢測和碰撞處理功能,並重繪它們。
  • 主循環運行直到應用程序退出,每次迭代繪制一幀。

我的問題是:我嘗試做一種界面風格的設計。 它涉及一系列允許每個對象實現行為的抽象基類。 例如,如果我想要一個可移動的對象,它必須從包含一個名為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM