怪物消消乐record2

2023-10-19 17:20
文章标签 怪物 消消 record2

本文主要是介绍怪物消消乐record2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

距离上一次更新,有一个月05天了,时间匆匆即过

这次游戏基本原型确定好了,要记录的东西很多,慢慢道来:

1.游戏下半区域  消除模块:


难点1:格子连线判断,采用枚举算法,最初是 九宫格 8个方向计算相邻格子,是否同色,同色则连线,然后递归,若累积数小于3,则返回false,第一次用这个算法实现,实践后,可行,但是循环的计算量太大,想减少计算,消耗点空间,提升性能。于是把同颜色的所有格子,放进一个队列,然后,根据选取的颜色,在同色格子里,寻找是否能相邻,相邻则连线,若累积数小玉3,则返回false .大于3,丢入消除队列

难点2:无消除判断,类似难点1,只不过,用了减少支路开销,从颜色最多的格子开始查询,直到第一个满足3连的格子,就返回true,全部不连,则返回false,  false触摸打乱模块,重新排序。


难点3:连线回退,开始用纯触摸的方式,回退连线,发现很不好用,然后选择用数据状态的方式,把已连线的块丢进一个队列,离开最后一个块,触发一个控制量,若回到倒数第二个块,则消除,最后一个块的连线,数据控制要准确。


难点4: 遮盖技术,因为上班区域,和下半区域,美术用的一张图,导致无法,用一个Zorder 解决,遮盖问题,选择使用ClippingNode配合DrawNode ,完成上盘区域这个,实现顶层格子下落移动。方法2:可以使用shader,控制渲染区,可控性更强,目前未使用这种方法,类似方法基础源代码找到,因未学习openGL,对这一块控制力不足,未选用次方法,但是以后若需要,再进行研究,在此记录,提示自己以后看到了,选用此方法。

其他细节,就是格子格子的,触摸判断区间要减小,  ,以后面图片的触摸区间控制,最合适,否则,以格子原本的大小控制,在边界时,判断会不准确


2.上半区:


炮台,根据策划,出了两种方案

1.单个炮台,寻路,查找怪物,然后攻击(发现不好用,废弃)

2.5个炮台一起上,选择最近的怪物,炮台在本路攻击 (现用)


难点1:

炮台响应攻击,检测怪物,发动攻击。检测怪物,攻击判断。缺一不可。 每一步都要精准控制,不能偷懒,一条线全绑定在炮台上。例如:炮台响应攻击,检测怪物,发动攻击,这时炮台与怪物发生了碰撞,怪物死了,炮台减少血量了,那么炮台可能就攻击落空了。 


难点2:

所有炮台,怪物的游戏逻辑的判断分离,比如炮台能否攻击,应该用炮台的血量状态,不能用isVisible,虽然后者更简单,但是不符合游戏逻辑,应该根据游戏逻辑来判断。当然,如果 isVsible false了,那么就是挂了,自然就不能攻击,应该消掉这个炮台数据。


难点3:

美术提供的图片参差不齐,原始大小,各式各样,要修改合适 boundingBox 来配合碰撞检测,很费时间,但是不废脑子。

本游戏特点,因为有固定路线,可以完全放弃碰撞检测,减少update的计算量,直接从路线上判断,根据子弹发射的路径,和怪物的路径,做判断,也可以达到效果。因为目前游戏过小,如果以后要挖性能,可以从这方面入手,施放update内的计算量。


难点4:

道具添加,目前只做了,一个打乱格子的道具,发现,核心按钮,需要调用 格子层的打乱函数。就需要传当前的格子层对象过来调用,中间通过mainScene 中转的,感觉这样不好,内聚性是不是破坏了,但是未找到更好办法,目前采用,未来再找更好办法代替, 道具类准备用抽象工厂来做,未来可能有几十种道具,选择抽象工厂,目前觉得是最好的办法,框架搭建好了,填代码就好了,目前还未遇到问题,不过第一次达这个框架,不知道好不好,待实践检验


总结:

这一月的开发,断断续续,做的内容也不多 ,感觉开发速度不够快,可能经验还是不太足,不过对cocos2dx 的底层倒是更加熟悉了,目前,游戏原型已经具备,准备着手开发,关卡编辑器了,打算用QT来做,以自动生成.Json或者.xml的形式,给战斗主场景调用,根据选择的关卡不同,调用不同的文本,来生成关卡。此方法行不行,好不好用未知。因为缺乏经验,也没人指导,可能中间造了很多浪费时间的轮子,但是能完成需求,我相信就是好的。

类图如下:





这篇关于怪物消消乐record2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241238

相关文章

cocos2d-x 如何使用CCProgressTimer作为血条,实现跟随怪物进行移动,自动掉血,然后死亡。

Cocos2d-x中类CCProgressTimer实现游戏人物血条 一、CCProgressTimer的基本使用步骤: cocos2d-x的进度条函数CCProgressTimer,我们可以这样定义: 1. //s_pPathSister1为图片的路径 2. CCProgressTimer *left = CCProgressTimer::create(

『功能项目』怪物消亡掉落宝箱【18】

本章项目成果展示 我们打开上一篇17销毁怪物蛋的Shaders消融特效的项目, 本章要做的事情是在怪物消亡时掉落一个宝箱功能, 首先在资源商店下载一个宝箱物品 拖拽至场景中 完全解压缩 重命名Box 放进Prefabs预制体文件夹后在场景中删除 增加Box两个组件并修改其大小 对Box预制体增加一个光亮效果 修改脚本:

『功能项目』销毁怪物蛋的Shaders消融特效【17】

本章项目成果展示 我们打开上一篇16主角的信息显示的项目, 本章要做的事情是在怪物消亡时生成一个销毁特效 首先创建一个Unlit Shader 重命名为Dissolve 双击进入脚本后编写脚本: Shader "Unlit/Dissolve"{Properties{//物体基础材质纹理[Header(Base Texture)][Space(10)][NoS

『功能项目』怪物的信息显示【15】

本章项目成果展示 我们打开上一篇14怪物反击主角复活的项目, 本章要做的事情是当主角进入怪物的攻击范围之内时显示怪物的血量信息 在Canvas创建一个空物体 将空物体GameObject钉到视角上方 重命名为KingInfoUI 在子级创建一个Image 在资源文件夹下创建一个空文件命名为Image 将创建的怪物信息对象UIKingInfoU

『功能项目』怪物反击主角复活【14】

本章项目视频展示 当前文章成果展示 我们打开上一篇13技能爆炸与伤害数值显示的项目, 新建一个脚本InfoSystem.cs 新建一个游戏管理器GameManager.cs 在场景中创建一个空物体命名为GameManager 将GameManager.cs脚本挂载至空物体GameManager对象身上 增添PlayerRayClickNavigat

『功能项目』怪物受击后显示受击状态UI【12】

本专栏每10章会做一次项目优化,但不影响具体功能 我们可以打开优化前的项目10也可以打开优化后的项目11 双击King或者怪物熊预制体 - 进入预制体空间后创建一个Image改名为StateUI01 代表第一个受击状态 修改Canvas的渲染模式  -  改为世界WorldSpace 调节Image(StateUI01)尺寸0.01缩放,并移动到怪物头顶上 将以下资源导入之

UE5游戏——显示打击怪物的伤害值显示

要在Unreal Engine 5中实现显示打击怪物时的伤害数值,你可以按照以下步骤操作: 1. 创建UI元素: 在UE5的内容浏览器中创建一个新的User Widget蓝图(或者直接从项目设置的默认UI蓝图开始)。在这个蓝图中添加一个Text Block组件用于显示伤害值。 2. 设置UI蓝图: 调整Text Block的位置和外观使其适合游戏界面。在Widget蓝图中添加事件图表,并在

『功能项目』怪物受击的动画事件【10】

我们打开上一篇09着色器光透魔法球的项目, 本章要做的事情是在场景中创建一个怪物对象,当怪物被主角的魔法球击中后播放受击动画效果,此类技术用到动画事件帧,在动画上创建脚本。 首先打开资源商店选择一个免费资源的怪物模型加载至项目中 将导入包的熊Bear资源模型Prefab放置场景中 完全解压缩 创建一个怪物熊的动画状态机 命名为MonsterBearA

游戏开发丨基于PyGame的消消乐小游戏

文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容:基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame的命令: pip install

Unity有限状态机实现怪物AI(代码框架思路)

目录 状态的枚举 状态基类 接口(规范不同对象的同一行为)  状态机类(作为媒介用于管理各个状态之间的转换) 附带一个攻击状态的子类脚本作为示例: 状态的枚举 首先最容易想到的是状态的枚举,比如说攻击状态、巡逻状态、追击状态等等,用枚举进行表示 public enum E_AI_State {/// <summary>/// 睡眠状态/// </summary>Sle