LimeJS检测重叠

时间:2012-10-22 08:41:31

标签: javascript html5 limejs

我最近开始使用LimeJS进行游戏开发,但我遇到了一些困扰。

我正在制作一种RTS类型的游戏。我有一些功能可让您选择建筑物,然后单击地图将所选建筑物添加到地图中。 如果玩家与已经存在的建筑物重叠,我不希望玩家能够放置建筑物。我该怎么检查?这些建筑物是Sprites,后者又作为子项添加到地图精灵中。我正在考虑使用hitTest,但我无法弄清楚该功能是如何工作的。事件处理程序的示例:

goog.events.listen(field,['mousedown'],function build(e){


    if(selected_ == 1){
     var house = new rh.house().setPosition(e.position.x, e.position.y);
     field.appendChild(house);
     selected_ = -1;
     houselbl.setFill('assets/storage.png');
    }  
    if(selected_ == 2){
     var blacksmith = new rh.blacksmith().setPosition(e.position.x, e.position.y);
     field.appendChild(blacksmith);
     selected_ = -1;
     blacksmithlbl.setFill('assets/blacksmith.png');
    }      
    if(selected_ == 3){
     var lumbermill = new rh.lumbermill().setPosition(e.position.x, e.position.y);
     field.appendChild(lumbermill);
     selected_ = -1;
     lumbermilllbl.setFill('assets/lumbermill.png');
   }  
});

2 个答案:

答案 0 :(得分:1)

您可能还想将此碰撞检查放入scheduleManager中,然后可以逐帧检查它,如果它重叠,您可以将精灵变为红色或构建为红色。

答案 1 :(得分:0)

我得到了它的工作。我在所有孩子身上使用了getBoundingBox,并检查它是否安全。示例如下:

goog.events.listen(field,['mousedown'],function build(e){ 

    if(selected_ == 1){
        var house = new rh.house().setPosition(e.position.x, e.position.y);
        var safe=true;
        for (var i=0;i<field.getNumberOfChildren();i++)
        { 
           var box = field.getChildAt(i).getBoundingBox();
           if (goog.math.Box.intersects(box,house.getBoundingBox())){
           safe=false;
       }
    }
        if (safe){
            field.appendChild(house);
            selected_ = -1;
            houselbl.setFill('assets/storage.png');
        }
    }  
}