1

我正在尝试在我的游戏中创建多个 hitbox 区域,但我找不到任何文档或如何使用它们的示例。场景是,我的“英雄”有 2 个碰撞箱,一个在他的脚上,另一个在他的身体上。如果他用脚碰撞箱击中敌人,敌人就会死亡。如果他用身体击中敌人,他的健康必须减少。如何确定哪个碰撞箱创建了碰撞事件?

4

1 回答 1

1

这个问题的答案类似于最近在 Crafty 论坛上的回答

您可以不可见实体附加到父实体,该实体将与父实体一起移动并同时充当父实体的碰撞箱。为了响应检测到这些子实体上的冲突,您可以通知父实体这些冲突。可能还有其他方法可以实现相同的目标。

下面是一个展示原理的小例子。
使用 WASD 移动,根据接触棕色敌人的身体部位观察颜色变化。
请注意,当两个身体部位都与敌人发生碰撞时,它并不能解决这种情况。为简单起见,父实体上的触发事件被简化为直接修改父实体。onHit有其局限性,为了简单起见,在这里使用。

Crafty.init();

var hero = Crafty
       .e("2D, DOM, Color, hero, Fourway")
       .attr({x: 0, y: 0, w: 64, h: 128})
       .color('gray')
       .fourway();

var body = Crafty
       .e("2D, Collision, WiredHitBox, body")
       .attr({x: 0, y: 0, w: 64, h: 96})
       .onHit('enemy', function() {
         this._parent.color('red');
        }, function() {
         this._parent.color('gray');
        });

var feet = Crafty
       .e("2D, Collision, WiredHitBox, feet")
       .attr({x:0, y: 96, w: 64, h: 32})
       .onHit('enemy', function() {
         this._parent.color('green');
        }, function() {
         this._parent.color('gray');
        });

hero.attach(body);
hero.attach(feet);

Crafty.e("2D, DOM, Color, enemy")
      .attr({x: 150, y: 96, w: 32, h: 32})
      .color('brown');
<script src="https://github.com/craftyjs/Crafty/releases/download/0.7.1/crafty-min.js"></script>

于 2016-03-01T15:30:34.040 回答