博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
COCOS敌人和AI制作
阅读量:4091 次
发布时间:2019-05-25

本文共 3271 字,大约阅读时间需要 10 分钟。

给宝宝做一个cocos免费游戏

第一章 背景和开发框架介绍
第二章 Node树和场景制作
第三章 UI、地图和关卡文本制作
第四章 摇杆、按键和角色动画制作
**第五章 敌人和AI制作**
第六章 角色和敌人行为互动脚本制作
第七章 游戏打包、发布和调试

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

COCOS敌人和AI制作


前言

上一章制作了简单的摇杆控制角色的内容(交互和伤害运算放到下一章,由简单到复杂),今天开始做AI逻辑


一、行为和关联的技术实现

行为 剖析 涉及的cc技术
感知 感知一定范围闯进来了不同组的对象 1.使用碰撞事件,在碰撞进入的时候写代码2.在update方法直接判断距离
反应 感知进入范围后,执行的动作如跟随追赶等 1.使用碰撞的stay方法实现2.update上检查距离实现
采取行动 进入攻击范围,采取行动 运行技能释放逻辑,优先释放适当的技能
行动交互 双方执行行动后的交互行为如被攻击,防止穿透的反弹等等 同上
离开 闯入的对象离开一定范围,可以执行回到原来初始位置 1.碰撞事件end执行 2.update方法检查超过一定距离后执行

二、具体实现步骤

1.建立enemy的prefab

其实可以复制player的节点架构。然后建立prefab。当然,先砍掉太细的节点,不需要那么复杂的节点,提高下性能。原则如下:

(1)boss类:要绑定动作,可以考虑跟主角一致
(2)高级AI类:只保留可能加载动作的node
(3)低级AI类:只保留body和一两个运动的node
(4)物体AI类:只保留一个节点,靠碰撞产生伤害

在player节点右击复制,然后粘贴,重命名为eneboss,精简下减少性能支出,结果如下。

在这里插入图片描述
给rarm、rleg、添加碰撞组件(毕竟动作都是在右边发出,head和body是承受伤害的,你懂…)
在这里插入图片描述
添加aijs.js作为组件,方便执行AI逻辑,reacttype:enemy(敌人AI)。
在这里插入图片描述

最后拖进去prefab文件夹成为prefab

在这里插入图片描述

2.AIJS.JS编写逻辑

2.1添加预载体到Canvas节点的canvasjs.js组件:

在这里插入图片描述

2.2 在装地图对象的JSON添加敌人

"mapobj" : [{
"sname":"mainMap","type":"enemis","name":"en1","posx":"300","posy":"100","rotation":"0"},...]

2.3 在loadMapObj添加散布的方法(上几章预留了)

在这里插入图片描述

2.4 在aijs.js添加AI逻辑吧

2.4.1简单粗暴的距离AI逻辑

添加个距离参数吧

properties: {
reacttype:'guid', //guid-guid文本 dialog-对话 player-用户ai enemy-en的ai story-剧情(文本、动画) lv:10001,//章节最大9999个对话 不同的章节用20001 30001... feeldistance:200, actdistance:100, movespeed:3, },

update添加监控代码

update (dt) {
//通过距离判断 switch(this.reacttype){
case 'guid':break; case 'dialog':break; case 'player':break; case 'enemy':break; var player = this.node.parent.getChildByName('player'); var pdis = this.node.position.sub(player.position);//有方向 if(this.actdistance < pdis.mag() < this.feeldistance){
if(pdis > 0) {
this.node.x += this.movespeed;} else if(pdis < 0){
this.node.x -= this.movespeed;} //1d x轴运算即可 } if(this.actdistance >= pdis.mag()){
//进入动作范围,可以执行动作攻击 //take actions this.takeActions(); } if(pdis.mag() > this.feeldistance){
cc.tween(this.node).to(2,{
position:this.initpos}); //缓动回归原始位置 } case 'story':break; } }, takeActions:function(e){
//random skill var an = this.node.getComponent(cc.Animation); var anstatus = this.node.getComponent(cc.Animation).AnimationStatus; if(an){
an.play('att_lhit');}; //check free //important level },

2.4.2碰撞逻辑

//碰撞进入执行一次,避免接触后狂执行    onCollisionEnter:function(other,self){
switch(this.reacttype){
case 'guid':break; case 'dialog':break; case 'player':break; case 'enemy': // -hp //action back var pdis = self.node.position.sub(other.node.position); if(pdis > 0 ){
self.node.setPotision(self.node.x + 3,self.node.y);} if(pdis < 0 ){
self.node.setPotision(self.node.x - 3,self.node.y);} break; case 'story':break; } },

总结

今天没啥好总结的,所用的技术都是前几章出现的。只是AI逻辑上面可以作为参考。更多精彩内容请看后面章节,后面再做交互方面的内容:地图阻挡(敌人和角色)、角色互动、角色和敌人互动…

转载地址:http://gpcii.baihongyu.com/

你可能感兴趣的文章
进程的地址空间概述
查看>>
Windows 窗口底层原理
查看>>
一种函数指针的运用
查看>>
Win32程序之进程的原理
查看>>
C++虚函数原理
查看>>
MySQL的索引
查看>>
vim配置c++开发编辑器
查看>>
java socket 编程学习笔记
查看>>
forward(转发)与redirect(重定向)
查看>>
HttpServlet中的service()、doPost()、doGet()方法解析
查看>>
“数学不好,干啥都不行!”骨灰级程序员:其实你们都是瞎努力!
查看>>
2020年,女程序员将越来越少!
查看>>
亮瞎!土豪大厂“抢人”神操作:没经验?给你60万年薪,原地学会行不?
查看>>
Soul App 高管被捕,恶意举报导致竞品被下架
查看>>
拿着 22 万美元年薪,混得还不如实习生?
查看>>
反转!Python再次卫冕2020年编程榜,Java和C回落,你怎么看?
查看>>
Excel弱爆了!用Python30分钟完成了我一天的工作量,零基础也能学!
查看>>
官宣!2020年这5种编程语言火了!
查看>>
那些简历造假拿 Offer 的程序员,后来都怎么样了?
查看>>
“程序员数学差,干啥都费劲!”高级开发:90%都是瞎努力!
查看>>