Class LiveGameAbstract

ミニゲームを伴う生放送 (Live) の実装を支援するクラスです.

プレイヤーがボタン押下すると結果が決まるようなミニゲームが対象です.

本クラスを継承したクラスを作り、抽象メソッドを実装してください.

本クラスは下記の流れでミニゲーム生放送を表現します.

生放送画面が開く

導入(ゲームルールの説明)

ミニゲーム開始(ボタン出現)

プレイヤーがボタンを押下する

成績の計算(100点満点)

成績に応じたゲーム結果の演出

生放送終了(マップに戻る)
import { LiveGame } from '@yasshi2525/live-on-air'

export class HogeLiveGame extends LiveGame {
// 導入(ゲームルールの説明)の処理
protected override handleIntroduction (context: LiveContext, next: () => void): void {
// next() を実行すると次のステップに進みます。
// 下記の例では2秒待機後次に進みます.
context.scene.setTimeout(() => next(), 2000);
}
// ミニゲーム開始時の処理
protected override handleGamePlay (context: LiveContext, next: () => void): void {
// ...
}
// ...
}

Implements

Constructors

Properties

onIntroduce: Trigger<void> = ...

ミニゲームの導入演出が終わり、ミニゲーム本編の開始直前に発火します.

onResult: Trigger<void> = ...

ミニゲームの結果演出が終わった直後に発火します.

onSubmit: Trigger<{
    score: number;
    text: string;
}> = ...

プレイヤーが操作し、成績が確定した直後に発火します.

Type declaration

  • score: number

    プレイヤーの成績(100点満点)

  • text: string

    画面に表示する成績のテキスト

    toResultText

unlockThreshold: number = 75

成績がこの値以上のとき、 Spot を攻略済みとして取り扱います.

Methods

  • Protected

    ミニゲーム中の状態をもとにプレイヤーの成績を100点満点で採点します.

    本メソッドは handleSubmitend() が呼ばれた際呼び出され、 戻り値の値を成績として評価します.

    ミニゲーム中の採点の根拠となる情報は context、 特に自由に定義可能な LiveContext#vars に格納して、 採点処理を実装してください.

    Parameters

    Returns number

    増減するゲージの値が最大のタイミングを狙ってプレイヤーがボタンを押下するミニゲームの場合
    const maxWidth = 500;
    protected handleGamePlay (context: LiveContext, next: () => void): () => void {
    // ゲージを作成
    const gauge = new g.FilledRect({
    scene: context.scene, parent: context.view, width: 0, cssColor: 'red' });
    // 自由に定義可能なフィールドにゲージのエンティティを追加
    context.vars = { gauge };
    gauge.onUpdate.add(() => {
    gauge.width++
    gauge.modified();
    }).
    // ...
    }
    protected evaluateScore (context: LiveContext): number {
    // ゲージエンティティを取得
    const gauge = (context.vars as Record<string, g.FilledRect>).gauge;
    // ゲージの幅の大きさに比例した成績を100点満点で採点結果として返す.
    return gauge.width / maxWidth * 100;
    }
  • Protected

    ミニゲーム中の描画を行います.

    プレイヤー操作があると次のステップに進みます.

    ライブラリ利用者が本メソッドをオーバーライドしなかった場合、 画面中央上にボタンが出現し、ボタンが押下されると次のステップに進みます. プレイヤーの操作受付をデフォルト提供のボタン以外にしたい場合、 handleSubmit を継承したメソッドを定義してください.

    プレイヤー操作後のクリーンアップ処理が必要な場合、クリーンアップ関数を戻り値に定義してください.

    Parameters

    Returns void | (() => void)

    敵画像を表示し、プレイヤー操作があった際にクリーンアップ処理として敵画像を削除する例

    protected handleGamePlay (context: LiveContext): () => void {
    const scene = context.scene;
    const view = context.view; // 生放送用の描画エンティティのトップ要素
    // 画面に敵画像を表示します
    const enemy = new g.Sprite({ scene, src: <省略> });
    // プレイヤー操作後に敵画像を削除します
    return () => {
    enemy.destroy();
    }
    }
  • Protected

    ゲームの導入画面を描画・演出します.

    本メソッドを実装し、プレイヤーにゲームの概要を伝えてください. 導入画面の演出が終了したら第2引数 next() を呼び出してください.

    プレイヤー操作後のクリーンアップ処理が必要な場合、クリーンアップ関数を戻り値に定義してください.

    Parameters

    • context: LiveContext

      利用可能な環境情報

    • next: (() => void)

      次のステップに進む際、呼び出すべき関数

        • (): void
        • Returns void

    Returns void | (() => void)

    プレイヤーが説明を読む時間を確保するため、 数秒待機してから next() を実行することをお勧めします

    protected handleIntroduction (context: LiveContext, next: () => void): () => void {
    const scene = context.scene;
    const view = context.view; // 生放送用の描画エンティティのトップ要素
    // 画面に説明用の画像を表示します
    const description = new g.Sprite({ scene, src: <省略> });
    view.append(description);
    // 3秒間経過したら説明用画像の表示を終了します
    scene.setTimeout(() => {
    next(); // ゲーム進行のため、必ずこの行の命令を呼び出してください
    }, 3000);
    // 演出終了時に説明文を削除します.
    return () => {
    description.destroy();
    }
    }
  • Protected

    プレイヤーの成績発表描画を表示します.

    ライブラリ利用者が本メソッドをオーバライドしなかった場合、 プレイヤーの成績に応じたラベルが3秒間表示されます.

    プレイヤーの成績は 第2引数 score に100点満点で格納されています. 成績に応じた画面に表示する文字列は toResultText を呼び出すことで取得できます.

    演出が終了したら、第2引数 next() を呼び出してください.

    演出終了時、描画したエンティティを削除するようなクリーンアップ処理を定義したい場合、 戻り値にクリーンアップ処理を記述した関数を指定してください.

    Parameters

    • context: LiveContext

      利用可能な環境情報

    • score: number

      プレイヤーの成績(100点満点)

    • next: (() => void)

      呼び出すと次のステップに進む関数

        • (): void
        • Returns void

    Returns void | (() => void)

    protected override handleResultViewing (context: LiveContext, score: number, next: () => void): () => void {
    // 成績に応じたラベルを表示
    const result = new g.Label({ scene: context.scene, parent: context.view, font: <省略>,
    text: this.toResultText(context, score) });
    // 5秒間表示して次のステップに移動する
    context.scene.setTimeout(() => next(), 5000);
    // 次のステップに移動する直前にクリーンアップとしてラベルを削除する
    return () => {
    result.destroy();
    }
    }
  • Protected

    プレイヤー操作を受け付ける touchable なエンティティを定義します.

    デフォルト(メソッドを継承しなかった場合)では画面中央上に押下可能なボタンが出現します.

    本メソッドを継承してエンティティを定義することで表示を差し替えられます. エンティティを自身で定義する場合、操作検知 (onPointDown など) を実装してください. また、ミニゲームを終了して次の結果発表ステップに進むタイミングで第2引数の next() を呼び出してください.

    もし、プレイヤー操作後にクリーンアップ処理が必要な場合、戻り値にクリーンアップ関数を定義してください.

    Parameters

    • context: LiveContext

      利用可能な環境情報

    • next: (() => void)

      次のステップに進む際、呼び出すべき関数

        • (): void
        • Returns void

    Returns void | (() => void)

    protected override handleSubmit (context: LiveContext, next: () => void): () => void {
    const scene = context.scene;
    const view = context.view; // 生放送用の描画エンティティのトップ要素
    const button = new g.FilledRect({
    scene, parent: view, width: 100, height: 100, cssColor: 'red', touchable: true });
    // button が押下されたなら次のステップに進みます.
    button.onPointDown.addOnce(() => next());
    // ボタン押下後、クリーンアップ処理としてボタンを無効化させます.
    return () => {
    button.cssColor = 'gray';
    button.touchable = false;
    button.modified();
    }
    }
  • Spot を攻略済みとしてマークするかどうか取得します.

    未定義の場合、生放送開始をもって攻略済みとしてマークします.

    Returns boolean

  • ライブラリ利用者は本メソッドをオーバライドして実装する必要はありません.

    Parameters

    • context: LiveContext

      利用可能な環境情報

    • end: (() => void)

      呼び出すと生放送が終了する関数

        • (): void
        • Returns void

    Returns void

  • Protected

    プレイヤーの成績に応じて画面に表示するテキストを定義します.

    ライブラリ利用者が本メソッドをオーバライドしない場合、 下記の文字列がラベルとして生放送画面に出力されます.

    1. 95点以上: エクセレント!
    2. 75点以上: グレイト!
    3. 50点以上: グッド!
    4. 50点未満: ミス…

    Parameters

    • context: LiveContext

      利用可能な環境情報

    • score: number

      プレイヤーの成績(100点満点)

    Returns string