0

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

我正在制作 RTS 类型的游戏。我有让您选择建筑物的功能,然后单击地图将所选建筑物添加到地图中。如果建筑物与已经存在的建筑物重叠,我不希望玩家能够放置建筑物。我将如何检查这个?建筑物是 Sprite,它们又作为子项添加到地图 Sprite 中。我正在考虑使用 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');
   }  
});
4

2 回答 2

1

您可能还想将该碰撞检查放在 scheduleManager 中,然后它可以逐帧检查它,如果它确实重叠,您可以将精灵或建筑物变为红色。

于 2013-01-29T20:28:39.947 回答
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');
        }
    }  
} 
于 2012-10-22T11:42:42.223 回答