我最近开始使用LimeJS进行游戏开发,我遇到了一些麻烦。
我正在制作一个RTS类型的游戏。我有一些功能,可以让你选择建筑物,然后点击地图,将选择的建筑物添加到地图上。我不希望玩家能够放置一个建筑,如果它与一个已经存在的建筑重叠。我该怎么检查这个?建筑物是精灵,而精灵又作为子级添加到地图精灵中。我正在考虑使用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');
}
});发布于 2012-10-22 19:42:42
我把它修好了。我在所有的孩子身上使用了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');
}
}
} 发布于 2013-01-30 04:28:40
您可能还希望将碰撞检查放在scheduleManager中,然后它可以逐帧检查它,如果它重叠,您可以将精灵或建筑设置为红色。
https://stackoverflow.com/questions/13007698
复制相似问题