ページ 11

プログラムが重い原因heno

Posted: 2010年8月25日(水) 19:37
by ネス
皆さん、こんばんは。

プログラムを実行する際、動作の重さが気になっています。

・最初、起動するまでに時間が妙にかかる。場合によっては(応答なし)の表示がされてしまう。
・一つ目に関係あるかもしれませんが、ウェイトキーで何かキー入力しても押したことにならず、2度、3度押さねばならない場合がある。
・メモリに読み込んだ音楽ファイルが途中でブツブツ途切れることがある。(PCで色んなソフトを動かしている時など)


それで調べてみたのですが、結局、ProcessMessage処理がうまくいっていないのかなと。
実際、プロセスメッセージの処理が効果的なものなのか、今ひとつよく自分でも分かっていない気がします。
確かに実行中にウィンドウの×印を押すと、そこでプログラムは終了してくれますが、他のプログラムとの関係でどこまでスムーズになっているのかは、今の自分のやり方では疑問も多いです。


if ( ProcessMessage ( ) != 0 )
{
DxLib_End ( ) ;
}

Re:プログラムが重い原因heno

Posted: 2010年8月25日(水) 19:41
by ネス
すいません。記事を書いている途中に間違って送信してしまったようです。
記事のタイトルは「プログラムが重い原因への対処法」とするつもりでした。


例えばノベルゲームを作る場合、上記のコードを関数化して、ウェイトキーでページをめくる際、置いているだけなのですが、これで効果的な使い方だと言えるのでしょうか?

Re:プログラムが重い原因heno

Posted: 2010年8月25日(水) 20:07
by softya
前回のに貼ってあるコードだとすると、WK()のたびにLoadSoundMemしているのは問題。
一度LoadSoundMemして、PlaySoundMem()するだけで良いです。
ほかの int chaim1 = LoadSoundMem ( "se/chaim1.wav" ) ;とかは先読みしているのになぜでしょう?
無駄にメモリが消費されるので重くなる原因の可能性があります。

そういう意味では、FRAME() も同様。
int waku1 = LoadGraph ( "zai/waku1.png" ) ;
は起動直後だけで良いです。

あとは実物を動かしてみないとなんとも・・・。

余計なお節介かも知れませんが、ADVを作るならこちらも参考に。
http://karetta.jp/book-cover/game-programming
解説は未完成ですが、ノベルゲームの完成品はソースコードと共にダウンロード可能です。
http://www.usamimi.info/~guiprog/game/
「ゲームプログラム及びソース」の所の「完成したノベルゲーム」でダウンロード出来ます。

Re:プログラムが重い原因heno

Posted: 2010年8月25日(水) 21:17
by ネス
softyaさん、ありがとうございます。
関数や変数の有効範囲について、まだ不勉強で、「なるほど!!」と気付かされた反面、いざそうしてみると、まだちょっと考える部分ができて、整理してみる時間が必要なようです。


>余計なお節介かも知れませんが
とんでもありません。コードにも眼を通してくださって、ありがたいことこの上ありません。
また、紹介URLも、まさに私がやろうとしていることそのまんまで、これは大いに活かせそうです。
(しかもDXライブラリ!!)


こちらの方こそ、どうも的を得ない質問をしているのに、このようにアドバイスを頂けるのは本当に助かります。
またお手すきの際は、忌憚なくご指摘ください。

Re:プログラムが重い原因heno

Posted: 2010年8月25日(水) 22:41
by softya
あっ、補足として変数宣言はグローバルにしてくださいね。
int waku1 = LoadGraph ( "zai/waku1.png" ) ;
int page1 = LoadSoundMem ( "se/page1.mp3" ) ;
は各関数から外して
int waku1 ;
int page1 ;
と変数宣言はWinMainの外というかプログラムの最初においてください。
こうしないと変数のスコープで問題が出て、WinMainや各関数から参照できません。

で、WinMainで
waku1 = LoadGraph ( "zai/waku1.png" ) ;
page1 = LoadSoundMem ( "se/page1.mp3" ) ;
とだけしてください。
これでFRAME()やWK ()からロードしたデータが利用可能になります。

Re:プログラムが重い原因heno

Posted: 2010年8月25日(水) 22:51
by ネス
softyaさん、ありがとうございます。
直前のレス、今見たので、まだ未修正の部分あると思いますが、
とりあえず実行ファイル&ソースをアップしてみました。

http://lordplace.web.fc2.com/code.html

前回の質問で、ソースを載せた場所と同じです。
いちばん上にリンクがあります。(ページ記載のソースはそのままですが)

>あとは実物を動かしてみないとなんとも・・・。
とありましたので、一応、のっけておきます。

私の環境では、やっぱり最初の起動で時間がかかるのと、あと、さくさく途中まで進め過ぎると、あとで一気に処理オチみたいなので、音声など途切れます。


本当はアップローダを使いたかったのですが、どうもサイズが大きすぎるとかで、結局ホムペ用のサーバに。
アクセスアップとか、アフィリエイトとか、そういう方向性の類のページじゃないんで、その点では御心配いりません。ただの物置きページです。

Re:プログラムが重い原因heno

Posted: 2010年8月26日(木) 01:05
by softya
こちらの環境ではまったく問題ありません。
ただ、メモリは300MBほど消費しているので実行環境次第では厳しいかもりません。
メモリの消費原因はサウンドデータと
int waku1 = LoadGraph ( "zai/waku1.png" ) ;
で何度も同じデータを読み込んでいることです。

Re:プログラムが重い原因heno

Posted: 2010年8月26日(木) 14:35
by ネス
>こちらの環境ではまったく問題ありません。
そうですか、それを聞いてちょっと安心しました。

>実行環境次第では厳しいかもりません。
RAM512MBとあります。一応VISTAプリインストールでしたが、だからHOME BASICだったのかもorz


とはいえ、毎回の画像読み込みを修正したことで、私の環境でも起動以外は一気にスムーズになりました。
メモリへの読み込みの負荷とか深く考えていなかったので、常識ではあるのかもしれませんが、自分で考えているだけではまず思いつかなかったです。

参考URLを目次と少し読みました。スクリプトの用意とか、未知で面白そうです。作り方も詳しく載っているのでこれは本当に助かります。

今回の質問では、本当に得るものが多かったです。本当に助かりました。ありがとうございました。

Re:プログラムが重い原因heno

Posted: 2010年8月26日(木) 14:35
by ネス
解決ですっ!!

Re:プログラムが重い原因heno

Posted: 2010年8月26日(木) 15:37
by softya
私のPCは4GBありますので300MB程度は平気ですが、RAM512MBだとOSや常駐ソフト分を引くと最大200MBぐらいまでに抑えておかないと安定しないと思いますよ。メモリはタスクマネージャで計測できますので必ず確認してください。
あとサウンドメモリが大半ですので、PlaySoundMem()とPlayMusic()関数の使い分けとかを検討してみてください。

Re:プログラムが重い原因heno

Posted: 2010年8月26日(木) 20:52
by ネス
>RAM512MBだとOSや常駐ソフト分を引くと最大200MBぐらいまでに抑えて
そういうものなのですか。

>メモリはタスクマネージャで計測できますので必ず確認してください。
早速やってみます。

4GBですか~サクサクッという音がこっちにまで聞こえてきますorz
ただチラシを見るとPCのメモリは今のモデルって4GBが標準てorz
自分のは2007年当時は最新のモデルと呼ばれていたのですが、時期的にもメモリ少なめだし、粗悪品と呼べるぐらいだったかもorz
テレビ通販とかよく見ないとダメですね。

Re:プログラムが重い原因heno

Posted: 2010年8月26日(木) 22:42
by h2so5
横から失礼しますが...

VISTAでRAM512MBってゲームの作成環境としては結構きつくないですか?

私のパソコン(Vista Home Basic 2GB RAM)だと作業用にいくつかソフトを起動していると
グラフィックソフトでもないのにすぐに600MB超えてしまいます。

それとも私のパソコンがおかしいのかもしれませんが...UMAだからかな?