2014-08-30 81 views
0

我使用Craftyjs构建了这个简单的HTML5拖放游戏。克隆实体不可拖动,虽然原始实体是,crafyjs

  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(“Draggable”);

    E2.enableDrag(); (“Dragging”,function(){ console.log(“E2 is being dragged”); });

我想:

  1. E2.addComponent("Draggable")添加可拖动的组件,但它不会工作!
  2. 绑定Draggable事件,如“Dragging”和“StartDrag”,但它也不起作用!
  3. 力通过使用“enableDrag”的方法使阻力,但没有任何效果要么:(
  4. consloe.log E2无论是否使用E2.has("Draggable")具有可拖动的成分,它是回来了!

FYI :所有其他功能(如MouseUp和MouseOver)都不适用于E2以及即使我稍后添加它们 任何有关使Draggable组件在克隆实体中不起作用的想法?

回答

0

foll由于使用最新的稳定版本(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>