İçeriğe atla

Oda ve olaylarOda

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

özellik
room.CollisionFlags: Readonly<Record<string, number>>
salt okunur

cMask ve cGroup için bit bayrakları: bir disk, cMask'i diğerinin cGroup'uyla bir bit paylaştığında onunla çarpışır.

BayrakDeğer
ball1
red2
blue4
redKO8
blueKO16
wall32
kick64
score128
c0 … c31 << 28 … 1 << 31
all63
JavaScript
const { ball, red, blue, wall } =
  room.CollisionFlags;
// The ball passes through players;
// it collides with walls only.
await room.setDiscProperties(0, {
  cMask: wall,
});

getDiscCount()

yöntem
room.getDiscCount(): number

Döndürür

numberStadyum diskleri artı sahadaki oyuncular; lobide 0.

getDiscProperties()

yöntem
room.getDiscProperties(discIndex: number): HostDiscProperties | null

Parametreler

discIndexnumberzorunlu
İndeks, 0dan (top) getDiscCount() - 1e kadar.

Döndürür

HostDiscProperties | nullDiskin özellikleri, ya da geçersiz bir indeks için veya lobide null.

JavaScript
const ball = room.getDiscProperties(0);
if (ball)
  console.log(
    'Ball speed',
    Math.hypot(ball.xspeed, ball.yspeed),
  );

setDiscProperties()

yöntem
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:

AlanlarAralık
x, y, xspeed, yspeed, xgravity, ygravity−8192 – 8192
radius0.5 – 100
bCoeff−1 – 8192
invMass, damping0 – 8192
color0x000000 – 0xffffff, veya şeffaf için -1
cMask, cGroup32 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

discIndexnumberzorunlu
Değiştirilecek diskin indeksi.
propertiesDiscPropertyPatchzorunlu
Değiştirilecek alanlar. Atlanan veya null olan alanlar değerini korur; bilinmeyen alanlar yok sayılır.

Döndürür

Promise<void>

JavaScript
// Drop the ball back on the centre spot.
await room.setDiscProperties(0, {
  x: 0,
  y: 0,
  xspeed: 0,
  yspeed: 0,
});

getPlayerDiscProperties()

yöntem
room.getPlayerDiscProperties(playerId: number): HostDiscProperties | null

Parametreler

playerIdnumberzorunlu
Oyuncu ID’si.

Döndürür

HostDiscProperties | nullOyuncunun diski, ya da izleyiciler, bilinmeyen oyuncular ve lobi için null.

setPlayerDiscProperties()

yöntem
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

playerIdnumberzorunlu
Oyuncu ID’si.
propertiesDiscPropertyPatchzorunlu
Değiştirilecek alanlar, setDiscProperties() için olduğu gibi.

Döndürür

Promise<void>

JavaScript
// A giant goalkeeper for the red team.
await room.setPlayerDiscProperties(keeper.id, {
  radius: 30,
  invMass: 0.2,
});