王者荣耀是如何从C++代码变到游戏的?
99套Java企业级实战项目
4000G架构师资料
C++是如何从代码到游戏的
这个简单啊。
你既然问C++了,那我问你,现在,我有一个Student
类。C++怎么创建一个学生类的对象?
// 嗯我会!有两种方式:
Student s;
Student *s2 = new Student("张三");
那好,现在这学生的行为有:吃饭,睡觉,上网课。现在你执行个上网课的行为,怎么做?
// 简单啊
s2->upNetworkClass();
通过对象调用成员函数不就成了么。
嗯,上面的代码在学校里都写过吧?有这个基础就够了。
那游戏是啥?无非是一堆图形堆叠呗,把上面的Student
类换成窗体类,换成控件类,换成游戏中不同的元素类,然后再组合起来不就完了么。
呐现在,我告诉你,有一个窗体类,叫QWidget
,它有一个行为叫show
,可以显示窗体。你给我生成一个窗体并显示出来。那就照葫芦画瓢呗:
QWidget *w = new QWidget();
w->show();
来我们看看效果:
呀,有点意思哈?但是这距离游戏还差远呢啊。你这窗体也太丑了不是。
没事,窗体丑不要紧,我们给她美化一下!
TDWidget * w = new TDWidget(":/img/welcome.png");
w->show();
QWidget
换成了TDWidget
,构造函数里传了一张图片,没超纲吧。再看看效果:
诶?事情好像开始变得有趣了起来?
但还是不够,我这是游戏,要交互的!你这一张死图能干啥。
交互嘛!加个按钮不完了?我给你一个按钮类,这个类有一个move()行为,可以把自己移动到画面的任何地方。你知道你想要的按钮怎么来了吗?
QPushButton * btn = new QPushButton("按钮",w); //第二个参数代表它属于哪个窗体,如果不写,它就会生成在屏幕上而不是窗体里
btn->move(330,450);
瞅瞅:
em.......你这按钮,有是有,画风有点突兀了吧。
没事,再美化一下嘛:
TDPushButton *btn = new TDPushButton(":/img/begin_normal.png", // 常规图片":/img/begin_hover.png", // 鼠标悬停的图片":/img/begin_press.png", // 鼠标按下的图片w); // 父控件
btn->move(330,450);
效果:
呀 可以啊。快快快,然后呢,点开始游戏,进入游戏界面!这个咋做?
嗯.....其实界面切换你自己已经会了。
你这个界面不就是一个窗体,想切换界面的话.....你把这个窗体关了,再换张图片开一个新的不就完了。
新的窗体用一张传新的图片做背景,我再顺手给加上四个按钮,代码不贴了,就是上面的代码复制粘贴改改坐标,改改图片:
接下来就是游戏的主体部分了,也巨简单,有图就行:
TDMenuButton *btn1 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn1->move(100,100);
TDMenuButton *btn2 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn2->move(165,100);
TDMenuButton *btn3 = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);
btn3->move(100,165);
三个按钮,和上面的TDPushButton没区别,就是换成了TDMenuButton对不对,没超纲吧。
只要你的图片够美,就能生成这样:
一个按钮会写,三个按钮也会写,既然学了点C++都想做游戏了,循环总会写吧:
for(int i = 0; i < 11 ; i++){for(int j = 0; j < 6; j++){TDMenuButton * btn = new TDMenuButton(":/img/1_normal.png",":/img/1_hover.png",":/img/1_selected.png",this);btn->move(100+i*65,100+j*65);}}
效果:(密恐福利)
这.....怎么还有点一言难尽呢......
循环会写,随机数会写吗?随机个头像行吗?
嗯......这下终于像点样了。
最后再加亿点点核心逻辑:点击两个相同的图片,判断它能不能连通,如果能连通,就把这两个按钮直接delete掉,效果就是酱紫:
就是这样咯,从你学过的C++基础语法,结合现有的框架控件,就可以撸这样一个简单的连连看。
当然了,为了点燃你题目里想要的学习热情,我故意避开一些以你现有知识可能听不懂的部分,还有一些逻辑比较绕的部分。比如:
避开了注册按钮的回调,
避开了随机生成图片的时候要保证成对出现的算法,
避开了把这些按钮和数据做关联,
避开了如何通过数据计算两点能否连通,
等等
但这都不重要,不妨碍你简单体验一下C++是如何从代码到游戏的这个过程。
分割线
从图片素材上你们也看出来了,现在游戏里的头像应该有不少都更新好几茬儿了。
这个玩意儿是用Qt C++写的。因为本身对帧率没什么要求,所以基于Qt就可以搞。如果要玩一些真正的游戏(画面需要帧率级别的刷新的),一定要上游戏引擎写的。cocos2d unity3d 什么的。
当然,我上面说游戏无非是一堆图形堆叠呗只是为了讲解故意压低一下难度,真正的游戏开发是非常复杂庞大的。
这个小项目确实像上面写的一样,用了大量的TD开头的控件。这个源自于我的一个开源框架叫做TD-Framework
Qt本身没有提供这种直接用图片构造控件的方法,所以就自己造了一些。当然跨平台这种是编译不过的,函数指针强转有问题,代码也写的比较乱,只是让你对这些有个初步的了解,实际工程中这只是冰山一角。。。。
--END--▊ 老赵推荐(戳下方标题)
从MongoDB迁移到ES后,减少了80%的服务器
我已经不用 try catch 处理异常了!太烦人了
Spring Security OAuth2 实现多人登录互踢下线
工作流一目了然,看小姐姐用动图展示 10 大 Git 命令
史上最便捷搭建RocketMQ服务器的方法
IDEA新特性:提前知道代码怎么走!
在吗?认识一下JWT(JSON Web Token) ?
想充电就关注程序员闪充宝
好文章,我在看❤️
王者荣耀是如何从C++代码变到游戏的?相关推荐
- 王者荣耀服务器什么时候增加人数,王者荣耀服务器连续两天崩!春节每人游戏时间暴涨75%,玩家要背锅?...
原标题:王者荣耀服务器连续两天崩!春节每人游戏时间暴涨75%,玩家要背锅? 相信在这个特殊的春节,游戏就成了没有办法出门的大家选择最多的消遣方式. 但就是在这样的时间,王者荣耀的服务器连着两天崩溃,被 ...
- s8更新系统提示网络或服务器出错,更新不用愁!王者荣耀S8更新错误问题代码全指引...
王者荣耀29号正式开启S8赛季!在ios的更新方面,有部分召唤师更新时游戏显示异常,老亚瑟在此将召唤师常遇到的问题及解决方法陈列如下,以便各位召唤师进行查询及解决问题. 部分iOS玩家从App Sto ...
- 《王者荣耀》主策划Xavier分享腾讯游戏10年在职经历
本内容出自知乎话题"天美十二周年,你与天美游戏有哪些难忘故事?"以下内容由<王者荣耀>主策划Xavier亲答.GameRes经腾讯天美工作室群授权发布. 大家好,我是X ...
- 电信充q币短信怎么发_王者荣耀充值中心Q币充值IOS系统游戏点券的办法_云奇付Q币寄售...
看到身边的人都在玩王者荣耀,宝宝十分不解.王者荣耀怎么就这么火呢,连一些大明星也喜欢玩,那些普通人见大明星都在玩,本来不玩农药的也想玩一下.我身边玩农药的人越来越多,我不玩农药好像不合群了一样! 我就 ...
- rog live service是什么_王者荣耀日活跃用户破亿!ROG游戏手机助力水友赛进入4强争夺...
毫无疑问,在手游界<王者荣耀>是一个成功的游戏范本,它有职业.性格足够多样的英雄,甚至有英雄诞生的文明史诗和几经建构形成的故事线和世界观,而这些也是让其成为全球首个平均日活亿量级的游戏产品 ...
- 王者荣耀微信和QQ服务器怎么一起玩游戏,王者荣耀微信和qq能一起吗 可以一起玩吗...
王者荣耀微信和qq能一起吗?玩王者荣耀手游的玩家非常之多,也知道登录的时候可以选择微信登录或QQ登录,于是很多玩家遇到一个问题,就是跟身边朋友不在一个平台,那么想在一起开黑的话,就会有一些问题,那么王 ...
- java游戏孙悟空上网吧_王者荣耀:李白和孙悟空在网吧玩游戏,结果……
76 这家网咖东西倒是置办得很全面,饮料置放处在前台旁,也就导致李白在拿饮料时看见了小孩儿一脸认真得打游戏. 他也没有多加在意,拿了饮料就准备往回走. "Penta Kill !!!!&qu ...
- 真正从0开始用Unity3D制作类战地2玩法的类龙之谷、王者荣耀的手游(暨全平台游戏)
如题,(从2017年10月18日开始)正在利用业余时间研发一款神泣Shaiya2手游,引擎用Unity3D. 原因主要有2点: 对神泣太多感情,希望能做点什么来纪念乃至留下神泣这款网游: 时机已到,是 ...
- 真正从0开始用Unity3D制作类战地2玩法的类龙之谷、王者荣耀的手游(暨全平台游戏)...
如题,(从2017年10月18日开始)正在利用业余时间研发一款神泣Shaiya2手游,引擎用Unity3D. 原因主要有2点: 对神泣太多感情,希望能做点什么来纪念乃至留下神泣这款网游: 时机已到,是 ...
最新文章
- AJAXControlToolkit-Framework3.5SP1 下载地址
- (转载)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)...
- linux一直用户身份验证失败,linux – chsh:PAM身份验证失败
- gpib安装包 python_ioctl errorno:25在使用pythongpib的GPIB通信中
- cobertura_Cobertura和Sonar 5.1的问题
- RocketMQ之事务消息
- springboot之rabbitmq
- tesseract 使用说明
- 2018-2019-1 20165301 《信息安全系统设计基础》第四周学习总结
- php curl 及其参数
- Windows 10中无需禁用强制驱动签名检测加载驱动
- 我们都被监控了?揭秘全球电信网络7号信令(SS7)漏洞
- 《嵌入式 – GD32开发实战指南》第1章 开发环境搭建
- 用graphviz画树状图(pdf、png)
- 简便word批量打印 - Office批量打印精灵(支持正版)
- DAZ3D STUDIO渲染设置:基础和技巧
- Java网络编程socket基础学习
- java mysql 有什么用_java web mysql 入门知识讲解
- Chem 3D中怎么创建立体模型
- uniapp设置的组件样式在H5和APP中生效,在微信小程序中不生效问题解决