看了网上的A*算法的教程后,自己尝试着写了一个,也不知道正不正宗哈哈,A*算法的原理我就不说了,下面是具体代码实现。
首先 我在场景上平铺了100个格子,然后随机生成了障碍物,这样地图就完成了,
接下来就是具体的寻路算法。
//寻路 foundBestMove:function(){ this.blocknow.setColor(cc.Color.YELLOW); this.blocknow.inend = true; this.checklist.splice(0,1); this.checkBlock(); if(this.blocklist[99].inend===true){ var block = this.blocklist[99]; while (block.getComponent("blockControl").index !== 0) { block.setColor(cc.Color.ORANGE); if (block.getComponent("blockControl").parentblock) { block = block.getComponent("blockControl").parentblock; }else{ return; } } block = this.blocklist[0]; block.setColor(cc.Color.ORANGE); }else if(this.checklist.length<1){ cc.log("无法到达终点"); }else{ this.foundBestMove(); } },
//检查周围格子 checkBlock:function() { var num = this.blocknow.getComponent("blockControl").index; if (num !== 99) { if ((num + 1) % 10 < 10 && this.blocklist[num + 1].getComponent("blockControl").isobstacle === false && this.blocklist[num + 1].inend !== true) { if (this.blocklist[num + 1].getComponent("blockControl").ischecked === false) { this.blocklist[num + 1].getComponent("blockControl").ischecked = true; this.blocklist[num + 1].getComponent("blockControl").parentblock = this.blocknow; this.checklist.push(this.blocklist[num + 1]); this.blocklist[num + 1].setColor(cc.Color.GREEN); var w = Math.abs(this.blocklist[num + 1].getComponent("blockControl").landscapeCount - this.blocknow.getComponent("blockControl").landscapeCount);