使实体从ImpactJS中的另一个实体反弹

时间:2012-08-16 01:30:19

标签: javascript impactjs

我有一个由重力控制的玩家实体,我在屏幕底部有另一个实体移动。

当我的下落玩家实体击中底部的实体时,我希望它从它反弹。

理想情况下,我想使用播放器实体的.bounciness属性。

1 个答案:

答案 0 :(得分:3)

您希望底部实体包含以下属性:

checkAgainst: ig.Entity.TYPE.A, // player entity type
collides: ig.Entity.COLLIDES.ACTIVE

然后你希望你的bottomEntity的check()方法在玩家实体碰撞时反转玩家实体的速度。

check: function(other) {
  other.vel.y -= 100; // you could also use other.accel.y
}

此外,如果你想要你可以处理与碰撞的偏转角度(类似于打砖块游戏):

如果玩家在中心点击,你希望它直接上升。如果它击中右半部分,你希望它正确;如果它在左侧击中,你希望它向左移动。

因此,找到玩家击中底部实体的位置,并找到相对于实体末端的角度。

var playerPos = player.pos.x - bottomEntity.pos.x;
var relativePos = ( bottomEntity.size.x - playerPos);
var angle = relativePos * ( Math.PI / bottomEntity.size.x ); // translate to radians - this finds the number of radians per bottom entity pixel

一旦你获得了角度,拿它的cos来抓住方向。将方向乘以底部实体的速度,你就得到了底部实体的新速度。

var newVel = Math.cos( angle ) * bottomEntity.vel.x;

然后您的check()方法将如下所示:

check: function(other) {
  var playerPos = other.pos.x - bottomEntity.pos.x;
  var relativePos = ( bottomEntity.size.x - playerPos);
  var angle = relativePos * ( Math.PI / bottomEntity.size.x ); // translate to radians - this finds the number of radians per bottom entity pixel
  other.vel.y -= newVel;
}