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
onRoomLink
room.onRoomLink = (url) => voidYalnı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
stringzorunluconst room = await createRoom(config);
room.onRoomLink = (url) =>
console.log('Room open at', url);onError
room.onError = (message) => voidOdanı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 revokedveyaHost 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
stringzorunluroom.onError = (message) =>
console.error(
`[room ${room.roomId}]`,
message,
);Oyuncular
onPlayerJoin
room.onPlayerJoin = (p) => voidBir oyuncu katıldığında ve oynayabildiğinde tetiklenir. Host oyuncusu için tetiklenmez.
Argümanlar
room.onPlayerJoin = (player) => {
void room.sendAnnouncement(
`Welcome, ${player.name}`,
player.id,
);
};onPlayerLeave
room.onPlayerLeave = (p) => voidBir oyuncu ayrıldığında, odadan atıldığında veya yasaklandığında dahil olmak üzere tetiklenir.
Argümanlar
position değeri null olarak ayarlanmış.onPlayerKicked
room.onPlayerKicked = (p, reason, ban, byPlayer) => voidBir odadan atma veya yasaklama için onPlayerLeave'den sonra tetiklenir.
Argümanlar
stringzorunlubooleanzorunlutrue, eğer aynı zamanda yasaklandılarsa.null.room.onPlayerKicked = (
player,
reason,
ban,
by,
) => {
log(
`${player.name}` +
` ${ban ? 'banned' : 'kicked'}` +
` by ${by?.name ?? 'host'}: ${reason}`,
);
};onPlayerTeamChange
room.onPlayerTeamChange = (p, byPlayer) => voidBir oyuncunun takımı gerçekten değiştiğinde tetiklenir.
Argümanlar
null.onPlayerAdminChange
room.onPlayerAdminChange = (p, byPlayer) => voidArgümanlar
admin değeriyle.null: yöneticiliği yalnızca kodunuz verir.onPlayerMuteChange
room.onPlayerMuteChange = (p, byPlayer) => voidArgümanlar
muted değeriyle.null.onPlayerActivity
room.onPlayerActivity = (p) => voidBir 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
const lastSeen = new Map();
room.onPlayerActivity = (player) =>
lastSeen.set(player.id, Date.now());onPlayerInput
room.onPlayerInput = (p, prevInput) => voidYalnı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
input değeri yeni tuş durumudur.numberzorunluconst KICK = 16;
room.onPlayerInput = (player, prev) => {
if (player.input & KICK && !(prev & KICK))
kicksPressed++;
};Sohbet
onPlayerChat
room.onPlayerChat = (p, text) => boolean | voidBir 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
stringzorunluDönüş değeri
boolean | voidMesajın odaya ulaşmasını durdurmak için false döndürün.
room.onPlayerChat = (player, message) => {
if (message.startsWith('!')) {
handleCommand(player, message);
// Keep commands out of the chat.
return false;
}
};onPlayerDirectChat
room.onPlayerDirectChat = (p, recipient, text) => boolean | voidHost’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
stringzorunluDönüş değeri
boolean | voidHer iki oyuncuya da iletilmemesi için false döndürün.
room.onPlayerDirectChat = (
player,
recipient,
message,
) => !containsLink(message);Maçlar
onGameStart
room.onGameStart = (byPlayer) => voidArgümanlar
null.onGameStop
room.onGameStop = (byPlayer) => voidBir maç durdurulduğunda tetiklenir, ve bitmiş bir maç kendiliğinden lobiye döndüğünde null ile tetiklenir.
Argümanlar
null.onGamePause
room.onGamePause = (byPlayer) => voidArgümanlar
null.onGameUnpause
room.onGameUnpause = (byPlayer) => voidDevam ettirme geri sayımı başladığında tetiklenir.
Argümanlar
null.onGamePauseChange
room.onGamePauseChange = (paused) => voidYalnızca durumu ihtiyaç duyan işleyiciler için onGamePause veya onGameUnpause'den sonra tetiklenir.
Argümanlar
booleanzorunluonTeamGoal
room.onTeamGoal = (team) => voidArgümanlar
1 | 2zorunlu1 kırmızı veya 2 mavi.room.onTeamGoal = (team) => {
const { red, blue } = room.getScores();
void room.sendAnnouncement(
`${team === 1 ? 'Red' : 'Blue'} scores!` +
` ${red}–${blue}`,
);
};onPositionsReset
room.onPositionsReset = () => voidBir golden sonra oyuncular başlama vuruşu konumlarına döndüğünde tetiklenir.
onTeamVictory
room.onTeamVictory = (scores) => voidBir takım kazandığında ve maç bitmiş aşamaya girdiğinde tetiklenir.
Argümanlar
room.onTeamVictory = ({ red, blue }) => {
void room.sendAnnouncement(
`Full time: ${red}–${blue}`,
null,
null,
'bold',
);
};onGameVictory
room.onGameVictory = (scores) => voidEski Ball2D geri çağrısı; onTeamVictory’yi tercih edin.
onTeamVictory için önceki ad; o önce tetiklenir. Yeni kodda onTeamVictory kullanın.
Argümanlar
onGameTick
room.onGameTick = () => voidBir 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.
room.onGameTick = () => {
const ball = room.getBallPosition();
if (ball) heatmap.add(ball.x, ball.y);
};onPlayerBallKick
room.onPlayerBallKick = (p) => voidArgümanlar
Ayarlar
onStadiumChange
room.onStadiumChange = (name, byPlayer) => voidArgümanlar
stringzorunlunull.onTeamsLockChange
room.onTeamsLockChange = (locked, byPlayer) => voidArgümanlar
booleanzorunlunull.onKickRateLimitSet
room.onKickRateLimitSet = (min, rate, burst, byPlayer) => voidSınırları, sınırlama işleminden sonra bildirir. Bkz. setKickRateLimit().
Argümanlar
numberzorunlunumberzorunlunumberzorunlunull.Kayıt
onRecordingComplete
room.onRecordingComplete = (blob, reason) => voidOdanı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
BlobzorunlustringzorunluRecording limit reached, Stadium changed veya Room closed.room.onRecordingComplete = async (
blob,
reason,
) => {
await writeFile(
`auto-${Date.now()}.ball2drep`,
Buffer.from(await blob.arrayBuffer()),
);
console.log('Saved recording:', reason);
};