İçeriğe atla

Oda barındırma

Fizik ve diskler

Konumları okuyun ve topun ve oyuncuların nasıl hareket ettiğini değiştirin.

Ball2D, 2D bir sahada diskleri saniyede 60 tick hızında simüle eder. Top, oyuncular ve bir stadyumdaki hareketli nesnelerin tümü aynı özelliklere sahip disklerdir: konum, hız, yarıçap, kütle, sönümleme, sekme, yer çekimi, renk ve çarpışma bayrakları.

Bir disk bulun

Bir maç sırasında 0 numaralı disk toptur. Ardından stadyumun diğer diskleri, sonra sahadaki oyuncular kadro sırasına göre gelir. İzleyicilerin diski yoktur ve lobide hiç disk bulunmaz.

En basit okumalar indekse gerek duymaz:

JavaScript
const ball = room.getBallPosition(); // { x, y } or null
// null for spectators
const player = room.getPlayerDiscProperties(id);

Bir diski değiştirin

Yamalar yalnızca verdiğiniz alanları değiştirir:

JavaScript
// Heavier, slower ball.
await room.setDiscProperties(0, {
  invMass: 0.5,
  damping: 0.98,
});

// Freeze a player for a penalty.
await room.setPlayerDiscProperties(id, {
  xspeed: 0,
  yspeed: 0,
  invMass: 0,
});

Herhangi bir şey değişmeden önce yamanın tamamı doğrulanır. setDiscProperties() her alanı ve aralığını listeler.

Çarpışmalar

İki disk, birinin cMask'i diğerinin cGroup'uyla bir bit paylaştığında çarpışır. CollisionFlags bu bitleri adlandırır:

JavaScript
const { ball, red, blue, wall } = room.CollisionFlags;

// Ghost mode: the red goalkeeper passes through blue players.
const keeper = room.getPlayerDiscProperties(id);
await room.setPlayerDiscProperties(id, {
  cMask: keeper.cMask & ~blue,
});

Değişiklikler ve maç

Disk değişiklikleri, duraklatılmış olsa bile anında uygulanır ve her oyuncu bunları görür. Bir sonraki başlama vuruşu sıfırlaması veya stadyum yüklemesi diskleri yeniden konumlandırana kadar sürer; bu nedenle kalıcı değişiklikleri onPositionsReset ve onGameStart içinde yeniden uygulayın.