DXライブラリ三大処理について。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
TMZ

DXライブラリ三大処理について。

#1

投稿記事 by TMZ » 8年前

DXライブラリでゲームを作っています。
①Enterキーを押すと
②文章が表示される。
③画面が一定時間揺れる。
④揺れ終わると文章が表示される。
上記のような処理をしたい場合、下記のように記述すると
御法度?である ScreenFlip()などの三大処理を入れるしかないのでしょうか?
あるいは、そもそもの設計に問題があるのでしょうか?

コード:

func() {
  if ( Input::press( ENTER ) ) {
    showText( "画面が揺れます。" ) ;
    shakeScreen() ;
    showText( "終了です。" ) ;
  }
}
void shakeScreen() {
  int count = 0 ;
  while ( ProcessMessage() == 0 && count < 10 ) {
    ClearDrawScreen() ;
    shake() // 画面表示の座標を変えるなどの関数
    ScreenFlip() ;
    count ++ ;
  }
}

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: DXライブラリ三大処理について。

#2

投稿記事 by Dixq (管理人) » 8年前

三大処理が複数個所にあるとしたら、それはほぼ間違いなく設計に問題があります。
funcがどこから呼ばれているのか分かりませんが、根底となるルーパーから呼ばれているならその中で新たに三大処理をいれるべきではないです。
毎フレームルーパーに処理を返しましょう。
Enterキーが押された瞬間揺れフラグを立てる等して現在揺れていることを識別可能にします。
またカウンターを用意し、カウンターが特定の値になったらフラグを落とします。
一例としてサンプルコードはこんな感じでしょうか。

コード:

#include "DxLib.h"

bool isShaking = false;
int counter = 0;

void shake(){
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
    isShaking = true;//何らかのタイミングでフラグを立てる
    while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()){
        if(isShaking){
            shake();
            counter++;
            if(counter>10){
                isShaking = false;
            }
        }
    }
    DxLib_End(); // DXライブラリ終了処理
    return 0;
}

TMZ

Re: DXライブラリ三大処理について。

#3

投稿記事 by TMZ » 8年前

返信有り難うございます。
ご教示頂いた設計にします。

ちなみに、
三大処理を複数箇所に書かざるをえない状況とは
どのようなものなのでしょうか?

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: DXライブラリ三大処理について。

#4

投稿記事 by Dixq (管理人) » 8年前

基本的に無いと思っていいですが、館で紹介しているように
http://dixq.net/rp2/06.html
致命的エラーが起きてこれ以上続行中不可能なときただ死ぬのを待つだけの処理等には使っても構わないかと思います。

TMZ

Re: DXライブラリ三大処理について。

#5

投稿記事 by TMZ » 8年前

返信ありがとうございます。
何があっても絶対に使うことはない、と考えておいて間違いはなさそうですね。

大変参考になりました!
どうも有り難うございました!

返信

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