• 【游戏引擎Easy2D实战】选择关卡场景示例


    哈喽大家好,我是iecne,本期为大家带来的是CPP/C++游戏编写 —— 选择关卡场景示例 ,包教包会,快来看看吧!

    本片文章所用到的是Easy2D引擎,快点赞收藏关注评论支持以下博主,蟹蟹

    // 编译环境:Visual Studio 2019 / Easy2D v2.0.4
    // 项目类型:Win32 Console Application


    目录

    一.主函数说明

    在 Win32 程序下使用 Easy2D

    二.头文件与函数声明

    三.主函数

    四.函数

    1.创建场景并进入

    2.关卡

    Jungle 

    CHINA

    Egypt

    3.加载按钮

    4.移动关卡面板

    5.点击按钮

    左LEFT

    右RIGHT

    五.效果图片

    六.总结

    想要源代码的,请点击作者资源下载,免费哦!!!


    一.主函数说明

    在 Win32 程序下使用 Easy2D

    引擎在 Win32 应用程序和 Win32 控制台程序下的代码是一样的,只是两种模式下主函数的写法不同。

    写控制台程序时,只需声明 main 函数就可以:

    1. int main()
    2. {
    3. return 0;
    4. }

    写 Win32 程序时,主函数变得有些复杂,但我们可以把它和控制台下的 main 函数一样使用:

    1. int WINAPI WinMain(
    2. HINSTANCE hInstance,
    3. HINSTANCE hPrevInstance,
    4. LPSTR lpCmdLine,
    5. int nCmdShow
    6. )
    7. {
    8. return 0;
    9. }

    虽然引擎支持在控制台程序下工作,但是不推荐这样使用,因为游戏并不需要控制台。


    二.头文件与函数声明

    1. #include
    2. using namespace easy2d;
    3. //---------------------------------------------------------
    4. // 函数声明
    5. //---------------------------------------------------------
    6. void EnterScene();
    7. // 创建场景并进入
    8. void InitJungle();
    9. // 加载 Jungle 关卡
    10. void InitChina();
    11. // 加载 China 关卡
    12. void InitEgypt();
    13. // 加载 Egypt 关卡
    14. void InitButton();
    15. // 加载按钮
    16. void MovePanel();
    17. // 移动关卡面板
    18. void ClickLeft();
    19. // 点击左按钮
    20. void ClickRight();
    21. // 点击右按钮
    22. //---------------------------------------------------------
    23. // 全局变量声明
    24. //---------------------------------------------------------
    25. Scene* g_Scene; // 场景
    26. Node* g_Panel; // 关卡面板
    27. int g_Level; // 当前选中的关卡数
    28. Button* g_LeftButton; // 左按钮
    29. Button* g_RightButton; // 右按钮

    三.主函数

    刚刚已经讲了主函数哈

    1. int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    2. {
    3. if (Game::init(L"关卡选择", 480, 720))
    4. {
    5. // 设置节点默认中心点
    6. Node::setDefaultAnchor(0.5f, 0.5f);
    7. // 创建场景并进入
    8. EnterScene();
    9. Game::start();
    10. }
    11. Game::destroy();
    12. return 0;
    13. }

    游戏开始->结束


    四.函数

    重点部分哈

    1.创建场景并进入

    1. void EnterScene()
    2. {
    3. // 创建一个空场景
    4. g_Scene = gcnew Scene;
    5. // 设置当前关卡为 0
    6. g_Level = 0;
    7. // 创建背景图对象
    8. auto background = gcnew Sprite(L"res/LS00.png");
    9. // 背景图居中显示
    10. background->setPos(Window::getSize() / 2);
    11. // 缩小背景图
    12. background->setScale(1.0f, 1.0f);
    13. // 将图片添加到场景中
    14. g_Scene->addChild(background);
    15. // 三个关卡图片合并为 panel 节点
    16. g_Panel = gcnew Node();
    17. g_Scene->addChild(g_Panel);
    18. // 加载关卡图片
    19. InitJungle();
    20. InitChina();
    21. InitEgypt();
    22. // 添加按钮
    23. InitButton();
    24. // 进入场景
    25. SceneManager::enter(g_Scene);
    26. }

    2.关卡

    Jungle 

    1. void InitJungle()
    2. {
    3. // 创建图片
    4. auto JungleImage = gcnew Sprite(L"res/LS13.png");
    5. JungleImage->setScale(1.5f, 1.5f);
    6. JungleImage->setPosY(Window::getHeight() / 2 - 60);
    7. // 创建文字
    8. auto JungleText = gcnew Sprite(L"res/LS10.png");
    9. JungleText->setScale(1.5f, 1.5f);
    10. JungleText->setPosY(Window::getHeight() - 195);
    11. // 图片居中
    12. JungleImage->setPosX(Window::getWidth() / 2);
    13. JungleText->setPosX(JungleImage->getPosX());
    14. // 将两个精灵添加到 panel 节点
    15. g_Panel->addChild(JungleImage);
    16. g_Panel->addChild(JungleText);
    17. }

    CHINA

    1. void InitChina()
    2. {
    3. // 创建图片
    4. auto ChinaImage = gcnew Sprite(L"res/LS14.png");
    5. ChinaImage->setScale(1.5f, 1.5f);
    6. ChinaImage->setPosY(Window::getHeight() / 2 - 30);
    7. // 创建文字
    8. auto ChinaText = gcnew Sprite(L"res/LS11.png");
    9. ChinaText->setScale(1.5f, 1.5f);
    10. ChinaText->setPosY(Window::getHeight() - 195);
    11. // 图片居中
    12. ChinaImage->setPosX(Window::getWidth() / 2 + Window::getWidth());
    13. ChinaText->setPosX(ChinaImage->getPosX());
    14. // 将两个精灵添加到 panel 节点
    15. g_Panel->addChild(ChinaImage);
    16. g_Panel->addChild(ChinaText);
    17. }

    Egypt

    1. void InitEgypt()
    2. {
    3. // 创建图片
    4. auto EgyptImage = gcnew Sprite(L"res/LS15.png");
    5. EgyptImage->setScale(1.5f, 1.5f);
    6. EgyptImage->setPosY(Window::getHeight() / 2 - 30);
    7. // 设置文字位置
    8. auto EgyptText = gcnew Sprite(L"res/LS12.png");
    9. EgyptText->setScale(1.5f, 1.5f);
    10. EgyptText->setPosY(Window::getHeight() - 195);
    11. // 图片居中
    12. EgyptImage->setPosX(Window::getWidth() / 2 + Window::getWidth() * 2);
    13. EgyptText->setPosX(EgyptImage->getPosX());
    14. // 将两个精灵添加到 panel 节点
    15. g_Panel->addChild(EgyptImage);
    16. g_Panel->addChild(EgyptText);
    17. }

    3.加载按钮

    1. void InitButton()
    2. {
    3. // 创建开始按钮
    4. auto startBtn = gcnew Button;
    5. startBtn->setScale(1.5f, 1.5f);
    6. // 设置按钮图片
    7. startBtn->setNormal(gcnew Sprite(L"res/LS07.png"));
    8. // 设置按钮被选中时的图片
    9. startBtn->setSelected(gcnew Sprite(L"res/LS08.png"));
    10. // 设置按钮禁用时的图片
    11. startBtn->setDisabled(gcnew Sprite(L"res/LS09.png"));
    12. // 设置按钮位置
    13. startBtn->setPos(Window::getWidth() / 2, Window::getHeight() - 120);
    14. // 添加开始按钮
    15. g_Scene->addChild(startBtn);
    16. // 创建左选按钮
    17. g_LeftButton = gcnew Button;
    18. g_LeftButton->setScale(1.5f, 1.5f);
    19. g_LeftButton->setNormal(gcnew Sprite(L"res/LS01.png"));
    20. g_LeftButton->setSelected(gcnew Sprite(L"res/LS02.png"));
    21. g_LeftButton->setDisabled(gcnew Sprite(L"res/LS03.png"));
    22. g_LeftButton->setPosX(g_LeftButton->getWidth() / 2);
    23. g_LeftButton->setPosY((Window::getHeight() - g_LeftButton->getHeight()) / 2);
    24. g_LeftButton->setEnable(false);
    25. g_Scene->addChild(g_LeftButton);
    26. // 点击左按钮执行 ClickLeft 函数
    27. g_LeftButton->setClickFunc(ClickLeft);
    28. // 创建右选按钮
    29. g_RightButton = gcnew Button();
    30. g_RightButton->setScale(1.5f, 1.5f);
    31. g_RightButton->setNormal(gcnew Sprite(L"res/LS04.png"));
    32. g_RightButton->setSelected(gcnew Sprite(L"res/LS05.png"));
    33. g_RightButton->setDisabled(gcnew Sprite(L"res/LS06.png"));
    34. g_RightButton->setPosX(Window::getWidth() - g_RightButton->getWidth() / 2);
    35. g_RightButton->setPosY((Window::getHeight() - g_RightButton->getHeight()) / 2);
    36. g_Scene->addChild(g_RightButton);
    37. // 点击右按钮执行 ClickRight 函数
    38. g_RightButton->setClickFunc(ClickRight);
    39. }

    4.移动关卡面板

    1. void MovePanel()
    2. {
    3. // 创建目标点
    4. auto point = Point(-Window::getWidth() * g_Level, 0);
    5. // 创建移动动画
    6. auto action = gcnew MoveTo(0.5f, point);
    7. // 停止 panel 的所有动画
    8. g_Panel->stopAllActions();
    9. // 执行新动画
    10. g_Panel->runAction(action);
    11. }

    5.点击按钮

    左LEFT

    1. void ClickLeft()
    2. {
    3. // level 为 1 时,禁用左选按钮
    4. if (g_Level == 1)
    5. {
    6. g_LeftButton->setEnable(false);
    7. }
    8. // 按下左选按钮后,把右选按钮启动
    9. g_RightButton->setEnable(true);
    10. // level 减一
    11. g_Level--;
    12. // 移动 panel
    13. MovePanel();
    14. }

    右RIGHT

    1. void ClickRight()
    2. {
    3. // level 为 1 时,禁用右选按钮
    4. if (g_Level == 1)
    5. {
    6. g_RightButton->setEnable(false);
    7. }
    8. // 按下右选按钮后,把左选按钮启动
    9. g_LeftButton->setEnable(true);
    10. // level 加一
    11. g_Level++;
    12. // 移动 panel
    13. MovePanel();
    14. }

    五.效果图片

    9d17721a70f74ab2aeb78eac94df058e.png


    六.总结

    本节课主要是讲解了Easy2D引擎实现的选择关卡场景示例,至此选择关卡场景示例的思想博主已经真真切切彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下

    包教包会,帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!


    想要源代码的,请点击作者资源下载,免费哦!!!

    求求了


      感谢每一个观看本篇文章的朋友,更多精彩敬请期待:iecne的博客_CSDN博客-C++保姆级入门教程领域博主

    文章存在借鉴,如有侵权请联系修改删除!dd8b4788b2554df4bec4b8202395cad2.gif

  • 相关阅读:
    树状数组总结
    如今摆地摊不比当年了
    Ubuntu下Anaconda安装
    【计算机视觉 | 目标检测】术语理解5:Split Shuffle Block、Group Shuffle Block 和复杂非结构化室内场景
    Python进行多线程爬取数据通用模板
    『现学现忘』Git基础 — 36、标签tag(一)
    【牛客-剑指offer-数据结构篇】JZ32 从上往下打印二叉树 Java实现
    K8s中集成Heketi使用Glusterfs
    FireMonkey 做界面的一个小技巧
    Python3.9标准库math中的函数汇总介绍(53个函数和5个常数)
  • 原文地址:https://blog.csdn.net/CSDN_linyanchen/article/details/126255125