我最近开始使用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');
}
});
答案 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');
}
}
}