akashic-games / akashic-engine Goto Github PK
View Code? Open in Web Editor NEWThe core library of Akashic Engine
License: MIT License
The core library of Akashic Engine
License: MIT License
テストです。
エラーではなく警告を出すに留め、ゲームの続行を阻害しない挙動に直したいです。
いただいたご連絡曰く:
distanceBetweenAreas(p1: CommonArea, p2: CommonArea)
変数内でwidthおよびheightを引いてますが、本来は足すものと考えられます。
ご指摘のとおりに見える。不具合か。ゲーム開発者向けユーティリティだが、実際に利用するユーザがなく発覚してこなかった模様。
一般ユーザによる問い合わせ先がこちらでなかったらすみません。
掲題は大分かい摘んでいるので以下に詳細を記します。
推奨する対処方法があれば教えていただきたいです。
16.13.1
3.2.2
2.14.29
multi
akashic serve -s nicolive
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)
※/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);
};
.stop()
で再生を止めることで対処可能フレームワーク利用者による問い合わせ先がわからなかったためこちらにて失礼します.
game
パラメータを指定できない.game
パラメータを指定せず生成したカメラをg.Game
に設定しても動作しない.(getter
でもundefined
が返ってくる)const camera = new g.Camera2D({}); // 'game'パラメータは指定不可
g.game.focusingCamera = camera;
console.debug(g.game.focusingCamera); // 'undefined'
(akashic-games 以下の各リポジトリで同様です)
画像を示すエンティティで、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() メソッド を使用するしかなく、不便だと思います。
https://www.npmjs.com/package/@akashic/akashic-engine
(akashic-games/ 以下の他リポジトリも同様です)
現状エンジンユーザは akashic-engine にアセットの絶対パスを与える仕様ですが、akashic-engine がもともとの相対パスの情報を保持していないため、 require が正しく動作しないことがあります。具体的にはアセットが異なる基底パスを持っていた場合に問題が顕在化します。
akashic-games/akashic-tile#2 (comment)
g.Renderer の特定の矩形領域のみを透明に初期化する Renderer#clearRect()
を実装し、 akashic-tileで利用したいです。
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. (ゲームエンジンが)何を元にイベントフィルターを呼び出すかを判断しているのか。
/**
* アニメーション終了時に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();
}
Spriteを生成するときにsrcの範囲外を参照したときのエンティティの見た目がOSにより異なります。
例えばサイズが100x100の画像をsrcに指定し、srcWdithに1000を指定してSpriteを生成すると、
webkitでは、透明になります。
Chromium,Geckoでは、元画像幅が10分の1に圧縮され、残りの部分は透明になります。
各ブラウザ実装によって動作が変わるのは開発段階で気が付きにくいバグの原因になるので、対処して欲しいです。
WebGLはエラーを返すと思われるので、それを開発者に伝えるなにか手段がほしいです。
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;
});
});
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
@akashic/eslint-config
, @akashic/game-configuration
).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
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
DynamicAssetを利用すると外部サーバのリソースをURLを指定して利用できます。しかし、通信エラー等でダウンロードに失敗した場合、ゲームが続行不可能になります。この挙動は意図したものではないため修正します。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.