3

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

当我下落的玩家实体撞到底部的实体时,我希望它从它身上反弹。

理想情况下,我想使用玩家实体的 .bounciness 属性。

4

1 回答 1

3

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

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

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

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

此外,如果您愿意,您也可以处理带有碰撞的偏转角(类似于 Arkanoid 游戏):

如果玩家击中中心,您希望它直接向上。如果它击中右半边,你希望它向右;如果它撞到左边,你希望它向左走。

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

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;
}
于 2012-08-20T04:36:01.677 回答