質問するログイン新規登録
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

意見交換

7回答

999閲覧

JavaScriptでのゲーム開発がエグイ

for_special

総合スコア5

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2025/07/13 20:02

編集2025/07/13 20:09

0

1

WebSocketを使ったゲーム開発をしています

複数のプレイヤーとマップ上に100体のモブがリアルタイムで動くようにしています。
そこで問題が発生しています。

全てのプレイヤーとモブがリアルタイムにgetBoundingClientRect()を使い座標を算出しながら衝突判定を行い動かしています。
getBoundingClientRect()を使うとDOMをリフローすることから相当の負担がかかるようです
その処理を毎秒100体以上が並列して動かすということから、メモリリークというのか?
まともに動かせない状態になります。

そしてJSの問題というかブラウザ側の制約なのか、
setIntervalやsetTimeout、requestAnimationFrameを実行中に別タブを表示すると、
キューがため込まれる仕様なのか、
非アクティブにしてから1時間後にタブを戻すと一気にキューが解放されて凄惨な状態になり最悪PCがフリーズする事象が発生します

JSでゲーム開発は無謀なのでしょうか?

WebWorkerだの色々試しても結果変わらず。
リアルタイムであることとgetBoundingClientRect()は絶対に外せないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答7

#1

maisumakun

総合スコア146717

投稿2025/07/13 23:41

getBoundingClientRect()は絶対に外せないです。

えっと、「座標管理を自前にして、都度DOMにアクセスせずに済ませる」という選択肢はどのような理由があって選択できないのでしょうか。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

maisumakun

総合スコア146717

投稿2025/07/13 23:43

そもそも論として、リアルタイムで大量のものを表示しなければならないゲームの場合、DOMではなくWebGLで描画するほうが向いているかもしれない、なんてことも考えました。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

yambejp

総合スコア118037

投稿2025/07/14 00:22

編集2025/07/14 03:08

getBoundingClientRectで座標を計算するのではなく、座標を利用してオブジェクトを描画するだけでだいぶ軽くなるのでは?DOMよりは描画が確定しているcanvasやSVGの方が楽かもしれません。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

satoshih

総合スコア873

投稿2025/07/14 02:26

slither.io や agar.io みたいなイメージでしょうか?
これらは canvasを利用しているようですね

ゲームの内容によっては衝突の可能性のあるものに限って読み込むなど限定すれば軽くできるかも?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

yambejp

総合スコア118037

投稿2025/07/14 09:13

画面イメージをアップできませんか?
なにをしたいか全く伝わってきていません

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

u2025

総合スコア59

投稿2025/07/15 01:04

javascriptではなくてもそんなことしてたらそれなりのスペックが求められそうだと思いました。
ゲーム開発って知識を活用しないならそういうものなのでは?

なにをしたいか全く伝わってきていません

このコメントは私は見てて不快ですね。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#7

for_special

総合スコア5

投稿2025/07/25 19:19

ゲーム開発者のノウハウに屈服しました
通常であれば成り立たない負荷処理をなんとかして成り立たせているのだと痛感しました
ありがとうございます

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問