Fizik
Topu ve oyuncuları da içeren, maçı oluşturan diskleri okuyun ve değiştirin.
Hareket eden her şey bir disktir. Bir maç sırasında disk indeksleri önce stadyumun disklerini listeler, top 0 indeksindedir, ardından sahadaki oyuncular kadro sırasına göre gelir. İzleyicilerin diski yoktur. Lobide disk yoktur: okumalar null veya 0 döndürür ve değişiklikler hiçbir şey yapmaz.
Konumlar ve boyutlar, orijin sahanın merkezinde olacak şekilde stadyum birimlerini kullanır.
CollisionFlags
room.CollisionFlags: Readonly<Record<string, number>>cMask ve cGroup için bit bayrakları: bir disk, cMask'i diğerinin cGroup'uyla bir bit paylaştığında onunla çarpışır.
| Bayrak | Değer |
|---|---|
ball | 1 |
red | 2 |
blue | 4 |
redKO | 8 |
blueKO | 16 |
wall | 32 |
kick | 64 |
score | 128 |
c0 … c3 | 1 << 28 … 1 << 31 |
all | 63 |
const { ball, red, blue, wall } =
room.CollisionFlags;
// The ball passes through players;
// it collides with walls only.
await room.setDiscProperties(0, {
cMask: wall,
});getDiscCount()
room.getDiscCount(): numberDöndürür
numberStadyum diskleri artı sahadaki oyuncular; lobide 0.
getDiscProperties()
room.getDiscProperties(discIndex: number): HostDiscProperties | nullParametreler
numberzorunlu0dan (top) getDiscCount() - 1e kadar.Döndürür
HostDiscProperties | nullDiskin özellikleri, ya da geçersiz bir indeks için veya lobide null.
const ball = room.getDiscProperties(0);
if (ball)
console.log(
'Ball speed',
Math.hypot(ball.xspeed, ball.yspeed),
);setDiscProperties()
room.setDiscProperties(discIndex: number, properties: DiscPropertyPatch): Promise<void>Bir diski, maç duraklatılmış olsa bile hemen değiştirir. Tüm yama önce doğrulanır: geçersiz bir alan Invalid disc property: <name> hatasıyla reddedilir ve hiçbir şey değişmez. Aralıklar:
| Alanlar | Aralık |
|---|---|
x, y, xspeed, yspeed, xgravity, ygravity | −8192 – 8192 |
radius | 0.5 – 100 |
bCoeff | −1 – 8192 |
invMass, damping | 0 – 8192 |
color | 0x000000 – 0xffffff, veya şeffaf için -1 |
cMask, cGroup | 32 bit'lik tam sayılar |
Çok sayıda diski küçültmek gibi, çarpışmaları oda için çok maliyetli hale getirecek bir değişiklik, Stadium collision complexity exceeds the room budget hatasıyla reddedilir. Geçersiz bir indeksle veya lobide, çağrı hiçbir şey yapmaz.
Parametreler
numberzorunlunull olan alanlar değerini korur; bilinmeyen alanlar yok sayılır.Döndürür
Promise<void>
// Drop the ball back on the centre spot.
await room.setDiscProperties(0, {
x: 0,
y: 0,
xspeed: 0,
yspeed: 0,
});getPlayerDiscProperties()
room.getPlayerDiscProperties(playerId: number): HostDiscProperties | nullParametreler
numberzorunluDöndürür
HostDiscProperties | nullOyuncunun diski, ya da izleyiciler, bilinmeyen oyuncular ve lobi için null.
setPlayerDiscProperties()
room.setPlayerDiscProperties(playerId: number, properties: DiscPropertyPatch): Promise<void>Bir oyuncunun diskini oyuncu ID’sine göre değiştirir, böylece indeksini hesaplamanıza gerek kalmaz. İzleyiciler ve bilinmeyen oyuncular yok sayılır.
Parametreler
numberzorunluDöndürür
Promise<void>
// A giant goalkeeper for the red team.
await room.setPlayerDiscProperties(keeper.id, {
radius: 30,
invMass: 0.2,
});