检测连续触摸的单元格以通过碰撞或位置获胜

detecting continuous touched cells to win by collision or position

我尝试为我学校的学生设计 (bee_cell_competition)。在我的代码中一切正常。我有 7*7 (49) 个单元格作为影片剪辑。学生 select 一个随机单元格,试图使连续触摸的单元格获胜(垂直),如图中所示。当用户触摸一个新单元格 (mc_47) 并让用户获胜时,我该如何获取。我有这段代码,但无法检测到。看到这个 image description

var i =0;
var j =0;

var sellected_bee_cell;
var enemy1;
var enemy2;

var touched_cell_arr:Array = new Array(panel_bee.cell_0,panel_bee.cell_00);

var mc_bee_cells:Array = new Array(panel_bee.cell_1,panel_bee.cell_2,panel_bee.cell_3,panel_bee.cell_4,panel_bee.cell_5,panel_bee.cell_6,panel_bee.cell_7,panel_bee.cell_8,panel_bee.cell_9,panel_bee.cell_10,panel_bee.cell_11,panel_bee.cell_12,panel_bee.cell_13,panel_bee.cell_14,panel_bee.cell_15,panel_bee.cell_16,panel_bee.cell_17,panel_bee.cell_18,panel_bee.cell_19,panel_bee.cell_20,panel_bee.cell_21,panel_bee.cell_22,panel_bee.cell_23,panel_bee.cell_24,panel_bee.cell_25,panel_bee.cell_26,panel_bee.cell_27,panel_bee.cell_28,panel_bee.cell_29,panel_bee.cell_30,panel_bee.cell_31,panel_bee.cell_32,panel_bee.cell_33,panel_bee.cell_34,panel_bee.cell_35,panel_bee.cell_36,panel_bee.cell_37,panel_bee.cell_38,panel_bee.cell_39,panel_bee.cell_40,panel_bee.cell_41,panel_bee.cell_42,panel_bee.cell_43,panel_bee.cell_44,panel_bee.cell_45,panel_bee.cell_46,panel_bee.cell_47,panel_bee.cell_48,panel_bee.cell_49);
//====================================================================================

for (i = 0 ; i < 49 ; ++i)
{
        mc_bee_cells[i].buttonMode = true;
        mc_bee_cells[i].mouseChildren = false;
}

for (i = 0 ; i < 49 ; ++i)
{
    mc_bee_cells[i].addEventListener(MouseEvent.CLICK, run_the_next_q_4bee);

    function run_the_next_q_4bee(e:Event):void
    {
        sellected_bee_cell = e.currentTarget ;
        sellected_bee_cell.gotoAndStop("green");
        touched_cell_arr.push(sellected_bee_cell);
        check_win(null);
    }
}
//===========================================================

function check_win(e:Event):void
{
    for (var i:int = 0; i < touched_cell_arr.length - 1; i++)
    {
        var enemy1 = mc_bee_cells[i];

        for(var j:int = i+1; j< touched_cell_arr.length; j++)
        {
            var enemy2 = mc_bee_cells[j];

            if(enemy1.hitTestObject(enemy2))
            {
                trace("yes");
                // now i need how to check that user completed continuous touched cells vertically or horizontally
            }
        }
    }
}

//===========================================================

您应该保存触摸单元格链。您必须为此进行重构:

1) 创建一个 class Cell 为您的单元格扩展 MovieClip:

public class Cell extends MovieClip {
    public var prevCell:Cell = null;
    public var nextCell:Cell = null;
    public var index:uint = 0;
    public var isSelected = false;

    public function Cell() {}
}

2) 重写 run_the_next_q_4bee 处理程序:

var neighbourSelectedCellIndex:Array = [];

function run_the_next_q_4bee(e:Event):void {
    sellected_bee_cell = e.currentTarget ;
    sellected_bee_cell.gotoAndStop("green");
    touched_cell_arr.push(sellected_bee_cell);

    // Check neighbour cells
    var neighbourSelectedCellIndex = 
    checkNeighbourCells(sellected_bee_cell.index)
    if (neighbourSelectedCellIndex == -1) {
        touchedCellsChains.push(sellected_bee_cell)
    } else {
        var neighbourCell = mc_bee_cells[neighbourSelectedCellIndex];
        neighbourCell.nextCell = sellected_bee_cell;
        sellected_bee_cell.prevCell = prevCell;
    }

    check_win(null);
}

function checkNeighbourCells(selectedCellIndex:uint):int {
    // Check neighbour cells. Are there any selected adjoining cell?
    // If there is any selected cell return its index
    return <selected cell index>;
    // If there is no selected cell return -1
    return -1;
}

3) 重写check_win方法:

// You make call `hitTestObject` method    
var hasTop = false;
var hasBottom = false;

var prevCell = enemy1;
do {
    if (prevCell.index < 7) {
        hasTop = true;
    } else if (prevCell.index > 42) {
        hasBottom = true;
    }

    prevCell = prevCell.prevCell;
} while (!prevCell)

var nextCell = enemy1;
do {
    if (nextCell.index < 7) {
        hasTop = true;
    } else if (nextCell.index > 42) {
        hasBottom = true;
    }

    nextCell = nextCell.nextCell;
} while (!nextCell)

if (hasTop && hasBottom) {
    trace("You win!");
}