前一讲:qt5.15 步步走-15.做个小游戏
示例:D:QtExamplesQt-5.15.1widgetsanimationsub-attaq
这是一个完全可以当作毕业设计的小项目
拆分需求
使用Graphics View Framework + State Machine Framework 实现2D动画游戏是常用做法。可能会加入OpenGL优化和加速显示效果;
设计模式用于帮助面向对象的系统构建,其核心是 拆分 数据,控制和显示;一般都为三层结构;我们基于这个思想设计这个游戏;
本项目中的数据类型有: 船,潜艇,鱼雷,炸弹,分数 ; 控制类型:状态,状态切换,场景;显示类型:view;
状态图:
类功能设计 根据最小影响原则,场景中的 船,潜艇等对自己的移动,爆炸提供支持,不放在场景中。本例中所有移动, 发射导弹操作都是通过 stat转换实现;
看一个响应按钮事件的状态转换,在 操作item 常用到;
LevelState *levelState = new LevelState(scene, this, machine);
//This state is when the player is actually playing but the game is not paused
QState *playingState = new QState(levelState);
PauseState *pauseState = new PauseState(scene, levelState);
levelState->setInitialState(playingState);
QKeyEventTransition *pressPplay = new QKeyEventTransition(scene->views().at(0), QEvent::KeyPress, Qt::Key_P);
pressPplay->setTargetState(pauseState);
playingState->addTransition(pressPplay);
小霸王基本都能实现了。
steam的2d横版游戏 就像 王国 ,拍卖人生 这种也能实现;
下一讲:qt5.15 步步走-15. 模型/视图