LiaGeliştiriciler

Rehberler

İki oyuncu odası. Onu sunucunuzda oluşturun, Lia'ın arkadaş seçici ile veya bir bağlantı ile bir arkadaşınızı davet edin ve her iki oyuncuyu aynı odada yerleştirin.

Fikir: bir oda bir id'ye sahiptir ve bu id davete girer's startParam. Daveti açan kişi, startParam ile uygulamanı açar ve sayfan, onlarla odaya katılır. Lia'kendi Lia XO böyle çalışır.

#1. Sunucunda bir oda oluştur

server.js
app.post("/api/rooms", async (req, res) => {
  const playerId = await playerFrom(req.body.session); // see Verify on your server
  if (!playerId) return res.status(401).end();
  const room = "room-" + crypto.randomUUID().replace(/-/g, "").slice(0, 10);
  await db.createRoom(room, { host: playerId, players: [playerId] });
  res.json({ room });
});

app.post("/api/rooms/join", async (req, res) => {
  const playerId = await playerFrom(req.body.session);
  if (!playerId) return res.status(401).end();
  const room = await db.room(req.body.room);
  if (!room) return res.status(404).json({ error: "no_room" });
  if (room.players.length >= 2 && !room.players.includes(playerId)) return res.status(409).json({ error: "full" });
  await db.addPlayer(req.body.room, playerId);
  res.json({ room: req.body.room });
});

Oda kimlikleri startParam'a sığmalı: 1 ile 64 arasında harfler, rakamlar, _ ve -.

#2. Bir arkadaşınızı davet edin

game.js
async function playWithAFriend() {
  const { room } = await api("/api/rooms", {});
  showWaiting(room);
  const { invited } = await Lia.inviteFriend({ startParam: room });
  if (!invited) Lia.toast("Share the link to invite someone");
}

// Or a link to send anywhere: opens your app in Lia, or the App Store without it.
async function shareRoom(room) {
  await Lia.share("Play with me: " + Lia.inviteLink(room));
}

Her seçilen arkadaş, onların Lia sohbetinde bir kart alır. Lia sadece arkadaşlarınızı davet etmenizi izler, ve sadece uygulamanızı açabildiğiniz arkadaşlar (uygulama's test modunda, sadece testçiler).

#3. odada indir

Uygulamanız açıldığında startParam'u okuyun ve onun gelmesini dinleyin'açık (kişi ikinci bir daveti tıklar):

function route(startParam) {
  if (startParam && startParam.startsWith("room-")) joinRoom(startParam);
}

Lia.init().then(function () {
  route(Lia.startParam);
  Lia.ready();
});
Lia.on("startParam", function (data) { route(data.startParam); });

async function joinRoom(room) {
  try {
    await api("/api/rooms/join", { room });
    openTable(room);
  } catch (error) {
    Lia.toast(error.message === "full" ? "That game is full" : "That game has ended");
  }
}

startParam sadece bir ipucudur: herkes herhangi bir startParam ile bir bağlantı oluşturabilir, bu yüzden sunucunuz o odanın var olup olmadığını ve oyuncunun katılabileceğini karar verir.

#4. Canlı oynayın

Oyuncuları sunucunuza bağlayın (bir WebSocket genellikle yaygındır) ve her oyuncuyu doğrulayın's oturumu, odaya katılmadan önce. Oyun oynarken:

Lia.enableClosingConfirmation(); // "Leave the game?" if they close
Lia.disableVerticalSwipes();     // a swipe down won't close the sheet mid move
Lia.onPause(function () { socket.send(JSON.stringify({ type: "away" })); });
Lia.onResume(function () { socket.send(JSON.stringify({ type: "back" })); });

#5. Bildirimle sıra sizde

Zaman's biri'hareket ve onlar'uygulamandan ayrıldığında, bir bildirim odanın startParam ile onları doğrudan geri getirir:

{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "@kofi played. Your move.", "startParam": "room-a81c2e09f4" }

#Kamuya açık tablolar

Davetler arkadaşlar için. Lia'a kimseyi dahil etmek için, aynı zamanda odanın listesini lobi beklerken:

server.js
// When the room is made: list it (as the host, with one seat taken).
await lia("POST", "/lobby/tables", { tableId: room, hostPlayerId: playerId, seats: 2, taken: 1, title: "Quick game" });

// When someone joins from the lobby: seat them through Lia first (it refuses blocked players and full tables).
app.post("/api/rooms/sit", async (req, res) => {
  const playerId = await playerFrom(req.body.session);
  if (!playerId) return res.status(401).end();
  try {
    const { full } = await lia("POST", `/lobby/tables/${encodeURIComponent(req.body.room)}/sit`, { playerId });
    await db.addPlayer(req.body.room, playerId);
    if (full) startGame(req.body.room);
    res.json({ room: req.body.room });
  } catch (error) {
    res.status(409).json({ error: error.data?.error ?? "failed" }); // full, not_found, own_table
  }
});

// When the game starts or the room closes: take it out (safe to repeat).
await lia("DELETE", `/lobby/tables/${encodeURIComponent(room)}`);

Sayfanızda, açık tabloları gösterin ve Lia seçmiş kişileri oturtun'kendi lobi (onlar startParam ile gelir lobby-<table id>):

const { tables } = await Lia.lobby.tables();
renderTables(tables, (table) => api("/api/rooms/sit", { room: table.id }));

function route(startParam) {
  if (startParam?.startsWith("lobby-")) return api("/api/rooms/sit", { room: startParam.slice(6) }).then(openTable);
  if (startParam?.startsWith("room-")) return joinRoom(startParam);
}

Yabancılar't Lia üzerinden sohbet edin, bloklar saygı göstersin ve oyuncular rapor birbirlerine.

#Bilinmesi gereken sınırlar

  • Bir kişi günde 20 arkadaşı uygulamanıza davet edebilir, bu yüzden davetler, sohbetlerde hoş karşılanan şey olmaya devam eder.
  • Bir sunucu, uygulamanızda aynı anda 3 açık kamuya açık masa var ve bir liste en fazla bir saat sürer.
  • Lia.inviteFriend() cevaplar { invited }, kimin davet edildiğini asla değil: sunucunuz, onların katıldığı anda kimin katıldığını öğrenir.

Otomatik çeviri. İngilizce, doğru kaynaktır. İngilizce olarak oku

Her sayfa, yöntem ve uç noktayı aramak için yazın.