Maçlar
Bir maçın nasıl ilerlediği ve onu nasıl başlatacağınız, duraklatacağınız, sınırlayacağınız ve takip edeceğiniz.
Aşamalar
Bir oda dört aşamadan geçer; bu aşamalar getState().phase ile bildirilir:
| Aşama | Ne olur | Biter |
|---|---|---|
lobby | Oyuncular takım seçer; disk yoktur. | startGame() |
playing | Maç saniyede 60 tick hızında çalışır. | Bir gol, bir galibiyet veya stopGame() |
goal | Bir golden sonra top 5.5 saniye boyunca oyun dışıdır. | Başlama vuruşu pozisyonları sıfırlanır |
finished | Bir takım kazanmıştır; sonuç 5 saniye boyunca gösterilir. | lobby'ye geri döner |
Bir takım skor sınırına ulaştığında veya bir takım önde olarak süre bittiğinde maç kazanılır. Süre sınırında skor berabereyse oyun bir sonraki gole kadar sürer.
Bir maçı kontrol edin
await room.setScoreLimit(3); // 0 = no limit
await room.setTimeLimit(5); // minutes, 0 = no limit
await room.startGame();Skor ve süre sınırları, stadyumlar gibi, yalnızca maçlar arasında değişir: bir maç sırasında bu çağrılar hiçbir şey yapmaz. Bunları startGame()'den önce ayarlayın.
pauseGame(true) oyunu dondurur; pauseGame(false) iki saniyelik bir geri sayımdan sonra devam ettirir. stopGame() maçı kazanan olmadan sonlandırır.
Maçı takip edin
Olaylar size ne olduğunu bildirir; okumalar ise durumun ne olduğunu gösterir.
room.onTeamGoal = (team) => {
const { red, blue, time } = room.getScores();
console.log(
`${Math.floor(time / 60)}' ` +
`${team === 1 ? 'Red' : 'Blue'} scores: ${red}–${blue}`,
);
};
room.onTeamVictory = ({ red, blue }) => {
void room.sendAnnouncement(
`Full time: Red ${red} – ${blue} Blue`,
null,
null,
'bold',
);
};onGameTick, oyun sırasında her simülasyon adımından önce saniyede 60 kez çalışır. Topa hâkimiyet veya ısı haritaları gibi her anı takip etmesi gereken işler için kullanın ve hızlı tutun: yavaş bir işleyici tüm odayı yavaşlatır. Süreciniz yarım saniyeden uzun süre tıkanırsa oda maçı duraklatır ve Host scheduler stalled; match paused. bildirir.
Maçları sürdürün
Yaygın bir düzen, bir maç bittiğinde bir sonrakini otomatik olarak başlatır:
room.onGameStop = async () => {
const fielded = room
.getPlayerList()
.filter((p) => p.team !== 0);
if (fielded.length >= 2) {
await new Promise((resolve) => setTimeout(resolve, 3000));
await room.startGame();
}
};onGameStop, bir maç durdurulduğunda da bittikten sonra lobiye döndüğünde de tetiklenir.
Şut spamı
setKickRateLimit(min, rate, burst), oyuncuların ne kadar hızlı şut çekebileceğini sınırlar. Maç ortasında bile anında uygulanır.