0

我正在使用 Craftyjs 构建这个简单的 HTML5 拖放游戏。

  1. 我创建了一个带有一些组件的实体,我们称之为 E1,其中一个组件是“ Draggable”。
  2. 我创建了一个新实体 E2 并将其作为 E1 的克隆(现在 E2 应该具有所有 E1 的属性和组件的副本)
  3. 运行时,E2 被克隆,具有相同的属性和属性,但不可拖动!

    var E1 = Crafty.e("2D, Canvas, apple, Draggable, Gravity, Collision");

    var E2 = E1.clone();

    E2.attr({x:100, y:100});

    E2.addComponent("可拖动");

    E2.enableDrag(); E2.bind("正在拖动", function(){ console.log("E2被拖动"); });

我尝试过了:

  1. 强制添加 Draggable 组件,E2.addComponent("Draggable")但它不起作用!
  2. 绑定 Draggable 事件,如“ Dragging”和“ StartDrag”,但它也不起作用!
  3. 通过使用“ enableDrag”方法强制启用拖动,但这也没有任何效果:(
  4. consloe.logE2 是否有 Draggable 组件通过 usingE2.has("Draggable")并返回 yes!

仅供参考:MouseUp 和 MouseOver 等所有其他功能也不适用于 E2,即使我稍后添加它们,关于是什么导致 Draggable 组件在克隆实体中不起作用的任何想法?

4

1 回答 1

0

以下最小示例适用于我使用最新的稳定版本 (v0.6.3)。
您是否在游戏初始化时克隆实体?在拖动实体时克隆实体可能会导致状态不一致。

<html>
  <head></head>
  <body>
    <div id="game"></div>
    <script src="https://rawgithub.com/craftyjs/Crafty/release/dist/crafty-min.js"></script>
    <script>
        Crafty.init(600, 300, document.getElementById('game'));
        Crafty.background('rgb(127,127,127)');

        var ent1 = Crafty.e('2D, Canvas, Color, Draggable')
              .attr({x: 200, y: 50, w: 50, h: 50})
              .color('blue');

        var ent2 = ent1.clone()
              .attr({x:100, y:100})
              .color('green');
    </script>
  </body>
</html>

于 2015-05-09T14:42:52.830 回答