开课吧-智能物联网训练营Day2-使用QT布局,播放多媒体,植物与僵尸类构造

昨晚的东西比较多,所以面向流程的博客不合适了。所以我这里分成布局和植物与僵尸类构造。

这里也从逻辑上解释一下昨天的内容吧,稍微看了一点scene,view和item的关系。
这里也只是我的理解。这种理解其实是基于opengl的。
view是视角,scene是实际的场景,而item是场景中的元素。
view是我们观察场景的眼睛,比如说3d游戏中,我们可以任意转换视角,这个视角应该就是view。
scene是实际的场景,而场景又和物体密不可分,在3d游戏中,不管怎么转换视角,实际上的场景是不变的,虽然看到的东西可能不一样。
再举个例子:盲人摸象,大象是场景,是不随视角变化而变化的,而盲人们的视角是局限的,虽然是同一个大象,却能摸到不同的东西。
说起来难道《纪念碑谷》就是利用了转视角的同时变场景所以才那么反直觉?
如果是这样的话,那昨晚那个动画应该转视角而不是转场景。
所以在代码中,GameView包含GameScene作为成员变量

昨天之后,我的代码也做了一点点重构,我觉得重要的是最终结果一致,代码要规范。

布局

做布局。看了帮助文档,有所感悟,布局其实只是一个管理view大小的工具。类似于scene和item的关系,既是容器和内容物的关系,又是管理器和被管理元素的关系。
在这里插入图片描述
然后为了处理resize信息:
在这里插入图片描述
上图的按个scrollContentsBy是重写函数。主要防止通过滚轮之类的滚动。重写为空函数即可。呃。这个程序写出来,虽然不能滑动了,但是窗口的内容可能随着拖动变化。。。好晕。
这里,我本来想做一个固定视窗大小,然后窗口的改变是固定比例的,从而视窗的大小也是固定比例的。但是。。发现挺难的。没找到解决方案。
传入的event信息,没用到,所以不用include。
再取消滚动条。设置一下最小值
在这里插入图片描述
然后我的结果如下:
在这里插入图片描述
这里还看不到房子。因为焦点在图片的中心。
这里可以看到view的scale是放大自己看到的图像的大小。相当于在眼睛前面放了个放大镜?
然后为了能看到房子和顺便秀动画:
在这里插入图片描述
以上两行代码加在scene中,是对backgroundItem做操作。其实吧,我觉得对view操作更合理。不过这其实无所谓了。毕竟相对运动。此外。要把所有的元素都放在backgroundItem身上。这样才不会出现除草机和背景的相对运行。
这个Animate函数是老师写的。所以需要包含头文件。
这个函数应该挺好理解。老师说是动画的元素,动画的形式,速度和结束。
我理解就是一个主体以什么样的速度做什么样的事情。这里就是背景以0.5的速度做平移。
最终结果:
在这里插入图片描述

植物和僵尸类

如何描述僵尸,有什么属性,有什么方法,如何表现。

首先介绍一下音乐的播放。。。

音乐播放

需要包含额外的模块。然后才能include。
在这里插入图片描述
播放的代码如下:include的头文件请使用refactor或者点那个灯泡include。不容易出错。
在这里插入图片描述
这份代码是开场音乐。所以加在scene的构造函数或者初始化函数中。
方法是初始化一个播放器,然后传入资源文件。最后播放播放器。显然,这只放一遍。
说起来很像是以前用磁带机听歌。拿个磁带机,把磁带放进去,按播放。
很多音视频播放都是这一套逻辑。名字也都差不多。

下面首先考虑属性。
在这里插入图片描述
初始化函数和构造函数的实现没什么可说的,可以全写为空函数。
老师是使用工厂设计模式,所以该类只是一个原型,通过这个原型,会生成各种各样的僵尸。

秃头僵尸类

在这里插入图片描述
然后需要对秃头僵尸的具体属性进行设置。
在这里插入图片描述
僵尸实例:注意很多都是方法。
即Zombie及其子类只是定义了僵尸拥有的属性,
在这里插入图片描述
最后的picture会保存当前僵尸的显示形式,可能是站立,也可能是行走。该类是老师编写的。player一次只能播放一个音乐,所以为了同时播放多个音乐必须制作多个player。
有一个warning就是c++初始化的顺序和初始化列表没啥关系而是和在类中定义的顺序有关。。所以如果二者不一致,QT会警告你。不过结果没影响。只要保证picture在music之前定义就行了。
然后实现生成僵尸方法,设置显示形式(picture)。设置位置。开始(播放动图)。
在这里插入图片描述
然后添加到我们的场景中。
在这里插入图片描述

扫描二维码关注公众号,回复: 11284880 查看本文章

中途我也出现了一个没有编译错误的运行错误,重新构建就好了。

最终。注意。这里是删除了第二个动画的结果。以便展示zombie。
在这里插入图片描述

总结

布局:布局,resize。
动画:虽然只是用
音乐:全平台通用逻辑
植物与僵尸类:时间所限只用了一个小僵尸,可以去看看工厂模式是咋回事来重构自己的代码。感觉有点混乱。
感觉等级不如状态来的好,比如撑杆跳僵尸有杆状态下才能跳,还有被冰豌豆火焰攻击等等。不过这样部分状态就是和僵尸的种类相关了,似乎也不是一个好方法。
嗯。冰火应该额外加个函数处理。撑杆跳这种可以通过加入一个额外的变量判断杆子在不再手?防护装备可以通过判断hp修改。不过有技能的僵尸就比较麻烦了。还得加个冷却时间等等的。

猜你喜欢

转载自blog.csdn.net/qq_36183810/article/details/106395328