ページ 11

画面を一定時間止める方法

Posted: 2014年3月09日(日) 02:47
by BODY
以前もここで質問させていただいた者なのですが
RPGの戦闘画面について質問があります。

ウィンドウに「〇〇にダメージを与えた」と表示することは
出来たのですがwhileループでScreenFlipとClearDrawScreenを←このへん曖昧です
実行する都合上、文字が一瞬で消えてしまいます。
この場合文字を数秒だけ表示しておくにはどうすればいいのでしょうか?

WaitTimerを文字を表示した直後に書いたのですが
なぜか画面が数秒止まったあとに文字が一瞬表示されるという結果になってしまいます。
使用しているのはVisual Studio2013とDXライブラリでC言語で書いています。

Re: 画面を一定時間止める方法

Posted: 2014年3月09日(日) 02:53
by Dixq (管理人)
処理の中にWait処理を入れるのはもっともやってはいけない処理の一つです。
参考:
http://dixq.net/g/h_11.html

それは一般的にはフレームカウンタを使って実現します。

コード:

int counter = 0;
while(略){
    if(counter<60){
        //文字描画
    }
    counter++;
}
こうすれば60フレーム、つまり1秒間文字を表示することが出来ます。

Re: 画面を一定時間止める方法

Posted: 2014年3月09日(日) 09:55
by softya(ソフト屋)
そうですね。一応私の書いたRPG講座があるのですが初心者の方には難しすぎるみたいです。
メッセージの制御や、戦闘画面の作り方などもあります。
「マイ 日記 • C言語交流フォーラム ~ mixC++ ~ RPG講座」
http://dixq.net/forum/blog.php?u=114&sd=a&c=2
難しすぎる場合は、まず「ゲームプログラミングの館」を人に説明できる程度理解できるまで勉強してみてください。
「ゲームプログラミングの館」で分からないことがあれば質問して下さい。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/

あとDixqさんの作ったRPGのサンプルも有りますよ。
「サンプルプログラミングの館」
http://dixq.net/sm/d10.html
ご本人も書いている通り、コード記述部分を参考にせず考え方だけ参考にして下さい。

Re: 画面を一定時間止める方法

Posted: 2014年3月09日(日) 13:07
by Milla
whileループでゲームループを止めちゃうのはまずい気がする。
それは画面を止めるというより、ゲームの処理を止めちゃうので。
理想はゲームループは回しつつ、画面ウェイトが入ってる状態。

Re: 画面を一定時間止める方法

Posted: 2014年3月10日(月) 01:12
by BODY
No.2のwhile文の中には何を書けばいいのでしょうか?

Re: 画面を一定時間止める方法

Posted: 2014年3月10日(月) 09:40
by softya(ソフト屋)
BODY さんが書きました:No.2のwhile文の中には何を書けばいいのでしょうか?
それこそゲームプログラミングの館をご覧ください。
http://dixq.net/g/

Re: 画面を一定時間止める方法

Posted: 2014年3月10日(月) 19:09
by Dixq (管理人)
ちゃんと私の書いたリンク先を見て頂けましたか?

Re: 画面を一定時間止める方法

Posted: 2014年3月11日(火) 21:33
by BODY
お返事ありがとうございました。
皆さんの仰った通りサイトとサンプルプログラムを参考にし
なんとかwhileの中でカウントする方法でなんとか目的を達成することができました。
でもこのやり方って本当はあんまりよくないんでしょうか?
あとcounterに数値を加算するところで
counter++;と表記すると値が加算されずcounter+=1;だと上手くいくんですがこれは
どうしてなのでしょうか・・・

Re: 画面を一定時間止める方法

Posted: 2014年3月11日(火) 21:43
by softya(ソフト屋)
> なんとかwhileの中でカウントする方法でなんとか目的を達成することができました。
> でもこのやり方って本当はあんまりよくないんでしょうか?

while(!ScreenFlip()&&!ClearDrawScreen()&&!ProcessMessage()){
が沢山あるなら良くない方法です。


> あとcounterに数値を加算するところで
> counter++;と表記すると値が加算されずcounter+=1;だと上手くいくんですがこれは
> どうしてなのでしょうか・・・

その問題を再現できる短いコードを提示してください。
そのほうが話しが早いです。
※ 間違っている点に気づいていない人が説明しようとしても、やはり間違っている点を省略してしまうので問題点が明らかになりません。再現できるソースコードは真実を反映します。