イベントシステム

Next2D Playerは、W3C DOMイベントモデルと同様の3フェーズイベントフロー機構を採用しています。

EventDispatcher

すべてのイベント発行可能なオブジェクトの基底クラスです。

addEventListener(type, listener, useCapture, priority)

イベントリスナーを登録します。

const { PointerEvent } = next2d.events;

displayObject.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
    console.log("ポインターが押されました");
});

// キャプチャフェーズで受け取る
displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, true);

// 優先度を指定
displayObject.addEventListener(PointerEvent.POINTER_DOWN, handler, false, 10);

removeEventListener(type, listener, useCapture)

イベントリスナーを削除します。

displayObject.removeEventListener(PointerEvent.POINTER_DOWN, handler);

removeAllEventListener(type, useCapture)

特定タイプのすべてのイベントリスナーを削除します。

displayObject.removeAllEventListener(PointerEvent.POINTER_DOWN);

hasEventListener(type)

指定タイプのリスナーが登録されているか確認します。

if (displayObject.hasEventListener(PointerEvent.POINTER_DOWN)) {
    console.log("ポインターダウンリスナーが登録されています");
}

willTrigger(type)

このオブジェクトまたは祖先がイベントタイプのリスナーを持つか確認します。

if (displayObject.willTrigger(PointerEvent.POINTER_DOWN)) {
    console.log("このオブジェクトまたは祖先にリスナーがあります");
}

dispatchEvent(event)

イベントを発行します。

const { Event } = next2d.events;

const event = new Event("customEvent");
displayObject.dispatchEvent(event);

Event クラス

プロパティ

プロパティ説明
typeStringイベントタイプ
targetObjectイベント発行元
currentTargetObject現在のリスナー登録先
eventPhaseNumberイベントフェーズ
bubblesBooleanバブリングするか

メソッド

メソッド説明
stopPropagation()伝播を停止
stopImmediatePropagation()伝播を即座に停止

標準イベントタイプ

表示リスト関連

イベント説明
addedDisplayObjectContainerに追加された
addedToStageStageに追加された
removedDisplayObjectContainerから削除された
removedFromStageStageから削除された
sprite.addEventListener("addedToStage", (event) => {
    console.log("ステージに追加されました");
});

タイムライン関連

イベント説明
enterFrame各フレームで発生
frameConstructedフレーム構築完了
exitFrameフレーム離脱時
movieClip.addEventListener("enterFrame", (event) => {
    // 毎フレーム実行される処理
    updatePosition();
});

ロード関連

イベント説明
completeロード完了
progressロード進捗
ioErrorIOエラー
httpStatusHTTPステータス受信
const { Loader } = next2d.display;
const { URLRequest } = next2d.net;

const loader = new Loader();

// async/awaitを使用した読み込み
await loader.load(new URLRequest("animation.json"));
const content = loader.content;
stage.addChild(content);

// プログレスイベントを使用する場合
loader.contentLoaderInfo.addEventListener("progress", (event) => {
    const percent = (event.bytesLoaded / event.bytesTotal) * 100;
    console.log(`${percent}% ロード完了`);
});

ポインターイベント

PointerEventはマウス、ペン、タッチなどのポインターデバイスの操作を統一的に処理します。

イベント定数説明
pointerDownPointerEvent.POINTER_DOWNボタンの押下開始
pointerUpPointerEvent.POINTER_UPボタンの解放
pointerMovePointerEvent.POINTER_MOVEポインター座標の変化
pointerOverPointerEvent.POINTER_OVERポインターがヒットテスト境界に入った
pointerOutPointerEvent.POINTER_OUTポインターがヒットテスト境界を出た
pointerLeavePointerEvent.POINTER_LEAVEポインターが要素領域を離れた
pointerCancelPointerEvent.POINTER_CANCELポインター操作がキャンセルされた
doubleClickPointerEvent.DOUBLE_CLICKダブルクリック/タップが発生
const { PointerEvent } = next2d.events;

sprite.addEventListener(PointerEvent.POINTER_DOWN, (event) => {
    console.log("ポインターダウン:", event.localX, event.localY);
});

sprite.addEventListener(PointerEvent.POINTER_MOVE, (event) => {
    console.log("ポインター移動:", event.stageX, event.stageY);
});

sprite.addEventListener(PointerEvent.DOUBLE_CLICK, (event) => {
    console.log("ダブルクリック");
});

キーボードイベント

イベント定数説明
keyDownKeyboardEvent.KEY_DOWNキー押下
keyUpKeyboardEvent.KEY_UPキー解放
const { KeyboardEvent } = next2d.events;

stage.addEventListener(KeyboardEvent.KEY_DOWN, (event) => {
    console.log("キーコード:", event.keyCode);

    switch (event.keyCode) {
        case 37: // 左矢印
            player.x -= 10;
            break;
        case 39: // 右矢印
            player.x += 10;
            break;
    }
});

フォーカスイベント

イベント定数説明
focusInFocusEvent.FOCUS_INフォーカスを受け取った
focusOutFocusEvent.FOCUS_OUTフォーカスを失った
const { FocusEvent } = next2d.events;

textField.addEventListener(FocusEvent.FOCUS_IN, (event) => {
    console.log("フォーカスを受け取りました");
});

ホイールイベント

イベント定数説明
wheelWheelEvent.WHEELマウスホイールが回転した
const { WheelEvent } = next2d.events;

stage.addEventListener(WheelEvent.WHEEL, (event) => {
    console.log("ホイール回転");
});

ビデオイベント

イベント定数説明
playVideoEvent.PLAY再生がリクエストされた
playingVideoEvent.PLAYING再生が開始された
pauseVideoEvent.PAUSE一時停止された
seekVideoEvent.SEEKシーク操作

ジョブイベント

Tweenアニメーション用のイベントです。

イベント定数説明
updateJobEvent.UPDATEプロパティが更新された
stopJobEvent.STOPジョブが停止した

カスタムイベント

const { Event } = next2d.events;

// カスタムイベントの定義
const customEvent = new Event("gameOver", true, true);

// イベントの発行
gameManager.dispatchEvent(customEvent);

// イベントのリッスン
gameManager.addEventListener("gameOver", (event) => {
    showGameOverScreen();
});

イベントの伝播

イベントは3つのフェーズで伝播します:

  1. キャプチャフェーズ: rootからtargetへ(eventPhase = 1)
  2. ターゲットフェーズ: targetで処理(eventPhase = 2)
  3. バブリングフェーズ: targetからrootへ(eventPhase = 3)
const { PointerEvent } = next2d.events;

// キャプチャフェーズで処理
parent.addEventListener(PointerEvent.POINTER_DOWN, handler, true);

// バブリングフェーズで処理(デフォルト)
child.addEventListener(PointerEvent.POINTER_DOWN, handler, false);

関連項目