RaceGame-Qt游戏项目构建-游戏控制
RaceGame-Qt游戏项目构建-游戏控制
控制概述
控制类,控制游戏进程,例如游戏读秒、开始游戏、退出游戏、游戏暂停、继续等。玩家可以通过游戏窗口上的按钮控制这些过程。因此链接游戏界面的成员函数要么是公共的槽函数,要么是带有带有 Q_INVOKABLE
声明的函数。 Q_INVOKABLE
是 QT
的宏定义,决定了这个函数可以被 QML
调用。
class GameControl
游戏控制类,控制游戏设置、开始游戏、退出游戏、游戏暂停、继续等。具有各种管理器类的对象指针,用来控制游戏过程。
class GameControl : public QObject { Q_OBJECT Q_PROPERTY(int playerNum READ getPlayerNum WRITE setPlayerNum NOTIFY playerNumChange FINAL) Q_PROPERTY(int mapId READ getMapId WRITE setMapId NOTIFY mapIdChange FINAL) public: GameControl(QQmlContext * context); int getPlayerNum(); void setPlayerNum(int n); int getMapId(); void setMapId(int id); void setPlayerContextProperty(); void setGameMapContextProperty(); void setToolContextProperty(); void setBeatControlProperty(); QList<QString> backgroundColorList; std::shared_ptr<playersManager> playerRoot; std::shared_ptr<mapsManager> mapRoot; std::shared_ptr<ToolsManager> toolRoot; std::shared_ptr<playersMove> moveRoot; std::shared_ptr<BeatControl> beatRoot; QQmlContext * context; Q_INVOKABLE void entryGame(); private: int playerNum; int mapId; signals: void playerNumChange(); void mapIdChange(); void refreshmap(); void overGameSignal(); public slots: void startGame(); void backGame(); void pauseGame(); void overGame(); void continueGame(); bool getToolClick(int playerId); void toolClick(int playerId); void turnNext(); bool chosePreMap(); bool choseNextMap(); bool addPlayer(); bool removePlayer(); };
class BeatControl
节拍管理器,用于控制游戏过程中存在的读秒过程。例如玩家获取工具之后,需要在 PRE_LAUNCH_SEC
之内释放,否则该管理器会自动将玩家的工具释放。
// 不具体实现功能 只发出信号 // 节拍管理器 singleton class BeatControl : public QObject { Q_OBJECT Q_PROPERTY(int preLaunchSecond READ getPreLaunchSecond WRITE setPreLaunchSecond NOTIFY preLaunchSecondChanged FINAL) public: private: BeatControl(); static std::shared_ptr<BeatControl> btControl; QTimer * preLaunchTimer; int preLaunchSecond; public: int getPreLaunchSecond(); void stopPreLaunchTimer(); void startPreLaunchTimer(); void setPreLaunchSecond(int second); static std::shared_ptr<BeatControl> getInstance(); signals: void preLaunchSecondChanged(); void toolAutoLaunchSgn(); };
本文作者:北纬31是条纬线哦
本文链接:https://www.cnblogs.com/beiwei31/p/18695142
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步