查看原文
其他

KUOKUO的趣味教程 | 小怪物也思考(3)

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

开发微信小游戏5款

 H5 小游戏多款

CSDN 博客: KUOKUO 众享


本篇承接上一集故事

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

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

看一个小怪物是如何自我进化的!

第三章:小怪物也思考

在上一篇文章中,小怪采用了用脸摩擦墙的方法,成功越过障碍,抓到玩家。目的是实现了,但是小怪认为,这是及其不雅观的。
于是小怪物在夜黑风高之时,偷偷的勘探了地形。

上面是人类创造的地形,小怪物看不懂,在小怪物眼中只能看到0或者1。

  1. // 地图数据,0是地板,1是墙

  2. this.map = [


  3. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


  4. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


  5. [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],


  6. [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],


  7. [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],


  8. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


  9. [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


  10. ];

小怪物知道0可以走1不可以,因为它当前就站在一个0的位置。

现在有了地图,小怪就可以先寻找到障碍物的边界,然后绕过去。

小怪物一天天在进化,一次可以多思考点事情了

  1. think () {

  2. // 取最小值大些,取最大值小些,好比较

  3. let minX = 99;

  4. let minY = 99;

  5. let maxX = -1;

  6. let maxY = -1;

  7. // 寻找障碍物的最大包围圈,遍历

  8. for (let i = 0; i < this.map.length; i++) {

  9. let m = this.map[i];

  10. for (let j = 0; j < m.length; j++) {

  11. if (m[j] == 1) {

  12. if (i < minX) {

  13. minX = i;

  14. }

  15. if (i > maxX) {

  16. maxX = i;

  17. }

  18. if (j < minY) {

  19. minY = j;

  20. }

  21. if (j > maxY) {

  22. maxY = j;

  23. }

  24. }

  25. }

  26. }


  27. // 打印观察下

  28. console.log(minX,minY,maxX,maxY);

  29. }

小怪物知道地图的边界,它是不会把玩家跟丢的!

小怪决定绕过这个障碍,它选择先向上或者向下到没障碍的位置,然后一口气过去。

也就是说只要知道上面图中的1号、2号两个点位,小怪物又开始努力思考

  1. let dis1 = Math.abs(this.mIndex.x - maxX);

  2. let dis2 = Math.abs(this.mIndex.x - minX);

  3. // 取小的

  4. if (dis1 < dis2) {

  5. this.point1 = cc.v2(maxX + 1, this.mIndex.y);

  6. } else {

  7. this.point1 = cc.v2(minX - 1, this.mIndex.y);

  8. }


  9. console.log(this.point1);

  10. // 然后取第二个点

  11. this.point2 = cc.v2(this.point1.x, this.pIndex.y);

  12. console.log(this.point2);

一不小心成功了,两个关键点找到了!

然后只要走过去就好了

  1. goAim () {

  2. // 计算下时间

let time1 = 0.5 * Math.abs(this.mIndex.x - this.point1.x);

  1. let time2 = 0.5 * Math.abs(this.pIndex.y - this.point1.y);

  2. let time3 = 0.5 * Math.abs(this.pIndex.x - this.point2.x);

  3. let m1 = cc.moveTo(time1,this.convertToPoints(this.point1.x, this.point1.y));

  4. let m2 = cc.moveTo(time2,this.convertToPoints(this.point2.x, this.point2.y));

  5. let m3 = cc.moveTo(time3,this.convertToPoints(this.pIndex.x, this.pIndex.y));

  6. this.me.runAction(cc.sequence(m1,m2,m3));

  7. },

  8. // 转化坐标

  9. convertToPoints (dx, dy) {

  10. let y = 300 - 100 * dx;

  11. let x = 100 * dy - 450;

  12. return cc.v2(x, y);

  13. }


亲!我来了,嘎嘎!!

换个位置试试呢?

只能用一个字形容,完美!

哇咔咔,再也不用用脸蹭墙啦!O(∩_∩)O~~

未完待续...


想知道下一章大结局中小怪物会有什么神奇的行为吗?在公众号中回复【小怪物的超能力】即可知晓小怪物将在下一集拥有的超级能力,期待你哦!

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



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

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

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

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

  5. CreatorPrimer 30篇教程汇总

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

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

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

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

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


你在看吗➴?

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存