プログラムを途中で止めたり、また、再開したりする方法 – プログラミング – Home

プログラムを途中で止めたり、また、再開...
 
通知
すべてクリア

[解決済] プログラムを途中で止めたり、また、再開したりする方法

固定ページ 1 / 2

はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

初めて質問します。よろしくお願いします。
よくゲームソフトなどで、ゲームの途中、メニューの「一時停止」や「再生」でゲームを
ストップさせたり、続きをやったりすることが出来ると思いますが、あれはどういう風に
なっているのでしょうか。僕自身は、MFCを使って簡単なゲームみたいなものを作ろうと
思っているのですが、作っている途中で先に進まなくなってしまいました。
 ゲームはとても簡単なものです。画面上に一つ円を書いて、それを上下左右4方向にランダムに
ひたすら動かすようなものです。
 ずっとプログラムを動かしてて、プログラムを止めたいときにメニューの「一時停止」
で止めて、また続きを始める時は「再生」で動かし始めるような感じです。
 SetTimerを使うのかと思って、今、実際に作っているのですが、どなたか何か知ってたら
教えてください。よろしくお願いします。


引用未解決
トピックタグ
am
 am
(@am)
ゲスト
結合: 24年前
投稿: 13
 

> SetTimerを使うのかと思って、今、実際に作っているのですが、どなたか何か知ってたら
>教えてください。よろしくお願いします。

停止時点で KillTimer を呼んでタイマを破棄し、再開で SetTimer するという方法もあれば、
停止した時点でフラグを立てて、WM_TIMER を受け取る部分で そのフラグを見てタイマ処理を
するかどうかを判定する方法などがあります。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

amさん、早速のお返事、ありがとうございます。本当に、困っていたので助かりました。
やっぱり、よくゲームなどの「再生」「停止」なんかは、SetTimerやKillTimerを使っているんですね。
そこで、もう一つお伺いしたいことがあるんですが、KillTimerで止めてSetTimerでまた再生するということは、
たとえば、SetTimerでWindowsからWM_TIMERメッセージを0.001秒おきにもらって、OnTimerでそのメッセージを
受け取るということは、そのOnTimerの中に、繰り返し行うプログラムを書けばいいということでしょうか。
どなたか、また、よろしくお願いします。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 24年前
投稿: 48
 

> SetTimerでWindowsからWM_TIMERメッセージを0.001秒おきにもらって

SetTimerだと50msくらいが限界なんで1msでは割り込めませんね。
SetTimerやKillTimerとかでは無くSleepをかけたりしたほうがいいと思います。

あとマルチメディアタイマというのがありますが
あれを使うと極端に処理が重くなります。

> 画面上に一つ円を書いて、それを上下左右4方向にランダムに
> ひたすら動かすようなものです。

これなら不正確なタイマでも問題無いと思いますが...

あとOnTimerに繰り返しの処理を書くのではなくOnTimerでは分岐のみを行って
別の関数で処理をしたほうがいいと思います。

そうしないとOnTimerが危険な量のコードになると思いますよ。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

toruさん、お返事ありがとうございました。toruさんの言うように、50msあたりから処理速度があまり変わって
ないような気がしてましたが、そういうことだったんですね。
今、懸命にsleepをMSDNで調べているところです。うまく使えると言いと思います。

>そうしないとOnTimerが危険な量のコードになると思いますよ。

あまりにもVC++は分からないことだらけで今日新たに書籍を1冊購入してよんでたところですが、toruさんの言うよう
書籍の例では、他のメンバ関数でまとめてOnTimerで呼び出すようにしてました。確かに、僕が行ったようにすると
大変な量のコードがOnTimerに入ってしまいますよね。こんな基本的な質問にまで答えてくれたtoruさんに感謝し
します。
 まだまだ勉強しないといけないようですね。amさん、toruさん、今回はどうもありがとうございました。


返信引用
なると屋
 なると屋
(@なると屋)
ゲスト
結合: 23年前
投稿: 1
 

ゲームを作るんでしたらMFCよりDirectXを薦めます。
MFCはアプリケーションを作るのに向いていますが厳密な
リアルタイム操作(0.001msなど)は結構大変かと思います。
DirectXなら、最初からゲームのためのライブラリなので
DirectXの参考書が1冊あれば作れなくもないと思います。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

なると屋さん、お返事の方、大変ありがとうございました。
そうなんですか、やっぱりDirectXというのは、ゲームに向いているんですか。昨日、あたりから、うすうす
ひょっとしたらそうなのではないかと感じていました。本屋に行ってもゲーム関係だったらDirectXの方が
多いんですよね。でも、MFCの本をだいぶ読み込んで、MFCはゲーム作りにくそうだけどこうなったらがんばろうと
思ってたところなので、迷ってしまいます。
 そこで、もし、知っていたら教えていただきたいのですが、僕が作ろうとしているのは、実は、生物の
コンピュータシミュレーションみたいなものです。僕自身、まだ学生で、研究テーマがこれ関係のものになりました。
そこで、何でプログラムをしようかと思ったところで、MFCでやってみようかと思ったところです。はじめは
VBあたりでやろうかと思ったのですが、やっぱり速さを求めたら、Cがいいかと思いました。やっぱりどうしても
できるだけ、早い速度が求められそうだったからです。そこでなんですが、DirectXというのはCと同じぐらい
早く処理してくれるものなのでしょうか。そこが一番気になります。もし、なんとなくでも結構なので知ってたら
教えてください。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 24年前
投稿: 48
 

> DirectXというのはCと同じぐらい早く処理してくれるものなのでしょうか

そもそもDirectXとCの速度を比べること自体がおかしいような気がしますが...

DirectXはそれなりに速度はでると思います。
でもまともにDirectXプログラムをやると泥沼にはまります(泥沼にはまった人の体験談)

フルスクリーンにすると統合環境でまともにデバッグができない(俺だけ?)
という罠にはまり、ファイルに変数を書き出してデバッグするという厳しさ...

ちなみにDirectX8はDirectDrawとDirect3Dの統合なんていってるけどウソです。
事実上DirectDrawの抹消です。

2DならDirectX7以前をつかうべきですね。

ちなみにDirectXライブラリを作ったことがあるんですけど
数千行のコードですよ。まじで...

つうかこれあんまり答えになってないですね(笑)

> DirectXというのはCと同じぐらい早く処理してくれるものなのでしょうか

多くの市販ゲームがDirectXを使っているというコトから
速度に関しては信用していいんじゃないでしょうか。

では。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

>2DならDirectX7以前をつかうべきですね。
>ちなみにDirectXライブラリを作ったことがあるんですけど
>数千行のコードですよ。まじで...
>つうかこれあんまり答えになってないですね(笑)

 とんでもないです(笑)。僕にとってはどれも貴重なお話ばかりです。でも、

>多くの市販ゲームがDirectXを使っているというコトから
>速度に関しては信用していいんじゃないでしょうか。

というのは知りませんでした。そうだったんですか。それなら、意外にDirectXの方がいいのかもしれないですね。
以前、MacでCodeWoriarというソフトを使ってプログラムしてたんですが、今回MFCを使うようになり、一気に
プログラムが難しくなったような気がして苦しんでいます。あまりにも難しいので、「本当に、これを
使ってプログラムなんて作れるのかなあ」とも感じてしまいます。でも、本屋に行ってVC++関係の書籍がたくさん
あるのを見ると、「やっぱり他のみなさんは、これで作ってるんだろうなあ」と改めて感じます。以前、どこかで
エクセルやワードがVC++で作られたソフトってことを聞いたことがあるんですが、これは本当なんでしょうか。
 どなたか、お忙しいところすみませんが、また、よろしくお願いします。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 24年前
投稿: 48
 

> 本当に、これを使ってプログラムなんて作れるのかなあ

少なくとも私はMFCは使いません。理由はわけがわかんないから(笑)
だってあんなバカでかいシロノモつかえませんよ。

だってMFCを内包したら何もしないアプリですら100KBオーバーです。
それに比べてWin32APIオンリーなら20KB~50KBくらいに押さえることが可能です。

ただWin32APIの欠点は少し踏みこむとMSDNが英語...
その点MFCはオール日本語...これはマイクロソフトの陰謀としか思えません。

はっきりいって英語で書かれると読解不能です。

あと以外に知られてないですけどVC++を入れるときにMFCを外すと
リソースが全くつかえなくなる...どういうことやねん!

あんな使いもしないライブラリなんて入れたくないのに...
.rcファイルを見てみればわかりますが

#include afxres.h

MFCを使ってやがります。このせいでMFC無しではリソースが全く使えない...

というかそもそもWin32API無しにいきなりMFCを使うのは不可能かと...

> エクセルやワードがVC++で作られたソフトってことを聞いたことがあるんですが

これはEXCELもWORDも持ってないんで詳しくはわかりませんが、
有名なソフトは結構VC++でできてます。

たとえばWinAmpや秀丸なんかはVC++でできてます。
あと適当に調べてみてわかったんですけど
Internet ExplorerとかOutlook ExpressとかMSN Messenger等は
全部VC++では無いということです。

自社のソフトが自社のコンパイラでできてないって状況はねえ...

まあそれでも他のコンパイラに比べればいいほうだと思います。

つうかまた本題とはかけ離れた方向に突き進んでますね(笑)


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 23年前
投稿: 146
Topic starter  

>つうかまた本題とはかけ離れた方向に突き進んでますね(笑)

いや、とんでもない。今回もとても参考になりました。

>あと適当に調べてみてわかったんですけど
>Internet ExplorerとかOutlook ExpressとかMSN Messenger等は
>全部VC++では無いということです。

これは、とても意外です。確かにどうしてVC++を使わないんでしょうか。僕はぜんぜん、詳しくないんですが、
他のコンパイラといえば、BorlandC++とかDehi(スペルとても自信がないです。しったかぶりしてたらごめんなさい)
とかあると思うんですが、こういうので作ってるということでしょうか。VC++大丈夫なのかと思ってきてしまいます。
 ですが、

>有名なソフトは結構VC++でできてます。
>たとえばWinAmpや秀丸なんかはVC++でできてます。

の書き込みには少し安心しました。そうでもなければ、本屋であんなに書籍がありませんよね。
もう一つお聞きしたいと思ったのですが、本当に、本題と離れていってしまうような気がしたので、新たに
掲示を作りたいと思います。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

> .rcファイルを見てみればわかりますが
> #include afxres.h
> MFCを使ってやがります。このせいでMFC無しではリソースが全く使えない...

そんなことはないです。
試しに、「新規作成」-「プロジェクト」で、
「Win32 Application」-「標準的な Hello World アプリケーション」
としてみてください。

> というかそもそもWin32API無しにいきなりMFCを使うのは不可能かと...

そうでもない思います。確かに API の知識があれば MFC を覚えやすいということはあると思いますが。
C++ の知識がないと不可能です。(体験談)

> 他のコンパイラといえば、BorlandC++とかDehi(スペルとても自信がないです。しったかぶりしてたらごめんなさい)
> とかあると思うんですが、こういうので作ってるということでしょうか。

いくらなんでもそれないでしょう。
VC 以外の自社製コンパイラかもしれないし、そもそも C/C++ 以外の言語を一部使っているという意味かもしれないし。
(勝手な想像です。真剣に受け取らないように。)


返信引用
toru
 toru
(@toru)
ゲスト
結合: 24年前
投稿: 48
 

> 試しに、「新規作成」-「プロジェクト」で、
> 「Win32 Application」-「標準的な Hello World アプリケーション」
> としてみてください。

では[新規作成] - [リソーススクリプト]
として見てください。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

> では[新規作成] - [リソーススクリプト]
> として見てください。

ほんとですね。でも、
#include afxres.h
の部分を消してしまえばいいだけでは?。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 24年前
投稿: 48
 

> #include afxres.h
> の部分を消してしまえばいいだけでは?。

消したらコンパイルエラーがでるんでダメですね。

#include <windows.h>
に書きかえればOKですが...


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました