我有一个由重力控制的玩家实体,我在屏幕底部有另一个实体移动。
当我的下落玩家实体击中底部的实体时,我希望它从它反弹。
理想情况下,我想使用播放器实体的.bounciness属性。
答案 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;
}