0

私は最近、ゲーム開発に 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');
   }  
});
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 に答える