メモリに画像や音楽を読み込むときの扱い
メモリに画像や音楽を読み込むときの扱い
現在はexeを実行したときにまとめて、ゲーム中に使用する全ての画像や音楽を読み込んでいますが、
ファイルによっては、絶対このシーンじゃ使わないよな…と思う音楽や画像もあります。
そこで気になるのですが、画像や音楽は使用するシーンでのみメモリに読み込むようにし、使用しないシーンになったら、そのつどメモリから削除するほうがいいのでしょうか?
恐らく読み込む合計量によるのではないだろうかと考えていますが、
だとしたら何メガバイト以上になるようなら、気をつけたほうがいい。などおおまかな基準があればと思います。
わかるかたがいましたらよろしくお願いします。
ファイルによっては、絶対このシーンじゃ使わないよな…と思う音楽や画像もあります。
そこで気になるのですが、画像や音楽は使用するシーンでのみメモリに読み込むようにし、使用しないシーンになったら、そのつどメモリから削除するほうがいいのでしょうか?
恐らく読み込む合計量によるのではないだろうかと考えていますが、
だとしたら何メガバイト以上になるようなら、気をつけたほうがいい。などおおまかな基準があればと思います。
わかるかたがいましたらよろしくお願いします。
Re:メモリに画像や音楽を読み込むときの扱い
>>ASさん
ケースバイケースな感じがします。
最初に読み込む場合や、その都度読み込む場合、両方にメリット・デメリットがあります。
なので、最初に全部読みこむのが駄目ということでもないので、
今のままで大丈夫なら最初に読み込む形でもいいと思います。
読み込みに時間が掛かるから少しでも抑えたい。
メモリの容量を使いすぎてるから削りたいなど、
気になった時にすぐ仕様変更できるようなプログラムにしておくものいいかもしれません。
申し訳ないですが、私は何メガバイト以上とかまでは解らないです。
ただ、PC環境ならそこまで気にする必要もないように感じます(読み込みまくるなら別ですが・・・)
ケースバイケースな感じがします。
最初に読み込む場合や、その都度読み込む場合、両方にメリット・デメリットがあります。
なので、最初に全部読みこむのが駄目ということでもないので、
今のままで大丈夫なら最初に読み込む形でもいいと思います。
読み込みに時間が掛かるから少しでも抑えたい。
メモリの容量を使いすぎてるから削りたいなど、
気になった時にすぐ仕様変更できるようなプログラムにしておくものいいかもしれません。
申し訳ないですが、私は何メガバイト以上とかまでは解らないです。
ただ、PC環境ならそこまで気にする必要もないように感じます(読み込みまくるなら別ですが・・・)
Re:メモリに画像や音楽を読み込むときの扱い
たいてい市販されているゲームでは
普及してそうなスペックを参考にして
作られてますね
個人での開発だったら自分の開発マシンよりちょっと低めの
スペックを想定してみるのが無難だと思います
普及してそうなスペックを参考にして
作られてますね
個人での開発だったら自分の開発マシンよりちょっと低めの
スペックを想定してみるのが無難だと思います
Re:メモリに画像や音楽を読み込むときの扱い
お二方ありがとうございます。
今のところ、言うほど膨大な量のファイルを使用する予定もなく、一般的なゲーム程度かと思いますが、一応把握はしておくべきだろうと思いまして…
例えば私のパソコンですとメモリは512MBです。
といっても、この容量を全てゲームに回せるわけでもないと思います。(パソコンさんは他にももっと沢山やることあるでしょうから…)
パソコン自体の知識はあまりないのですが、私の昔使っていたパソコンですと、メモリは64MBと少な目です。
となると容量の重いMP3などを起動時に全て読み込んで、64MBのほとんどを占領しては大丈夫なのか不安にもなります。
>個人での開発だったら自分の開発マシンよりちょっと低めの
>スペックを想定してみるのが無難だと思います
ということですが、ちょっと低めとは具体的にはどのぐらい(全メモリの何%とか何MBとか)なのでしょうか?
それと改めてDXライブラリのホームページにいってLoadGraphやLoadSoundMemのメモリに読み込む系を見ると、
エラー発生時は-1を返すと書いてありますが、これはまさにメモリが足りなくなったときと考えて大丈夫でしょうか?
今のところ、言うほど膨大な量のファイルを使用する予定もなく、一般的なゲーム程度かと思いますが、一応把握はしておくべきだろうと思いまして…
例えば私のパソコンですとメモリは512MBです。
といっても、この容量を全てゲームに回せるわけでもないと思います。(パソコンさんは他にももっと沢山やることあるでしょうから…)
パソコン自体の知識はあまりないのですが、私の昔使っていたパソコンですと、メモリは64MBと少な目です。
となると容量の重いMP3などを起動時に全て読み込んで、64MBのほとんどを占領しては大丈夫なのか不安にもなります。
>個人での開発だったら自分の開発マシンよりちょっと低めの
>スペックを想定してみるのが無難だと思います
ということですが、ちょっと低めとは具体的にはどのぐらい(全メモリの何%とか何MBとか)なのでしょうか?
それと改めてDXライブラリのホームページにいってLoadGraphやLoadSoundMemのメモリに読み込む系を見ると、
エラー発生時は-1を返すと書いてありますが、これはまさにメモリが足りなくなったときと考えて大丈夫でしょうか?
Re:メモリに画像や音楽を読み込むときの扱い
> となると容量の重いMP3などを起動時に全て読み込んで、64MBのほとんどを占領しては大丈夫なのか不安にもなります。
メモリ管理はOSのお仕事です。
メモリへの読み込みを行ったときに、メモリが不足していればハードディスク等にスワップされ、必要な時点でメモリに戻してくれます。
あまり神経質にならないほうがいいと思います。
不要であるとわかりきっているデータは削除しておくほうが望ましいとは思いますが。
メモリ管理はOSのお仕事です。
メモリへの読み込みを行ったときに、メモリが不足していればハードディスク等にスワップされ、必要な時点でメモリに戻してくれます。
あまり神経質にならないほうがいいと思います。
不要であるとわかりきっているデータは削除しておくほうが望ましいとは思いますが。
Re:メモリに画像や音楽を読み込むときの扱い
>ということですが、ちょっと低めとは具体的にはどのぐらい(全メモリの何%とか何MBとか)なのでしょうか?
正直、あなたのターゲット次第だと思います。
どのような目的でどのような環境で利用されるかを考えれば自ずとも分かるお思います。
たとえば、一般的家庭のPCを対象にした2Dシューティングゲームならターゲットのかたがたの大半は250MB以上はあるでしょうから、ゲームには150MBぐらいを上限にするとか。
あまり古い環境で起動されることがないと予想できるなら、たくさん使っちゃえばいいとおもいます。
ただ、スペックがたくても数GBとか数百MBを一括ロードしようとするのは時間がかかるのでよくないです。
当然ですがユーザーが待ちくたびれない程度にメモリへのロードを分散するのがいいとおもいます。
そういえば、某3Dゲームがシーン変わるごとに数分間ぐらいロードしないといけないのは正直まちくたびれますね。
正直、あなたのターゲット次第だと思います。
どのような目的でどのような環境で利用されるかを考えれば自ずとも分かるお思います。
たとえば、一般的家庭のPCを対象にした2Dシューティングゲームならターゲットのかたがたの大半は250MB以上はあるでしょうから、ゲームには150MBぐらいを上限にするとか。
あまり古い環境で起動されることがないと予想できるなら、たくさん使っちゃえばいいとおもいます。
ただ、スペックがたくても数GBとか数百MBを一括ロードしようとするのは時間がかかるのでよくないです。
当然ですがユーザーが待ちくたびれない程度にメモリへのロードを分散するのがいいとおもいます。
そういえば、某3Dゲームがシーン変わるごとに数分間ぐらいロードしないといけないのは正直まちくたびれますね。
Re:メモリに画像や音楽を読み込むときの扱い
普段これでもかとメモリ使いまくっている管理人ですこんにちは。
私は100メガ位ならおかまいなしにメモリ使うスタイルなのでいつも重いと言われます;
例えば、起動前の使用メモリが180Mで、PCに乗ってるメモリが256M、その状態で100M使う私のゲームを起動すると格段に遅くなります。
メモリがあふれ、HDDに仮想メモリを作ると話にならなくなってしまう場合が多いです。
私が公開している龍神録というゲームは60~70M前後、エアロビートというゲームは90M前後使います。
私が作るゲームはいつもある程度のスペックを要求するので、メモリはあまり気にしてません。
イイCPUが乗ってるならメモリも沢山あるだろうという安直な考えです。
エアロビートでは全てシーンごとに画像のロード、破棄を行っています。
少々ロードに時間はかかってしまいますが、そうしないといかに言っても無駄なメモリが増えるので。
ただ最初は特に神経質にメモリのことを考えなくても大丈夫だと思います。
目安にするなら作っているゲームがCPUパワーを必要としないなら20M位までに、ハイスペック対象なら100M位大丈夫だと思います。
ただし効率的で無駄が無いプログラムを書くことは常に頭に入れるべき事ではありますね。
私は100メガ位ならおかまいなしにメモリ使うスタイルなのでいつも重いと言われます;
例えば、起動前の使用メモリが180Mで、PCに乗ってるメモリが256M、その状態で100M使う私のゲームを起動すると格段に遅くなります。
メモリがあふれ、HDDに仮想メモリを作ると話にならなくなってしまう場合が多いです。
私が公開している龍神録というゲームは60~70M前後、エアロビートというゲームは90M前後使います。
私が作るゲームはいつもある程度のスペックを要求するので、メモリはあまり気にしてません。
イイCPUが乗ってるならメモリも沢山あるだろうという安直な考えです。
エアロビートでは全てシーンごとに画像のロード、破棄を行っています。
少々ロードに時間はかかってしまいますが、そうしないといかに言っても無駄なメモリが増えるので。
ただ最初は特に神経質にメモリのことを考えなくても大丈夫だと思います。
目安にするなら作っているゲームがCPUパワーを必要としないなら20M位までに、ハイスペック対象なら100M位大丈夫だと思います。
ただし効率的で無駄が無いプログラムを書くことは常に頭に入れるべき事ではありますね。
Re:メモリに画像や音楽を読み込むときの扱い
皆様ありがとうございます。
メモリが不足するとハードディスクにスワップ…そんなことがあるのですか!知らなかった…
ただそうすると遅くなってしまうようですが…
しかし、許されるであろう容量が思いのほか多くなんとかなりそうだと思いました。
あと、いくらかおおまかな容量を提示していただきましたが、これらの容量は画像や音楽だけに限らず、
プログラム内で使用する変数や構造体の容量も含んだものと考えていいでしょうか?
(変数だけで100MBとかは少なくとも私はありえませんが、確認をしたいので…)
メモリが不足するとハードディスクにスワップ…そんなことがあるのですか!知らなかった…
ただそうすると遅くなってしまうようですが…
しかし、許されるであろう容量が思いのほか多くなんとかなりそうだと思いました。
あと、いくらかおおまかな容量を提示していただきましたが、これらの容量は画像や音楽だけに限らず、
プログラム内で使用する変数や構造体の容量も含んだものと考えていいでしょうか?
(変数だけで100MBとかは少なくとも私はありえませんが、確認をしたいので…)
Re:メモリに画像や音楽を読み込むときの扱い
>メモリが不足するとハードディスクにスワップ…そんなことがあるのですか!知らなかった…
>ただそうすると遅くなってしまうようですが…
必要とするメモリ量が物理メモリ量を超えるとHDDの仮想メモリファイルにスワップされます。
これは、仮想記憶と言う機能の働きです。
http://ja.wikipedia.org/wiki/%E4%BB%AE% ... 8%E6%86%B6
何処のメモリがスワップされるかは使用頻度で決まりますので、自分のプログラムがスワップされるとは限りませんが、確実にシステム全体の動きは重くなります。
>あと、いくらかおおまかな容量を提示していただきましたが、これらの容量は画像や音楽だけに限らず、
>プログラム内で使用する変数や構造体の容量も含んだものと考えていいでしょうか?
>(変数だけで100MBとかは少なくとも私はありえませんが、確認をしたいので…)
プログラム(プログラムコード、グローバル変数領域、定数など)と動的割り当てをしたメモリの合計の話ですね。画像や音楽も動的割り当てしたメモリに読み込まれます。
>ただそうすると遅くなってしまうようですが…
必要とするメモリ量が物理メモリ量を超えるとHDDの仮想メモリファイルにスワップされます。
これは、仮想記憶と言う機能の働きです。
http://ja.wikipedia.org/wiki/%E4%BB%AE% ... 8%E6%86%B6
何処のメモリがスワップされるかは使用頻度で決まりますので、自分のプログラムがスワップされるとは限りませんが、確実にシステム全体の動きは重くなります。
>あと、いくらかおおまかな容量を提示していただきましたが、これらの容量は画像や音楽だけに限らず、
>プログラム内で使用する変数や構造体の容量も含んだものと考えていいでしょうか?
>(変数だけで100MBとかは少なくとも私はありえませんが、確認をしたいので…)
プログラム(プログラムコード、グローバル変数領域、定数など)と動的割り当てをしたメモリの合計の話ですね。画像や音楽も動的割り当てしたメモリに読み込まれます。
Re:メモリに画像や音楽を読み込むときの扱い
全て込みです。
タスクマネージャーのプロセスで確認出来ます。
目安は私の勝手な基準なのであてにしないで下さい。
100Mなら大丈夫ではと書きましたが、単純な2Dゲーとかで100Mは食いすぎだと思いますし、何を作るかによりますよね。
例えば100万円は大金ですかと聞かれたらイエスですが、「家の価格として」と言われたら少な過ぎるでしょう。逆に「食費です」と言われたら多すぎます。つまり何をするかによります。
使うお金は少ないに越したことはないわけで、いかに少ないお金で豊かな暮らしが出来るようにするかが頭の使い所って感じでしょうか。
後DXライブラリなら何も読み込まなくても初期化関数呼ぶだけで、ある程度メモリを食いますので、その辺も頭に入れておくとよいかと。
※そういえば、フリーゲームで、簡単な2Dゲームで600Mも食うのがありましたがあれはいかに言っても‥。
タスクマネージャーのプロセスで確認出来ます。
目安は私の勝手な基準なのであてにしないで下さい。
100Mなら大丈夫ではと書きましたが、単純な2Dゲーとかで100Mは食いすぎだと思いますし、何を作るかによりますよね。
例えば100万円は大金ですかと聞かれたらイエスですが、「家の価格として」と言われたら少な過ぎるでしょう。逆に「食費です」と言われたら多すぎます。つまり何をするかによります。
使うお金は少ないに越したことはないわけで、いかに少ないお金で豊かな暮らしが出来るようにするかが頭の使い所って感じでしょうか。
後DXライブラリなら何も読み込まなくても初期化関数呼ぶだけで、ある程度メモリを食いますので、その辺も頭に入れておくとよいかと。
※そういえば、フリーゲームで、簡単な2Dゲームで600Mも食うのがありましたがあれはいかに言っても‥。
Re:メモリに画像や音楽を読み込むときの扱い
softyaさん、管理人さんありがとうございます。
読み込みでどの程度気にするべきなのかが、かなり把握できました。
一発でそこそこ容量を食われるMP3は、最初から使用する音楽のみ読み込むつもりでしたし、
他にかなり容量を食うであろう動作は気をつける気ではいたので、
なんとか大丈夫そうだなと
実際のところ恐らく100MBなんて程遠い使用量になるのではと予想していますw
しかしながら、教えていただいたおかげで、安心してメモリ管理ができそうです。
2Dゲームで600MB…何にそんな使ったんでしょうか…(汗)
なにはともあれ、皆様ありがとうございました。
読み込みでどの程度気にするべきなのかが、かなり把握できました。
一発でそこそこ容量を食われるMP3は、最初から使用する音楽のみ読み込むつもりでしたし、
他にかなり容量を食うであろう動作は気をつける気ではいたので、
なんとか大丈夫そうだなと
実際のところ恐らく100MBなんて程遠い使用量になるのではと予想していますw
しかしながら、教えていただいたおかげで、安心してメモリ管理ができそうです。
2Dゲームで600MB…何にそんな使ったんでしょうか…(汗)
なにはともあれ、皆様ありがとうございました。