一.主函数说明
在 Win32 程序下使用 Easy2D
引擎在 Win32 应用程序和 Win32 控制台程序下的代码是一样的,只是两种模式下主函数的写法不同。
写控制台程序时,只需声明 main 函数就可以:
int main()
{
return 0;
}
写 Win32 程序时,主函数变得有些复杂,但我们可以把它和控制台下的 main 函数一样使用:
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
return 0;
}
虽然引擎支持在控制台程序下工作,但是不推荐这样使用,因为游戏并不需要控制台。
二.头文件与函数声明
#include <easy2d/easy2d.h>
using namespace easy2d;
//---------------------------------------------------------
// 函数声明
//---------------------------------------------------------
void EnterScene();
// 创建场景并进入
void InitJungle();
// 加载 Jungle 关卡
void InitChina();
// 加载 China 关卡
void InitEgypt();
// 加载 Egypt 关卡
void InitButton();
// 加载按钮
void MovePanel();
// 移动关卡面板
void ClickLeft();
// 点击左按钮
void ClickRight();
// 点击右按钮
//---------------------------------------------------------
// 全局变量声明
//---------------------------------------------------------
Scene* g_Scene; // 场景
Node* g_Panel; // 关卡面板
int g_Level; // 当前选中的关卡数
Button* g_LeftButton; // 左按钮
Button* g_RightButton; // 右按钮
三.主函数
刚刚已经讲了主函数哈
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
if (Game::init(L"关卡选择", 480, 720))
{
// 设置节点默认中心点
Node::setDefaultAnchor(0.5f, 0.5f);
// 创建场景并进入
EnterScene();
Game::start();
}
Game::destroy();
return 0;
}
游戏开始->结束
四.函数
重点部分哈
1.创建场景并进入
void EnterScene()
{
// 创建一个空场景
g_Scene = gcnew Scene;
// 设置当前关卡为 0
g_Level = 0;
// 创建背景图对象
auto background = gcnew Sprite(L"res/LS00.png");
// 背景图居中显示
background->setPos(Window::getSize() / 2);
// 缩小背景图
background->setScale(1.0f, 1.0f);
// 将图片添加到场景中
g_Scene->addChild(background);
// 三个关卡图片合并为 panel 节点
g_Panel = gcnew Node();
g_Scene->addChild(g_Panel);
// 加载关卡图片
InitJungle();
InitChina();
InitEgypt();
// 添加按钮
InitButton();
// 进入场景
SceneManager::enter(g_Scene);
}
2.关卡
Jungle
void InitJungle()
{
// 创建图片
auto JungleImage = gcnew Sprite(L"res/LS13.png");
JungleImage->setScale(1.5f, 1.5f);
JungleImage->setPosY(Window::getHeight() / 2 - 60);
// 创建文字
auto JungleText = gcnew Sprite(L"res/LS10.png");
JungleText->setScale(1.5f, 1.5f);
JungleText->setPosY(Window::getHeight() - 195);
// 图片居中
JungleImage->setPosX(Window::getWidth() / 2);
JungleText->setPosX(JungleImage->getPosX());
// 将两个精灵添加到 panel 节点
g_Panel->addChild(JungleImage);
g_Panel->addChild(JungleText);
}
CHINA
void InitChina()
{
// 创建图片
auto ChinaImage = gcnew Sprite(L"res/LS14.png");
ChinaImage->setScale(1.5f, 1.5f);
ChinaImage->setPosY(Window::getHeight() / 2 - 30);
// 创建文字
auto ChinaText = gcnew Sprite(L"res/LS11.png");
ChinaText->setScale(1.5f, 1.5f);
ChinaText->setPosY(Window::getHeight() - 195);
// 图片居中
ChinaImage->setPosX(Window::getWidth() / 2 + Window::getWidth());
ChinaText->setPosX(ChinaImage->getPosX());
// 将两个精灵添加到 panel 节点
g_Panel->addChild(ChinaImage);
g_Panel->addChild(ChinaText);
}
Egypt
void InitEgypt()
{
// 创建图片
auto EgyptImage = gcnew Sprite(L"res/LS15.png");
EgyptImage->setScale(1.5f, 1.5f);
EgyptImage->setPosY(Window::getHeight() / 2 - 30);
// 设置文字位置
auto EgyptText = gcnew Sprite(L"res/LS12.png");
EgyptText->setScale(1.5f, 1.5f);
EgyptText->setPosY(Window::getHeight() - 195);
// 图片居中
EgyptImage->setPosX(Window::getWidth() / 2 + Window::getWidth() * 2);
EgyptText->setPosX(EgyptImage->getPosX());
// 将两个精灵添加到 panel 节点
g_Panel->addChild(EgyptImage);
g_Panel->addChild(EgyptText);
}
3.加载按钮
void InitButton()
{
// 创建开始按钮
auto startBtn = gcnew Button;
startBtn->setScale(1.5f, 1.5f);
// 设置按钮图片
startBtn->setNormal(gcnew Sprite(L"res/LS07.png"));
// 设置按钮被选中时的图片
startBtn->setSelected(gcnew Sprite(L"res/LS08.png"));
// 设置按钮禁用时的图片
startBtn->setDisabled(gcnew Sprite(L"res/LS09.png"));
// 设置按钮位置
startBtn->setPos(Window::getWidth() / 2, Window::getHeight() - 120);
// 添加开始按钮
g_Scene->addChild(startBtn);
// 创建左选按钮
g_LeftButton = gcnew Button;
g_LeftButton->setScale(1.5f, 1.5f);
g_LeftButton->setNormal(gcnew Sprite(L"res/LS01.png"));
g_LeftButton->setSelected(gcnew Sprite(L"res/LS02.png"));
g_LeftButton->setDisabled(gcnew Sprite(L"res/LS03.png"));
g_LeftButton->setPosX(g_LeftButton->getWidth() / 2);
g_LeftButton->setPosY((Window::getHeight() - g_LeftButton->getHeight()) / 2);
g_LeftButton->setEnable(false);
![img](https://img-blog.csdnimg.cn/img_convert/dd76579b382c11ad9203705f78523279.png)
![img](https://img-blog.csdnimg.cn/img_convert/7e786ed6d3cd05d48bb81606b1af7ed9.png)
![img](https://img-blog.csdnimg.cn/img_convert/36f9480b8cc6fcc3db5d1100bb479a8c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
e);
[外链图片转存中...(img-e5AncgGG-1714176920496)]
[外链图片转存中...(img-CiSU1aRT-1714176920497)]
[外链图片转存中...(img-KySIv3qi-1714176920497)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**