我有一个受重力控制的玩家实体,我在屏幕底部有另一个可以移动的实体。
当我下落的玩家实体撞到底部的实体时,我希望它从它身上反弹。
理想情况下,我想使用玩家实体的 .bounciness 属性。
我有一个受重力控制的玩家实体,我在屏幕底部有另一个可以移动的实体。
当我下落的玩家实体撞到底部的实体时,我希望它从它身上反弹。
理想情况下,我想使用玩家实体的 .bounciness 属性。
您希望底部实体包含以下属性:
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;
}