KUOKUO的趣味教程 | 小怪物的视野(2)

640?wx_fmt=png

EEA阔宝:专注 CocosCreator 引擎小游戏开发两年

开发微信小游戏5款

 H5 小游戏多款

CSDN 博客: KUOKUO 众享


本篇承接上一集故事《KUOKUO的趣味教程 | 进击的小怪诞生(1)》,看小怪是如何自我进化的!

第二章:小怪物的视野

正在小怪开心的追着玩家时,忽然飘起了雾,由于小怪的速度比玩家慢那么一点点,渐渐地,它看不见玩家了。 

640?wx_fmt=gif

不得已,小怪停下了!它在思考!!!这是怎么做到的呢?

原来是用代码模拟黑暗灯光效果 ,这里巧妙的使用了 cc.Graphics 绘图组件:

drawLight (x, y, r) {	
    // 左半圆	
    let left = this.root.children[0].getComponent(cc.Graphics);	
    left.clear();	
    left.moveTo(x,y+r);	
    left.lineTo(x,320);	
    left.lineTo(-480,320);	
    left.lineTo(-480,-320);	
    left.lineTo(x,-320);	
    left.lineTo(x,y-r);	
    for (let i = 3.141592; i < 3.141592 * 2; i += 0.1) {	
        left.lineTo(x + r * Math.sin(i) , y + r * Math.cos(i));	
    }	
    left.fill();	
    // 右半圆	
    let right = this.root.children[1].getComponent(cc.Graphics);	
    right.clear();	
    right.moveTo(x,y+r);	
    right.lineTo(x,320);	
    right.lineTo(480,320);	
    right.lineTo(480,-320);	
    right.lineTo(x,-320);	
    right.lineTo(x,y-r);	
    for (let i = 3.141592; i > 0; i -= 0.1) {	
        right.lineTo(x + r * Math.sin(i) , y + r * Math.cos(i));	
    }	
    right.fill();	
}

灯光是由两个半圆组成,拼接面成的,下面是左半圆

640?wx_fmt=jpeg

这个是节点图,root 空节点包括了两个带有 cc.graphics 组件的节点。

640?wx_fmt=jpeg

然后是范围检测

update (dt) {	
    // 1 秒 1 次	
    this.thinkCD -= dt;	
    if (this.thinkCD <= 0) {	
        this.thinkCD = 1;	
        // 向量减法,计算方向向量	
        this.vector = this.player.position.sub(this.node.position);	
        // 如果距离不在视野半径内(220)	
        if (this.vector.mag() > 220) {	
            this.vector = cc.v2(0,0);	
        }	
    }	
    this.walkTo(this.vector, dt);	
    this.drawLight(this.node.x,this.node.y,200);	
},

实际效果如下

640?wx_fmt=gif

O(∩_∩)O~~ 有意思吧!!!

继续故事,小怪在黑夜中失去了视野。

它找不到玩家的位置,只好自己默默的思考,开发自己大脑。 

 渐渐地,小怪可以每秒钟思考两次了。

properties: {	
    thinkCD : 0.5	
},	
update (dt) {	
    // 1 秒 2 次	
    this.time += dt;	
    if (this.time >= this.thinkCD) {	
        this.time = 0;	
        //  执行一些方法	
    }	
}

等到迷雾散去,小怪的视野恢复了,但是!!! 玩家不知何时竟然造了一堵墙。 

640?wx_fmt=gif小怪过不去...

 啊!!!!可恶的人类...!

人类在玩家与小怪身上加入刚体和物理碰撞盒子,设置不允许睡眠,重力为0。

640?wx_fmt=jpeg 

墙就设置为静态刚体640?wx_fmt=png 

人类还强烈提醒,记得开启物理系统。

onLoad () {	
    // 开启物理	
    cc.director.getPhysicsManager().enabled = true;	
}

目前的情况不妙!!!

640?wx_fmt=gif如何不被墙挡住呢?小怪开始思考!!!如果...我前进不了就向下走呢!尝试值每一次的改变方向都应再次尝试下靠近玩家,看代码:

onLoad () {	
    // 开启物理	
    cc.director.getPhysicsManager().enabled = true;	
    // 间接向量	
    this.vector = cc.v2(0,0);	
    // 间接时间变量	
    this.time = 0;	
    // 间接位置	
    this.temp = cc.v2(0,0);	
    // 尝试次数	
    this.try = 0;	
},	
update (dt) {	
    // 1 秒 2 次	
    this.time += dt;	
    if (this.time >= this.thinkCD) {	
        this.time = 0;	
        // 向量减法,计算方向向量	
        this.vector = this.player.position.sub(this.node.position);	
        // 判断是不是被墙挡住了,与上一次位置比较	
        if (Math.abs(this.node.x - this.temp.x) < 1) {	
            // 尝试值	
            this.try += 1;	
            // 尝试一次后不通,改变方向	
            if (this.try >= 2) {	
                this.try = 0;	
                this.vector.set (cc.v2(0,-100));	
            }	
        }	
        // 记录新位置	
        this.temp.set(this.node.position);	
    }	
    this.walkTo(this.vector, dt);	
},

看下效果,还不错。640?wx_fmt=gif如果不想让小怪旋转,禁用刚体旋转。

640?wx_fmt=png

哇咔咔!!! 玩家看你哪里跑!!!

640?wx_fmt=gif

故事未完待续...

黑暗灯光实现源码,欢迎获取:

链接:https://pan.baidu.com/s/1-iogJucTr0TXKllA__Ah7g 密码:yqb9


感谢 「EEA阔宝」有趣的教程,让学习也变如此乐趣!「奎特尔星球」欢迎大家投稿,有意的朋友可以加我微信,愿我们一起共同成长!

640?wx_fmt=jpeg

640?wx_fmt=jpeg

  1. KUOKUO的趣味教程 | 进击的小怪诞生(1)

  2. 大神驾到 |「大掌教」Cocos3D组件详解

  3. Creator MVVM方案—为人生节省时间!

  4. CreatorPrimer 30篇教程汇总

  5. 贝塞尔曲线动作小工具

  6. Creator2.x摄像跟随实现RPG地图

  7. Cocos实现对ETC2的支持

  8. CreatorPrimer|组件编码心得(上)

  9. CreatorPrimer|组件编码心得(中)

  10. CreatorPrimer|组件编码心得(下)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值