解释下面代码function getLine(bubbles) { var line = []; for (var i = 0; i < bubbles.length; i++) { var b = bubbles[i]; if (b.color == color) { line.push({ "x": b.x, "y": b.y }); } else { if (line.length < 5) line = []; else return line; } } if (line.length < 5) return []; return line; } }, draw: function () { var ctx = game.ctx; ctx.save(); ctx.translate(this.startX, this.startY); ctx.beginPath(); for (var i = 0; i <= game.cellCount; i++) { var p1 = i * game.cellWidth;; ctx.moveTo(p1, 0); ctx.lineTo(p1, this.height); var p2 = i * game.cellWidth; ctx.moveTo(0, p2); ctx.lineTo(this.width, p2); } ctx.strokeStyle = "#555"; ctx.stroke(); //绘制子元素(所有在棋盘上的泡) this.bubbles.forEach(function (row) { row.forEach(function (bubble) { bubble.draw(); }); }); ctx.restore(); }, isMoving: false, move: function (bubble, target) { var path = this.search(bubble.x, bubble.y, target.x, target.y); if (!path) { //显示不能移动s //alert("过不去"); return; } //map开始播放当前泡的移动效果 //两种实现方式,1、map按路径染色,最后达到目的地 2、map生成一个临时的bubble负责展示,到目的地后移除 //console.log(path); var me = this; var name = "move_" + bubble.x + "_" + bubble.y; var i = path.length - 1; var color = bubble.color; game.play(name, function () { if (i < 0) { game.stop(name); game.clicked = null; me.isMoving = false; me.clearLine(target.x, target.y, color, true); return; } me.isMoving = true; path.forEach(function (cell) { me.setBubble(cell.x, cell.y, null); }); var currentCell = path[i]; me.setBubble(currentCell.x, currentCell.y, color); i--; }, 50); },
时间: 2024-04-01 17:35:55 浏览: 111
getline函数示例用法
这段代码定义了三个方法:
1. getLine方法:输入一个气泡数组bubbles和颜色color,输出一个可以消除的气泡序列line。具体实现是遍历气泡数组,如果气泡颜色和给定颜色相同,则将该气泡的坐标加入line中。如果颜色不同,则判断line长度是否大于等于5,如果是,则返回line;否则将line清空。最终判断line长度是否大于等于5,如果是,则返回line;否则返回空数组。
2. draw方法:用于绘制游戏地图和所有气泡。首先保存当前画布状态,然后将画布坐标系移动到棋盘左上角。接着,通过for循环绘制棋盘的网格线。最后,遍历所有气泡对象,并调用它们各自的draw方法进行绘制。绘制完成后,恢复画布状态。
3. move方法:用于将一个气泡从起点移动到终点。首先调用search方法查找路径,如果找到了则通过play方法实现移动效果。具体实现是:根据路径依次将气泡从起点到终点进行移动,每次移动都调用setBubble方法进行更新。移动完成后,调用clearLine方法消除满足条件的气泡,并将isMoving属性设置为false。
阅读全文