İçeriğe atla

Oda ve olaylar

Olaylar

Oyuncular hareket ettiğinde, maçlar değiştiğinde ve oda sorunları bildirdiğinde odanın çağırdığı geri çağırma fonksiyonları.

Bir olayı işlemek için bir olay özelliğine bir fonksiyon atayın; durdurmak için null atayın. Her olayın bir işleyicisi vardır. İşleyiciler, oda this olacak şekilde çalışır; fırlatan veya reddedilmiş bir promise döndüren bir işleyici, onError'a <event>: <error> biçiminde bildirir ve oda çalışmaya devam eder. Oda kapandıktan sonra, son bir onRecordingComplete hariç hiçbir olay tetiklenmez.

Birçok olay byPlayer alır: değişikliği oyundan yapan yönetici, ya da değişikliği kodunuz veya odanın kendisi yaptıysa null.

Adıyla dışa aktarılmaz; onu döndüren değerler üzerinden erişin.

Oda

olay
room.onRoomLink = (url) => void

Yalnızca bir kez, createRoom() çözümlendikten hemen sonra tetiklenir. createRoom() döndükten hemen sonra atayın; daha sonra atanan bir işleyici için tekrar oynatılmaz.

Argümanlar

urlstringzorunlu
Davet bağlantısı, roomLink ile aynı.
JavaScript
const room = await createRoom(config);
room.onRoomLink = (url) =>
  console.log('Room open at', url);

onError

olay
room.onError = (message) => void

Odanın işleminizi durdurmadan ele aldığı sorunları bildirir:

  • Fırlatan bir işleyici: onPlayerJoin: TypeError: …
  • Reddedilen bir komut, örneğin Error: Invalid team. Komutun promise'i de reddedilir.
  • Odanın neden sona erdiği, örneğin API key revoked veya Host connection ended.
  • Ağ sorunları, örneğin Could not connect directly to this room. Try another network or room.
  • İşleminiz yarım saniyeden fazla bloke olduğunda Host scheduler stalled; match paused.

Argümanlar

messagestringzorunlu
Neyin yanlış gittiği, metin olarak.
JavaScript
room.onError = (message) =>
  console.error(
    `[room ${room.roomId}]`,
    message,
  );

Oyuncular

onPlayerJoin

olay
room.onPlayerJoin = (p) => void

Bir oyuncu katıldığında ve oynayabildiğinde tetiklenir. Host oyuncusu için tetiklenmez.

Argümanlar

pHostPlayerzorunlu
Katılan oyuncu.
JavaScript
room.onPlayerJoin = (player) => {
  void room.sendAnnouncement(
    `Welcome, ${player.name}`,
    player.id,
  );
};

onPlayerLeave

olay
room.onPlayerLeave = (p) => void

Bir oyuncu ayrıldığında, odadan atıldığında veya yasaklandığında dahil olmak üzere tetiklenir.

Argümanlar

pHostPlayerzorunlu
Ayrılan oyuncu, position değeri null olarak ayarlanmış.

onPlayerKicked

olay
room.onPlayerKicked = (p, reason, ban, byPlayer) => void

Bir odadan atma veya yasaklama için onPlayerLeave'den sonra tetiklenir.

Argümanlar

pHostPlayerzorunlu
Kaldırılan oyuncu.
reasonstringzorunlu
Kendilerine gösterilen neden.
banbooleanzorunlu
true, eğer aynı zamanda yasaklandılarsa.
byPlayerHostPlayer | nullzorunlu
Onları kaldıran yönetici, ya da null.
JavaScript
room.onPlayerKicked = (
  player,
  reason,
  ban,
  by,
) => {
  log(
    `${player.name}` +
      ` ${ban ? 'banned' : 'kicked'}` +
      ` by ${by?.name ?? 'host'}: ${reason}`,
  );
};

onPlayerTeamChange

olay
room.onPlayerTeamChange = (p, byPlayer) => void

Bir oyuncunun takımı gerçekten değiştiğinde tetiklenir.

Argümanlar

pHostPlayerzorunlu
Oyuncu, yeni takımında.
byPlayerHostPlayer | nullzorunlu
Onları taşıyan yönetici, ya da null.

onPlayerAdminChange

olay
room.onPlayerAdminChange = (p, byPlayer) => void

Argümanlar

pHostPlayerzorunlu
Oyuncu, yeni admin değeriyle.
byPlayerHostPlayer | nullzorunlu
Her zaman null: yöneticiliği yalnızca kodunuz verir.

onPlayerMuteChange

olay
room.onPlayerMuteChange = (p, byPlayer) => void

Argümanlar

pHostPlayerzorunlu
Oyuncu, yeni muted değeriyle.
byPlayerHostPlayer | nullzorunlu
Bunu değiştiren yönetici, ya da null.

onPlayerActivity

olay
room.onPlayerActivity = (p) => void

Bir oyuncu tuşlarını değiştirdiğinde veya bir oda mesajı gönderdiğinde tetiklenir. Boşta olan oyuncuları takip etmek için kullanın.

Argümanlar

pHostPlayerzorunlu
Aktif oyuncu.
JavaScript
const lastSeen = new Map();
room.onPlayerActivity = (player) =>
  lastSeen.set(player.id, Date.now());

onPlayerInput

olay
room.onPlayerInput = (p, prevInput) => void

Yalnızca bir eş kabul edilen tuş durumunu değiştirdiğinde çalışır; prevInput önceki yetkili bit maskesidir.

Bir oyuncunun kabul edilen tuş durumu her değiştiğinde tetiklenir. Tuşlar bir bit maskesidir: yukarı 1, aşağı 2, sol 4, sağ 8, şut 16. Bir oyuncu 250 ms boyunca sessiz kaldığı için serbest bırakılan tuşlar bu olayı tetiklemez.

Argümanlar

pHostPlayerzorunlu
Oyuncu, input değeri yeni tuş durumudur.
prevInputnumberzorunlu
Bu değişiklikten önceki tuş durumu.
JavaScript
const KICK = 16;
room.onPlayerInput = (player, prev) => {
  if (player.input & KICK && !(prev & KICK))
    kicksPressed++;
};

Sohbet

onPlayerChat

olay
room.onPlayerChat = (p, text) => boolean | void

Bir oyuncudan gelen her oda mesajı için, kimse görmeden önce tetiklenir. Susturulmuş oyunculardan ve sohbet hız sınırını aşan oyunculardan gelen mesajlar buraya asla ulaşmaz. Mesajı yalnızca eşzamanlı bir false bastırır: bir async işleyici bir promise döndürür, bu ise bastırmaz.

Argümanlar

pHostPlayerzorunlu
Gönderen.
textstringzorunlu
Mesaj, 1–200 karakter.

Dönüş değeri

boolean | voidMesajın odaya ulaşmasını durdurmak için false döndürün.

JavaScript
room.onPlayerChat = (player, message) => {
  if (message.startsWith('!')) {
    handleCommand(player, message);
    // Keep commands out of the chat.
    return false;
  }
};

onPlayerDirectChat

olay
room.onPlayerDirectChat = (p, recipient, text) => boolean | void

Host’un görebildiği özel sohbet; iletimi iki katılımcıya da engellemek için false döndürün.

Oyuncular arasındaki her özel mesaj için, host oyuncusuna gönderilen mesajlar dahil olmak üzere tetiklenir. Host özel mesajları yönlendirir, böylece odanız onları okuyabilir. false döndürmek, bir promise döndürmek veya fırlatmak, iletimi durdurur.

Argümanlar

pHostPlayerzorunlu
Gönderen.
recipientHostPlayerzorunlu
Mesajın gönderildiği oyuncu.
textstringzorunlu
Mesaj.

Dönüş değeri

boolean | voidHer iki oyuncuya da iletilmemesi için false döndürün.

JavaScript
room.onPlayerDirectChat = (
  player,
  recipient,
  message,
) => !containsLink(message);

Maçlar

onGameStart

olay
room.onGameStart = (byPlayer) => void

Argümanlar

byPlayerHostPlayer | nullzorunlu
Onu başlatan yönetici, ya da null.

onGameStop

olay
room.onGameStop = (byPlayer) => void

Bir maç durdurulduğunda tetiklenir, ve bitmiş bir maç kendiliğinden lobiye döndüğünde null ile tetiklenir.

Argümanlar

byPlayerHostPlayer | nullzorunlu
Onu durduran yönetici, ya da null.

onGamePause

olay
room.onGamePause = (byPlayer) => void

Argümanlar

byPlayerHostPlayer | nullzorunlu
Duraklatan yönetici, ya da null.

onGameUnpause

olay
room.onGameUnpause = (byPlayer) => void

Devam ettirme geri sayımı başladığında tetiklenir.

Argümanlar

byPlayerHostPlayer | nullzorunlu
Devam ettiren yönetici, ya da null.

onGamePauseChange

olay
room.onGamePauseChange = (paused) => void

Yalnızca durumu ihtiyaç duyan işleyiciler için onGamePause veya onGameUnpause'den sonra tetiklenir.

Argümanlar

pausedbooleanzorunlu
Yeni durum.

onTeamGoal

olay
room.onTeamGoal = (team) => void

Argümanlar

team1 | 2zorunlu
Gol atan takım: 1 kırmızı veya 2 mavi.
JavaScript
room.onTeamGoal = (team) => {
  const { red, blue } = room.getScores();
  void room.sendAnnouncement(
    `${team === 1 ? 'Red' : 'Blue'} scores!` +
      ` ${red}–${blue}`,
  );
};

onPositionsReset

olay
room.onPositionsReset = () => void

Bir golden sonra oyuncular başlama vuruşu konumlarına döndüğünde tetiklenir.

onTeamVictory

olay
room.onTeamVictory = (scores) => void

Bir takım kazandığında ve maç bitmiş aşamaya girdiğinde tetiklenir.

Argümanlar

scoresHostScoreszorunlu
Nihai skor.
JavaScript
room.onTeamVictory = ({ red, blue }) => {
  void room.sendAnnouncement(
    `Full time: ${red}–${blue}`,
    null,
    null,
    'bold',
  );
};

onGameVictory

olay
room.onGameVictory = (scores) => void

Eski Ball2D geri çağrısı; onTeamVictory’yi tercih edin.

onTeamVictory için önceki ad; o önce tetiklenir. Yeni kodda onTeamVictory kullanın.

Argümanlar

scoresHostScoreszorunlu
Nihai skor.

onGameTick

olay
room.onGameTick = () => void

Bir maç sırasında saniyede 60 kez, her simülasyon adımından önce tetiklenir; gol ve bitmiş aşamaları dahil. Lobide, duraklatılmışken veya devam ettirme geri sayımı sırasında tetiklenmez. Hızlı tutun: simülasyonla aynı iş parçacığında çalışır.

JavaScript
room.onGameTick = () => {
  const ball = room.getBallPosition();
  if (ball) heatmap.add(ball.x, ball.y);
};

onPlayerBallKick

olay
room.onPlayerBallKick = (p) => void

Argümanlar

pHostPlayerzorunlu
Şutu topa çarpan oyuncu.

Ayarlar

onStadiumChange

olay
room.onStadiumChange = (name, byPlayer) => void

Argümanlar

namestringzorunlu
Yeni stadyumun adı.
byPlayerHostPlayer | nullzorunlu
Bunu değiştiren yönetici, ya da null.

onTeamsLockChange

olay
room.onTeamsLockChange = (locked, byPlayer) => void

Argümanlar

lockedbooleanzorunlu
Yeni kilit durumu.
byPlayerHostPlayer | nullzorunlu
Bunu değiştiren yönetici, ya da null.

onKickRateLimitSet

olay
room.onKickRateLimitSet = (min, rate, burst, byPlayer) => void

Sınırları, sınırlama işleminden sonra bildirir. Bkz. setKickRateLimit().

Argümanlar

minnumberzorunlu
Tick cinsinden bekleme süresi.
ratenumberzorunlu
Tick cinsinden şut başına yeniden dolum maliyeti.
burstnumberzorunlu
Biriktirilebilecek şut sayısı.
byPlayerHostPlayer | nullzorunlu
Bunu değiştiren yönetici, ya da null.

Kayıt

onRecordingComplete

olay
room.onRecordingComplete = (blob, reason) => void

Odanın kendiliğinden tamamladığı bir kaydı iletir. stopRecording() ile durdurduğunuz kayıtlar bunun yerine orada döndürülür. Bu, oda kapanırken tetiklenebilen tek olaydır.

Argümanlar

blobBlobzorunlu
Kayıt.
reasonstringzorunlu
Recording limit reached, Stadium changed veya Room closed.
JavaScript
room.onRecordingComplete = async (
  blob,
  reason,
) => {
  await writeFile(
    `auto-${Date.now()}.ball2drep`,
    Buffer.from(await blob.arrayBuffer()),
  );
  console.log('Saved recording:', reason);
};