質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

解決済

2回答

2924閲覧

ゲームを作る上での重い処理について

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

1グッド

0クリップ

投稿2021/07/23 14:55

編集2021/07/23 17:31

#ゲームプログラムで処理が重くなるから書かないほうがいいものが知りたいです。

C、C++でゲーム開発の勉強中です。言い回しが違ったり、わかりにくいところがあったら申し訳ありません。

先日横スクロールゲームのマップを実装したく、プレイヤーが右に動いたら表示している障害物を左に動かす(背景は固定)。という処理をするプログラムを書きました。実行してみると描画がカクつき処理が重く感じました。
DirectXを使用しています。

コードは以下の通りです。

c

1// 以下player.cppの処理 2// 例として右方向の移動処理のみ置いておきます 3// プレイヤーのx座標は固定で、障害物の移動により動いてるように見せようと考えました。 4// FIELD_SPEED_Xは適当な値で定数定義しています。 5void Update(){ 6 if (GetKeyPress(VK_D)) { // キーボードDを押したら 7 AddFieldPos(-FIELD_SPEED_X); 8 } 9}

c

1// 以下field.cppの処理 2// 障害物は3つで構造体になっている。 3// fieldPosに表示するx座標とy座標を入れる 4// 初期化処理はプログラム実行時一度のみ。あとはプレイヤーが移動したときに移動させる。 5 6struct Field{ 7 XMFLOAT2 fieldPos; 8}; 9 10Field g_field[3]; 11 12// 障害物の座標を動かす関数。 13void AddFieldPos(float add) { 14 for (int i = 0; i < 3; i++) { 15 g_field[i].fieldPos.x += add; 16 } 17}

移動の度に、AddFieldPosの中でループで回しているから重かったのかなと思いましたがどうでしょうか?ループが原因ですか?

#最初に書きました通り、ゲームプログラムすべてに共通して処理が重くなるから書かないほうがいいものを教えていただきたいです。
(計算が多いとダメとかこの関数は重いとか...)また、そもそもC、C++での重い処理も分からないので、こちらも教えていただきたいです。

回答よろしくお願いいたします。

退会済みユーザー👍を押しています

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

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

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

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

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

jimbe

2021/07/23 15:36

これは何というOS用でどのようなライブラリやフレームワークを用いているプログラムなのでしょうか。 > 処理が重く感じた とのことですが、それはその同じモノを使って同様の処理をしている(はずの)他の方の作のゲームはもっと早いのでしょうか。その場合具体的にどれほどの差があるのでしょう。
退会済みユーザー

退会済みユーザー

2021/07/23 15:59

DirectXを使ったものになるので、OSとしてはWindowsです。 同じ見た目の処理であれば、スーパーマリオブラザーズが近いです。マリオでは描画にカクつきを感じることがありません。それに対し私のプログラムではマリオのようになめらかに動く時もあればコンマ数秒遅れて描画される時もあるような感じでした
jimbe

2021/07/23 16:08

ご質問のタグに DirectX 等を入れられてみては如何でしょうか。
退会済みユーザー

退会済みユーザー

2021/07/23 16:11

ありがとうございます。タグ追加致しました。
guest

回答2

0

ベストアンサー

これを見る限り、提示されているコードで処理が遅くなる印象はないです。
それ以外の問題の可能性ですね。

提供ライブラリに問題があるか、もしくは使い方に問題があるか、でしょう。

強いて言うならば、提供ライブラリの使い方をよく理解してからプログラムを作るということになります。

または、
すなわち1秒間に60回繰り返している処理内で重い処理、
・画像のロードをしている
・間違えてかなり大きすぎる画像を多く表示

ですかね。
他にもいろいろありそうですが、長くなるし具体的に説明しているとかなり長文になるので割愛させて頂きますね。

対処法:

1つ表示して動かす、うまくいけば2つ表示して動かす、次は3つ目・・・
という感じで順を追って丁寧にやっていけば、ここで聞かずとも解決できるかもしれません。

投稿2021/07/23 16:23

編集2021/07/26 07:32
loppta

総合スコア35

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

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

退会済みユーザー

退会済みユーザー

2021/07/23 17:19

>強いて言うならば、提供ライブラリの使い方をよく理解してからプログラムを作るということになります。 そもそもwindowsの標準の関数があまり理解できていないので、理解を深めようと思います。 >・画像のロードをしている >・間違えてかなり大きすぎる画像を多く表示 画像のロードは行っています。かなり大きすぎる画像とありますが、どのくらいのものがそうでしょか?
loppta

2021/07/23 17:57 編集

Windows標準の関数のことではなく、ゲームライブラリです。 描画系(グラフィック表示)などは、遅いものがあり、ゲームに不向きの描画もあります。 もし、標準のものならば、使い勝手が悪く調べるのも大変なので、 DXライブラリ や OpenSiv3D などのC言語系のライブラリがおすすめです。 google検索してみてください。この2つは日本では人気のあるC言語系ライブラリです。 別言語になりますが、例えば、あるパイソン用のゲームライブラリだと描画が遅すぎて仕様だと分かり使うのをすぐに止めたりもしました。どうしようもないです。 ライブラリによっては説明サイトが分かりにくい、使いにくい、重くてしょうがない、などもあります。 ソースコードを全部載せられたらいかがでしょうか? 提示されているソースコードの情報がかなり少ないので、判断がかなり難しいです。 処理が重い多くの場合、描画のプログラムに問題が多いです。 描画にかかわるコードもこちらにも提示されたらいかがでしょうか? 提示されているプログラムは短すぎて、とりたてて悪いとかそんなのはありません。 >・画像のロードをしている >・間違えてかなり大きすぎる画像を多く表示 ↑これに関しては、ロードが悪いのではなく、その前の文章にかかっているのでもう一度落ち着いてよく読んでください。 ゲームループ内でのロードが駄目ということです。同じファイルのロードを繰り返す上に処理が重いからです。 描画そのものを理解していない可能性がありますので、 とりあえず、 1つ表示して動かす>2つ表示して動かす>2つ表示して動かす これで動きがぎこちなくないように挑戦してみてください。 そのコード全部があればもっと的確なコメントを述べることができます。
退会済みユーザー

退会済みユーザー

2021/07/23 17:57

標準の物を分かりやすく学生が使いやすいように学校が作ってくれたものを使用して描画しています。 学校で作られたものなので、ネット上に挙げることが難しいです。
退会済みユーザー

退会済みユーザー

2021/07/23 18:01

描画の部分を見直してみようと思います。ありがとうございました。
loppta

2021/07/23 18:05

あげてはダメという事をはじめに言われなかったら、法的には何の問題もないですよ。 使いやすいように、と書かれていますが、多分使いにくいサンプルかと思います。3つの絵を表示するだけのプログラムなんでわざわざこちらに書くまでもないものです。 学校のサンプルは、学校によってはかなり分かりにくいものもありますね。複数校のサンプルは見たことがあります。 OpenSiv3D か DXライブラリ (C言語系ライブラリ)を調べて、同じものを作ってみたらどうでしょうか? 簡単にできてしまう事かと思います。 作りやすいプログラムの勉強にもなりますし、おすすめです。
loppta

2021/07/23 18:09

提供されているサンプルに問題があったり、とか学校でもよくあります。 勉強用なので取りあえず的なものもあり、注意が必要です。 先生も忙しいですから、突貫工事的にサンプルを作っている場合もあります。
thkana

2021/07/23 22:03

> あげてはダメという事をはじめに言われなかったら、法的には何の問題もないですよ。 本当ですか? 私は、著作権については自動的に発生して配布などに制限がかかるものと理解していますがちがうのですか?
loppta

2021/07/24 04:31

著作権に関しては、確実に分かって確実にエビデンスベースで証明できる場合はそうなりますが、実際そんなことは無理です。 そのソースコード元を本当に本人が作っているかも不明ですし(どこかのサンプルを改変して配布している例もあり)、それを公開することにより不利益(客観的な利益ベースでの考慮)を与えるか? など、そんなに単純ではないです。 という形で法的に裁判までも考えた場合、実質的には問題ないです。 もし何か言われたとしてもそれの正当性も怪しいところです。 この辺は弁護士関係の方が詳しいでしょうね 単純に イハンダー! とはならないわけです。
loppta

2021/07/24 04:35

学校のサンプルコードはちょろちょろ目にしますので、上げてもらった方が閲覧者としても楽しいです。 あーまた、古いDirectX9のC言語ぽいコードだ~とかDXライブラリで鉄板だ~とか。 にやにやしながら楽しんで見れますね
thkana

2021/07/24 04:39

> 法的に裁判までも考えた場合、実質的には問題ないです。 裁判の勝ち負けでは負けないだろう、ということですね。 その線でいうと、「ダメとはじめにいわれた」としてもなんの効果もないし、つまるところ「やったもん勝ち」ということかしら。まぁオフトピなのでこの辺で。
loppta

2021/07/24 05:01

まあ迷惑をかけなくて他の人に勉強になるなら、貢献できるからいいかな、と。 さすがに社外秘の市販ゲームのコードに関しては裁判関係なしでまずいかとは思います。 いろんな学校のサンプルは見ていて楽しいです。 逆に、学校側から上げたらだめとか言われたら、まあまずい事情があるのかな? にやにやしながら考えて楽しみます。 普通はスルーですからね。
guest

0

まず、速い、遅い、重い、カクつく、みたいな感覚的な言葉を使うのをやめましょう。遅いと思うなら、まずパフォーマンス計測を行い、ケース毎にどの箇所でどの程度時間を掛かるかを『数値』で分析してください。

ゲーム開発で必要となる プロファイリングの基本

遅くなる原因などというものは様々で、それに応じて対処法も異なります。
(計算量の多さ、メモリ転送量、ネットワーク遅延、ディスクIO etc)

投稿2021/07/23 15:58

編集2021/07/23 16:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/07/23 16:07

ありがとうございます。無知なもので大変勉強になります。 パフォーマンス計測試してみます
退会済みユーザー

退会済みユーザー

2021/07/23 17:03

パフォーマンス計測試してみました。 cpu使用率はほぼゼロでした。 排他サンプルが一番多いものはwin32u.dllでした。 描画が遅れて見えるだけで処理が重いわけではないということでしょうか?
退会済みユーザー

退会済みユーザー

2021/07/23 17:43 編集

> 描画が遅れて見えるだけで処理が重いわけではないということでしょうか? それを調べるために計測するんでしょう。 速度に問題無いなら、只のティアリングかもしれませんし。 性能改善は目標設定と現状把握が重要で、(この処理で〇msec掛かってるが、〇msec以下にしたい、最低〇FPS出したい等)何も考えずに何となくやっても意味ないです。
退会済みユーザー

退会済みユーザー

2021/07/23 17:42

そうですね。自分の考えに確信が持てず確認致しました。 ティアリングであると仮定し、解消する方法を探してみます。
退会済みユーザー

退会済みユーザー

2021/07/23 17:46

https://teratail.com/legal > 第7条(禁止事項) > 複数のユーザーIDを1人で保有する行為
退会済みユーザー

退会済みユーザー

2021/07/23 17:54

申し訳ございません。スマホでrom専してたときのアカウントで送ってしまいました。上アカウントは先ほど退会しました。こちらのアカウントも責任をとるため退会いたします。こちらのサイトにはもう戻りません。不快にさせてしまい申し訳ございません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問