自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
星をみるねこ
記事: 12
登録日時: 9年前
連絡を取る:

自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#1

投稿記事 by 星をみるねこ » 8年前

プレイ時間が伸びると大きい画像が読み込めない不具合に対しての対策を教えて頂きたいとおもいます。

私はSDL2.0でゲームを作っている素人の 星をみるねこ と申します。
制作中のゲームを長時間起動していると、背景画像など4096ドットサイズ以上のモノから表示されないという不具合が発生しました。
この不具合は、PC環境により発生するまでの時間が違うことが解っています。
最短でプレイ開始から約1時間、最長で6時間以上です。

はっきりとした原因は分かりませんが、メモリが問題ではないかと考えております。
SDL1.2で作っていた時の使用メモリは少なかったのですが、同じ内容のソフトをSDL2.0で作り始めてから使用メモリは劇的に上昇したという違いがあったからです。

以前にタスクマネージャーで、SDL1.2と2.0バージョンにメモリ(プライベートワーキングセット)の使用量が違うのか調べました。

起動直後で調査
SDL1.2の場合 246,864k
SDL2.0の場合 833,940k
この値はマップを切り替えるなど画像をロードするたびに増えます。

もちろん使用メモリの増大の一番の原因は、私自身のプログラム技量不足にあると考えております。




この問題に対応するために試行錯誤を繰り返しましたが、どうにもうまくいきません。
とても単純な原因がありそうですが、勉強不足で分からないというのが正直なところです。

ゲームを再起動するとまた問題なく動作するようになるため「メモリの読み込みと解放」がキーだとは思うのですが。


なので、改めて。
プレイ時間が伸びると大きい画像が読み込めない不具合に詳しいお方が居ましたら、教えて頂きたく思います。

ちなみに、私の環境はSDL&Microsoft Visual Studio .NET 2003のC++です。

参考資料として、制作中のゲームのPVと素人フリーソースも含めたDLリンクを記入しておきます。
体験版DL:http://yahoo.jp/box/Pv6Do7
PVニコニコ:http://nico.ms/sm25914892
PVようつべ(上のと同じです):

よろしくお願いします。

星をみるねこ
記事: 12
登録日時: 9年前
連絡を取る:

Re: 自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#2

投稿記事 by 星をみるねこ » 8年前

上記の体験版DLが最新版ではありませんでした。お手数ですが最新版はこちらになります。失礼しました。
体験版DL:http://yahoo.jp/box/g9BRVE

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#3

投稿記事 by softya(ソフト屋) » 8年前

SDLには詳しくないですが、ソースを見る限りSDL_FreeSurface()が少ないと思われます。ちゃんと画像リソースの解放は行われていますか?
よく分かっていないので勘違いならすいません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

星をみるねこ
記事: 12
登録日時: 9年前
連絡を取る:

Re: 自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#4

投稿記事 by 星をみるねこ » 8年前

softya様、ありがとうございます。長年作っているのでうろ覚えですが、画像リソースの解放はゲームを閉じるときにしか行っていない可能性が高いです。
この部分をあたってみようと思います。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#5

投稿記事 by softya(ソフト屋) » 8年前

> 画像リソースの解放はゲームを閉じるときにしか行っていない可能性が高いです。

そうだとすれば、SDLも画像リソースの解放は自動では行われないと思いますので、ロードで画像リソースが累積していてメモリか管理リソースが圧迫されて足らない可能性が高いです。
読み込みのエラーも成功前提でチェックしていない気がしますが如何でしょうか?
表示されない画像は読み込みエラーが出ていると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

星をみるねこ
記事: 12
登録日時: 9年前
連絡を取る:

Re: 自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#6

投稿記事 by 星をみるねこ » 8年前

ありがとうございます。
そうですね、読み込みのエラーも成功前提でチェックしていませんでした。
起動直後はメモリがあるので問題ないのが、途中からメモリが圧迫されて読めなくなっているようです。
新しい画像を読み込む前に開放することで、この不具合の発生率が減るか試してみようと思います。

星をみるねこ
記事: 12
登録日時: 9年前
連絡を取る:

Re: 自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#7

投稿記事 by 星をみるねこ » 8年前

バグチェックはまだできていませんが、新しい画像を読み込む前に開放することでメモリの圧迫が改善されたことを確認しました。
勉強不足のまま作っていたため根本的なミスをしていました。
softya様、どうもありがとうございました。

星をみるねこ
記事: 12
登録日時: 9年前
連絡を取る:

Re: 自作ゲームで、プレイ時間が伸びると大きい画像が表示されなくなる不具合に対しての対策

#8

投稿記事 by 星をみるねこ » 8年前

具体的には、背景画像を読み込む直前に
SDL_DestroyTexture(enkei);
を追加し

マップ画像を読み込む直前に
ImgDelete( pData->Layer[index].ImgName );
を追加しました。

どうもありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る