重力によって制御されるプレーヤーエンティティがあり、画面の下部に移動する別のエンティティがあります。
落下しているプレイヤーエンティティが一番下のエンティティに当たったとき、それを跳ね返らせたいです。
理想的には、プレーヤーエンティティの.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
}
また、必要に応じて、衝突で偏向角度を処理することもできます (アルカノイド ゲームと同様):
プレーヤーが中央でヒットした場合は、まっすぐ上に行きたいと思います。右半分に当たる場合は、右に行きたいと思います。左にヒットする場合は、左に移動します。
プレイヤーが一番下のエンティティに当たった場所を見つけ、エンティティの端からの角度を見つけます。
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;
}