Crafty.js碰撞后返回上一个位置

时间:2019-05-10 10:43:26

标签: craftyjs

 player.bind('Move', function(from) {


                                    if(this.hit('Tree')){

                                        player.x = from._x
                                        player.y = from._y
             // Here player.x and player.y have right value but not renderered here.

                                    }
                }
                )

我调试程序在此处输入,并且from._x和from._y具有良好的价值。 但是玩家仍然在树的“后面”。

1 个答案:

答案 0 :(得分:0)

我还没有太多的CraftyJS经验,所以不要以此为最佳方式,但是...

我在API文档中找到了一些参考文献:

  • Collision组件应用于播放器和树
  • 对播放器使用onHit()。触发后,将传递hitDatas的集合。在hit()
  • 的描述中找到了hitData的定义

这里是一个例子-当标记有“玩家”组件的实体与任何标记为“树”的组件发生碰撞时,都会将玩家对象的x位置向后退,直到其与树重叠的量。

<html>
<body>
    <div id="game"></div>
    <script type="text/javascript" src="https://rawgithub.com/craftyjs/Crafty/release/dist/crafty-min.js"></script>
    <script>
      Crafty.init(640,100, document.getElementById('game'));


      Crafty.e('2D, Canvas, Color, Twoway, Player, Collision')
      	.attr({x: 0, y: 50, w: 50, h: 50})
      	.color('#00F')
      	.twoway(400)
      	.onHit('Tree', function(hitDatas) {
      		hitData = hitDatas[0];

      		this.x -= hitData.overlap * hitData.nx;
      	});

      Crafty.e('2D, Canvas, Color, Tree, Collision')
      	.attr({x: 300, y:0, w: 40, h: 100})
      	.color('#873');

    </script>
  </body>
</html>