Coder Social home page Coder Social logo

akashic-engine's People

Contributors

blackspotbear avatar dependabot[bot] avatar dera- avatar github-actions[bot] avatar kamakiri01 avatar lambdataro avatar renovate-bot avatar renovate[bot] avatar shinobutakahashi avatar xnv avatar xtity avatar yoshikyoto avatar yu-ogi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

akashic-engine's Issues

Util.distanceBeweenAreas() の実装がおかしい

いただいたご連絡曰く:

distanceBetweenAreas(p1: CommonArea, p2: CommonArea)
変数内でwidthおよびheightを引いてますが、本来は足すものと考えられます。

ご指摘のとおりに見える。不具合か。ゲーム開発者向けユーティリティだが、実際に利用するユーザがなく発覚してこなかった模様。

再生中のAudioAssetを別Sceneでロードできない

一般ユーザによる問い合わせ先がこちらでなかったらすみません。
掲題は大分かい摘んでいるので以下に詳細を記します。
推奨する対処方法があれば教えていただきたいです。

環境

  • Node: 16.13.1
  • akashic-engin: 3.2.2
  • akashic-cli: 2.14.29
  • モード: multi
  • 実行コマンド: akashic serve -s nicolive

エラーメッセージ(Chrome)

Uncaught AssertionError: AssetManager#peekLiveAssetByAccessorPath(): No audio asset for /assets/audio/se
    at Object.createAssertionError (engineFilesV3_1_4.js:1)
    at AssetManager.peekLiveAssetByAccessorPath (engineFilesV3_1_4.js:1)
    at AssetAccessor.getAudio (engineFilesV3_1_4.js:1)
    at main.js:32
    at Trigger.fire (engineFilesV3_1_4.js:1)
    at Scene._fireLoaded (engineFilesV3_1_4.js:1)
    at Game._flushPostTickTasks (engineFilesV3_1_4.js:1)
    at Game.tick (engineFilesV3_1_4.js:1)
    at Game.game.tick (ServeGameContent.ts:101)
    at GameLoop._onFrameNormal (engineFilesV3_1_4.js:1)

条件(以下を全て満たす)

  • 1つ目のSceneでAudioAssetを再生
  • 再生中に2つ目のSceneに移行
  • 2つ目のSceneではAudioAssetを読み込ませない
  • 再生中に3つ目のSceneに移行
  • 3つ目のSceneではAudioAssetを読み込ませる
  • 3つ目のSceneでAudioAssetを取得する

再現コード

/assets/audio/seは3秒以上の音声ファイル

export = function main(): void {
  const scene1 = new g.Scene({
    game: g.game,
    assetPaths: ["/assets/audio/se"],
  });

  const scene2 = new g.Scene({
    game: g.game,
  });

  const scene3 = new g.Scene({
    game: g.game,
    assetPaths: ["/assets/audio/se"],
  });

  scene1.onLoad.add(() => {
    const audio = scene1.asset.getAudio("/assets/audio/se");
    audio.play();
    scene1.setTimeout(() => {
      g.game.replaceScene(scene2);
    }, 1000);
  });

  scene2.onLoad.add(() => {
    scene2.setTimeout(() => {
      g.game.replaceScene(scene3);
    }, 1000);
  });

  scene3.onLoad.add(() => {
    const audio = scene3.asset.getAudio("/assets/audio/se");
    audio.play();
  });

  g.game.pushScene(scene1);
};

備考

  • 再生完了後に遷移したとしても、途中参加者によるスキップ処理で発生し得る
  • 2つ目のSceneで同一のAudioAssetを読み込ませた場合は発生せず
  • Scene遷移前に.stop()で再生を止めることで対処可能

カメラの生成・設定が動作しない

フレームワーク利用者による問い合わせ先がわからなかったためこちらにて失礼します.

環境

  • akashic-engine: v3.0.4
  • 言語: typescript

事象

  • 入門ガイド通りにカメラの設定を行おうとしたが,コンストラクタの仕様が異なっておりgameパラメータを指定できない.
  • gameパラメータを指定せず生成したカメラをg.Gameに設定しても動作しない.(getterでもundefinedが返ってくる)

const camera = new g.Camera2D({});  // 'game'パラメータは指定不可
g.game.focusingCamera = camera;
console.debug(g.game.focusingCamera);  // 'undefined'

参考資料

「単なる画像」を扱うエンティティクラスが欲しい

発端

画像を示すエンティティで、resizeTo() などした場合には、「指定したサイズに画像のスケールを変更する」という意味になるようなクラスが欲しいです。

g.Sprite クラスは、アトラス画像を扱うクラスなので resizeTo() などを使った場合、surface ではなく、「アトラス画像全体のサイズ」を変更するような動作をします。これは、おそらく意図通りだと思います。

しかし、単なる1つの画像を扱いたい場合は、 resizeTo() したら「画像を、指定したサイズで表示し直したい」という意図になると思います。

例えば、

const image = new g.Image({scene: scene, src: scene.assets["asset_id"] });
image.resizeTo({x: 100, y: 100});
image.modified();

とした場合は、元の画像のサイズが何であれ、「100x100のサイズで、その画像を表示したい」のではないかと思います。

g.Sprite でこれを実現しようと思った場合には、`scale() メソッド を使用するしかなく、不便だと思います。

EventFilterに関する質問です

g.game.addEventFilterで利用するイベントフィルターについての質問です。
COEライブラリを詳しく調べていてどうしても分からない部分、確信が持てない部分があるので質問します。

a, bの2通りの条件でイベントフィルターが呼ばれるかどうかについてと、それを元にQ1,Q2の2つの質問です。
a, bの説明自体が間違っていればその指摘もお願いします。

a. local:falseのイベントの場合
ローカルでないシーンのローカルでないエンティティRECTをクリックした時にg.PointDownEvent (local:false)が生成されて、g.game.isActiveInstance()trueのゲームインスタンスのイベントフィルターにこのイベントが渡されます。
この時にイベントフィルターで除外されなければ、全てのゲームインスタンスでRECTのonPointDownに登録されている関数が呼び出されます。

b. local:trueのイベントの場合
ローカルなエンティティRECTをクリックした時にg.PointDownEvent (local:true)が生成されて、クリックしたゲームインスタンスのイベントフィルターにこのイベントが渡されます。
この時にイベントフィルターで除外されなければ、クリックしたゲームインスタンスでRECTのonPointDownに登録されている関数が呼び出されます。

疑問に思ったのは a の場合で、g.game.isActiveInstance()trueのゲームインスタンスは、イベントフィルターが呼び出されるが、その後に受け取ったプレイヤーはイベントフィルターが呼び出されないことです。
b の場合にはクリックしたプレイヤー自身のイベントフィルターが呼び出されるので、a の場合にも呼び出されない理由に付いて次のことをを知りたいです。
Q1. なぜイベントフィルターが呼び出されないのか。
Q2. (ゲームエンジンが)何を元にイベントフィルターを呼び出すかを判断しているのか。

FrameSpriteのコメントと実装が一致していない

/**
 * アニメーション終了時にfireされるTrigger。
 * 本Triggerは loop: true の場合にのみfireされる。
 */
finished: Trigger<void>;

となっているが、実装はloop: falseで発火されている

/**
 * @private
 */
_onElapsed(): void {
	if (this.frameNumber === this.frames.length - 1) {
		if (this.loop) {
			this.frameNumber = 0;
		} else {
			this.stop();
			this.finished.fire();
		}
	} else {
		this.frameNumber++;
	}
	this.modified();
}

Apple端末でnew Sprite時に生成されたエンティティの表示がブラウザ実装により異なる

Spriteを生成するときにsrcの範囲外を参照したときのエンティティの見た目がOSにより異なります。
例えばサイズが100x100の画像をsrcに指定し、srcWdithに1000を指定してSpriteを生成すると、
webkitでは、透明になります。
Chromium,Geckoでは、元画像幅が10分の1に圧縮され、残りの部分は透明になります。

各ブラウザ実装によって動作が変わるのは開発段階で気が付きにくいバグの原因になるので、対処して欲しいです。
WebGLはエラーを返すと思われるので、それを開発者に伝えるなにか手段がほしいです。

BGMの音量が変更できない場合がある

BGMアセットを再生する前に、BGMの全体音量を0に設定すると、その後音量を上げても音が鳴りません。
音量を0にする前に一度0より高く設定したり、BGMを再生してから音量を0にした場合は正常に音量の変更が行なえます。
BGMではなく効果音アセットの方は初めに音量を0にしても正常に再生されます。

環境

akashic-engine: 3.4.1
akashic-sandbox: 0.17.47
akashic-cli: 2.15.66
実行コマンド: akashic serve --target-service nicolive および akashic-sandbox
ブラウザ: Google Chrome 102.0.5005.63 Firefox 100.0.2

再現コード

音が鳴らないコード

scene.onLoad.add(() => {
    const musicAsset = scene.asset.getAudioById("bgm");

    g.game.audio.music.volume = 0;
    musicAsset.play();

    scene.onPointDownCapture.add(() => {
        if (g.game.audio.music.volume < 0.5)
            g.game.audio.music.volume += 0.1;
    });
});

音が鳴るコード

scene.onLoad.add(() => {
    const musicAsset = scene.asset.getAudioById("bgm");

    g.game.audio.music.volume = 1;
    g.game.audio.music.volume = 0;
    musicAsset.play();

    scene.onPointDownCapture.add(() => {
        if (g.game.audio.music.volume < 0.5)
            g.game.audio.music.volume += 0.1;
    });
});

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/deploy_docs.yml
  • actions/setup-node v4
  • actions/checkout v4
  • actions/checkout v4
  • actions/checkout v4
  • peaceiris/actions-gh-pages v4
.github/workflows/reftest.yml
  • actions/setup-node v4
  • actions/checkout v4
  • actions/checkout v4
  • actions/upload-artifact v4
.github/workflows/release.yml
  • actions/checkout v4
  • actions/setup-node v4
  • akashic-games/action-release v2
.github/workflows/test.yml
  • actions/checkout v4
  • actions/setup-node v4
npm
package.json
  • @akashic/game-configuration ~2.2.0
  • @akashic/pdi-types ^1.13.0
  • @akashic/playlog ~3.3.0
  • @akashic/trigger ~2.1.0
  • @akashic/eslint-config 2.0.0
  • @akashic/pdi-common-impl ^1.4.0
  • @types/jest ^29.0.0
  • @typescript-eslint/eslint-plugin ^6.7.5
  • eslint ^8.51.0
  • eslint-config-prettier ^9.0.0
  • eslint-plugin-import ^2.28.1
  • eslint-plugin-jest ^27.4.2
  • eslint-plugin-prettier ^5.0.1
  • jest ^29.0.0
  • prettier ^3.0.3
  • rimraf ^5.0.0
  • rollup ^4.0.0
  • rollup-plugin-commonjs ^10.1.0
  • rollup-plugin-minification ^0.2.0
  • rollup-plugin-node-resolve ^5.2.0
  • textlint ^14.0.0
  • textlint-rule-max-ten ^5.0.0
  • textlint-rule-no-mix-dearu-desumasu ^6.0.0
  • textlint-rule-prh ^6.0.0
  • ts-jest ^29.0.0
  • typedoc ^0.25.0
  • typescript ^5.0.0

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.