虽然原始实体是crafyjs,但克隆的实体不可拖动

时间:2014-08-30 14:24:40

标签: javascript craftyjs

我正在使用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("可拖动&#34);

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

  4. 我试图:

    1. 使用E2.addComponent("Draggable")强制添加可拖动组件,但它无法正常工作!
    2. 绑定可拖动的事件,例如" Dragging"和" StartDrag"但它也不会工作!
    3. 使用" enableDrag"方法强制启用拖动,但这也没有任何影响:(
    4. consloe.log E2是否具有使用E2.has("Draggable")的可拖动组件并返回yes!
    5. FYI :所有其他功能,如MouseUp和MouseOver也不适用于E2,即使我稍后添加它们也是如此 关于什么使Draggable组件在克隆实体中不起作用的任何想法?

1 个答案:

答案 0 :(得分: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>