Skip to content

ゲーム

ゲームモジュールはゲームに関するさまざまな機能を提供しています。JOGOS_SDK 简介ページで自分のゲームエンジンに関連する部分を読んだ後、以下のように関連機能を使用できます:

javascript
window.JOGOS_SDK.game;

初期化フェーズで、ローカライズ言語適応、デバイス適応、時間キャリブレーションなどの設定操作を完了する必要がある場合は、初期化(SysInfo)関連ページにジャンプして、詳細なパラメータ定義と設定方法を確認してください。

ゲームの一時停止/再開

ゲームが中断された場合(レベルの終了、ゲームの一時停止など)、必ずゲーム一時停止メソッドを呼び出してゲームが一時停止されたことを通知してください。ゲームが復元または再開された場合(復元、復活、次のレベルへの進入など)、忘れずにゲーム再開メソッドを呼び出してゲームが再開されたことを通知してください。SDK 内部では広告再生時の一時停止と再開を自動的に処理するため、重複して呼び出す必要はありません。

javascript
// ゲームが一時停止されたことを通知します
await window.JOGOS_SDK.game.pause();
// 一時停止したゲームが再開されたことを通知します
await window.JOGOS_SDK.game.continuePlay();

ゲームのロード開始/終了

ゲームのロードを開始する場合は、必ずロード開始メソッドを呼び出してゲームのロードが開始されたことを通知してください。ロードが終了したら、必ずロード終了メソッドを呼び出してゲームのロードが完了したことを通知してください。

javascript
// ゲームのロードが開始されたことを通知します
await window.JOGOS_SDK.game.loadingStart();
// ゲームのロードが終了したことを通知します
await window.JOGOS_SDK.game.loadingEnd();

ゲームのロードを開始する場合は、必ずロード開始メソッドを呼び出してゲームのロードが開始されたことを通知してください。ロードが終了したら、必ずロード終了メソッドを呼び出してゲームのロードが完了したことを通知してください。

javascript
// ゲームが一時停止されたことを通知します
await window.JOGOS_SDK.game.pause();
// ゲームが再開されたことを通知します
await window.JOGOS_SDK.game.continuePlay();

ハッピータイム

このメソッドは、プレイヤーが何らかの達成(ボスの撃破、高得点の達成など)をしたときに呼び出すことができます。このメソッドが正常に呼び出されると、ウェブサイトの祝賀アクション(例:紙吹雪の発射など)がトリガーされます。レベルの完了や報酬の獲得時には、このメソッドを呼び出す必要はありません。

javascript
// ゲームのハッピータイムを活性化
await window.JOGOS_SDK.game.happytime();

フレンドとチャット機能

標準化されたソーシャル機能モジュールを統合し、フレンド関係管理とリアルタイムチャットサービスをカバーしています。もしあなたのゲームがマルチプレイヤーインタラクションをサポートしている場合、軽量なAPIを通じて迅速に接続し、以下のコアソーシャルシナリオを実現できます:フレンドリストのクラウド同期、ワンクリックでのチーム招待、プライベート対話など。これにより、開発者は極めて低い開発コストで、ゲーム内の没入型ソーシャルエコシステムを効率的に構築できます。

  • 使用時、開発者はプラットフォーム側の対応するプレイヤーの UserId をパラメータとして渡す必要があります。

フレンド関係チェック

指定したプレイヤーが現在のユーザーのフレンドかどうかを確認します。

javascript
/**
 * 指定したプレイヤーが自分のフレンドかどうかを確認します
 * @param {Array<number>} userIds プレイヤーIDの集合
 * @returns {Promise<Object>} { [userId: number]: boolean } キーと値のペアオブジェクト
 */
window.JOGOS_SDK.game.isMyFriends = async function(userIds) {
    // 内部実装
}

フレンドインタラクションロジックの説明

開発者は、フレンド関係に基づいてボタン表示ロジックを独自に実装する必要があります:

  1. ボタンの状態判断: isMyFriends インターフェースを使用して、指定されたプレイヤーがフレンドかどうかを確認します。
  2. ボタン表示ロジック:
    • フレンドの場合: "Conversation" ボタンを表示し、クリック時に openChatDialog を呼び出してチャットを開始します。
    • フレンドでない場合: "Add Friend" ボタンを表示し、クリック時に sendFriendRequest を呼び出してフレンド申請を送信します。
  3. ボタンの実装: ボタンのUIスタイル、位置、インタラクション効果はすべてゲーム開発者自身が実装します。

サンプルコード

javascript
// フレンドインタラクションボタンの実装例
async function setupFriendButton(userId, buttonElement) {
    try {
        // 1. フレンド関係を確認
        const friendStatus = await window.JOGOS_SDK.game.isMyFriends([userId]);
        const isFriend = friendStatus[userId];
        
        // 2. フレンド関係に基づいてボタンを設定
        if (isFriend) {
            // チャットボタンを表示
            buttonElement.textContent = "Conversation";
            buttonElement.onclick = async () => {
                const success = await window.JOGOS_SDK.game.openChatDialog(userId);
                if (!success) {
                    alert("チャットウィンドウを開くことができません。公式プラットフォーム環境であることを確認してください。");
                }
            };
        } else {
            // フレンド追加ボタンを表示
            buttonElement.textContent = "Add Friend";
            buttonElement.onclick = async () => {
                const success = await window.JOGOS_SDK.game.sendFriendRequest(userId);
                if (success) {
                    alert("フレンド申請を送信しました。");
                } else {
                    alert("フレンド申請の送信に失敗しました。");
                }
            };
        }
        
        // 3. 頻繁なクリック防止ロジックを追加
        let lastClickTime = 0;
        const originalClick = buttonElement.onclick;
        buttonElement.onclick = function() {
            const now = Date.now();
            if (now - lastClickTime < 3000) {
                console.log("クリックが頻繁すぎます。しばらくしてからもう一度お試しください。");
                return;
            }
            lastClickTime = now;
            originalClick.call(this);
        };
        
    } catch (error) {
        console.error("フレンドボタンの設定に失敗しました:", error);
    }
}

フレンド追加

指定したプレイヤーにフレンド申請を送信します。

javascript
/**
 * 指定したプレイヤーにフレンド申請を送信します
 * @param {number} userId 対象プレイヤーID
 * @returns {Promise<boolean>} 送信成功かどうか
 */
window.JOGOS_SDK.game.sendFriendRequest = async function(userId) {
    // 内部実装
}

チャット開始

指定したフレンドとのチャットウィンドウを開きます。

javascript
/**
 * 指定したプレイヤーとのチャットウィンドウを開きます
 * @param {number} userId 対象プレイヤーID
 * @returns {Promise<boolean>} 正常に開けたかどうか
 */
window.JOGOS_SDK.game.openChatDialog = async function(userId) {
    // 内部実装
}

境界処理:

  • 非公式プラットフォームに組み込まれた場合、失敗を返し、以下のメッセージを表示します:「フレンドチャット機能は公式プラットフォームでのみ提供されています」。
  • ボタンクリック後、3秒以内に再度クリックすることはできません。
重要な注意

開発者のゲーム独自のチャット機能: このゲーム(ネットワークゲーム)が独自のチャット機能を持っている場合、開発者は不適切な言葉のフィルターを追加し、ゲーム設定に基づいてチャットを無効にすることを要求します。苦情がある場合、チャットを無効にするように求めます。

初期化インターフェースは招待フィールドパラメータを返します

  • ゲーム初期化インターフェースに、ゲーム参加招待のためのカスタムパラメータ(ルームID、招待コードなど)が追加されました。開発者は招待リンクを共有する際にこれらのパラメータを含めることができ、招待されたプレイヤーがリンクを通じてゲームに入ると、SDKがパラメータを開発者に渡し、プレイヤーを対応するルームに参加させることができます。
javascript
// ゲーム初期化時にルームパラメータを渡す例
const gameConfig = {
    inviteArgs: 'ABC123',       // カスタムフィールド(招待コード/ルームIDなど)
    // その他のゲーム設定...
};

// SDK初期化時にパラメータを渡す
window.JOGOS_SDK.init({
    gameId: 'your_game_id',
    customParams: JSON.stringify(gameConfig)
});

フレンド招待ウィンドウを開く

  • ユーザーがゲーム内で新しいゲームに参加できる位置にいるとき、この機能はゲームシーンに「招待シェア」ボタンを配置することをサポートします:
  • ボタンをクリックすると、招待リンクを含むポップアップが開き、フレンドを選択して招待を送信することができます。 alt text
  • 招待リンクはカスタムパラメータ(ルームID/招待コードなど)を含みます。招待されたプレイヤーがリンクをクリックしてゲームに入ると、開発者はパラメータを解析し、プレイヤーを対応するルームに参加させることができます。
  • ゲームシーンの「Invite friend」ボタンをクリックすると、サイドバーのフレンドリストが開き、フレンドに招待メッセージを送信します。リンクまたは直接招待のいずれかでゲームに参加することができます。
javascript
/**
 * 招待ウィンドウを開きます
 * @param {Object} inviteArgs 招待パラメータオブジェクト
 * @param {string} inviteArgs.inviteArgs カスタム招待パラメータ(必須、例:ルームIDまたは招待コード)
 * @param {string} [inviteArgs.customData] カスタムデータ(招待されたユーザーに転送されます)
 * @param {number} [inviteArgs.expireTime] 招待リンクの有効期限タイムスタンプ(ミリ秒)
 */
window.JOGOS_SDK.game.openInviteDialog = function(inviteArgs) {
    // パラメータ検証
    if (!inviteArgs || !inviteArgs.inviteArgs) {
        throw new Error('Missing required parameter: inviteArgs');
    }
    
    // 内部実装:
    // 1. パラメータ付き招待リンクを生成
    // 2. 招待ポップアップを開く(フレンドリストと共有オプションを含む)
    // 3. 招待結果のコールバックを処理
};