ページ 11

Dxライブラリ ゲームつくり

Posted: 2017年12月11日(月) 01:59
by おにぎり
C++でダンジョンゲームを制作中です。

現状ではマップのみ作成しました。
そこで毎フレームごとに更新と描画を行っているのですが、更新の方は何をしたらよいのでしょう?
動きのあるものを作ったら座標などの更新をするのはわかりますが、そうでないものはいらないのでしょうか?

具体的にいうと、更新をしないと情報がなくなってしまうのではないか?ということです。(例えば当たり判定のある壁など)
描画を行わなかったら見えなくなるのですぐにわかるのですが、更新を行わなかったらどうなってしまうのかがわからないです。(特に今はマップしかないので…)

初歩的な事なので、少しわかりにくいかとも思いますが、どうぞよろしくお願いします。

Re: Dxライブラリ ゲームつくり

Posted: 2017年12月11日(月) 02:47
by hide
更新する必要がなければ更新しなくていいのではないでしょうか。
更新が必要なマップが出てきたら考えればいいでしょう。(一定期間ごとに通れなくなるマップをつくりたい。とか)
更新をしないと情報がなくなってしまう
何を恐れているのかよくわからないです。
あなたがインスタンスを適切に捨てれば情報が消えますし、保持していれば残ります。

Re: Dxライブラリ ゲームつくり

Posted: 2017年12月11日(月) 09:29
by おにぎり
やはり意味わからないですよね

例に挙げさせていただいた当たり判定ですが、毎フレーム更新のところで「ここは判定を取るよ」と指示してあげなければその情報が次フレームで消滅してしまわないかという事です。

描画は毎フレーム呼び出さなければ消えてしまうのに対し当たり判定のようなものは一度の呼び出しで継続するのもなのかというところです

言っていることは簡単なはずですが、恐らく誰も気にしないようなところで悩んでいるので分かりにくくなってしまっているのかと感じます

相変わらず分かりにくいですがどうぞよろしくお願いします。

Re: Dxライブラリ ゲームつくり

Posted: 2017年12月11日(月) 11:07
by usao
どのような物が,どのような理由により
> 消滅
すると想定されているのか?
をもっと明白にしないと,話がわからないですね.

コード:

int main()
{
  //データ
  int a = 5;  //何らかのデータa
  int b = 10;  //何らかのデータb

  //メインループ
  for( int i=0; i<1000; ++i )
  {
    if( i < 100 )
    {//※ある条件を満たす場合にデータの更新処理を行う
      ++a;  //データaを更新
    }
    else
    {
      //※ここにくるとき「更新処理」は行われないわけだが,
      //だからといって,データaは失われるのであろうか?
      //
      //また,データbに関しては,全く「更新処理」が行われていないが,
      //データbは,どこかのタイミングで失われたのであろうか?
    }


    //描画処理
    DrawSomething();  //何か描画する
  }

  return 0;
}

Re: Dxライブラリ ゲームつくり

Posted: 2017年12月11日(月) 12:45
by おにぎり
画面の描画を例に挙げてるのですが、もしかしてそこが間違ってますか?

描画の処理をコンストラクタでの呼び出しにすると1瞬しか描画されないと思っています。
ここが間違っているのでしたら、申し訳御座いませんが根本からの勘違いです><
私が知りたいのはこの考えがあっていることが前提なので、そちらで話させていだだきます。

描画を毎フレーム呼ばなければ一瞬しか出ないのに対し、更新で当たり判定などの位置を毎フレーム教えてあげなければ次のフレームで情報が消失してしまうのかということです。

比較してるのは
呼ばないと消える描画

呼ばないと消える?(ここが質問の内容)当たり判定などの情報
です

よろしくお願いします

Re: Dxライブラリ ゲームつくり

Posted: 2017年12月11日(月) 17:00
by peot
描画が一瞬しか表示されない、という考え方は間違っています。

正しくは毎フレームごとにClearDrawScreen()を使って消しているのです。

詳しい説明はDXライブラリの公式HPでもされています。
http://dxlib.o.oo7.jp/lecture/lecture2.html

つまり自分できちんと消さない限り描画の情報は残り続けます。
変数の情報も同じことです。

Re: Dxライブラリ ゲームつくり

Posted: 2017年12月11日(月) 21:02
by V30
描画の処理をコンストラクタでの呼び出しにするのは、間違いです。


画像データも画像の座標データも、まず変数に格納(代入)します。

次にゲームのフレームループを開始します。

そのループ内で、
・画像描画処理をしなくても、画像データは消えません。描画されないだけで、変数は同じ値のままです。
・座標データも、更新しないからといって消えることはありません。変数は同じ値のままです。
・当たり判定は、やらなければ何も起こらないだけです。
・画像データ変数の値を変更すると、画像データは消えます。エラーになるかもしれません。元の値に戻せば、元通り描画できます。
・座標データ変数の値を変更すると、描画座標が変わるだけです。元の値に戻せば、元通りの座標に描画できます。
・当たり判定は、やれば当たり判定します。
・画像描画処理を1000フレームに1回だけしても、全然問題ありません。ただ、思うような結果にならないと思います。
・座標更新を1000フレームに1回だけしても、全然問題ありません。ただ、思うような結果にならないと思います。
・当たり判定を1000フレームに1回だけしても、全然問題ありません。ただ、思うような結果にならないと思います。


ループ内では、画像データも座標データも当たり判定も、毎フレーム描画・更新しておけば、思うような結果になるし、処理として正解だと思います。

Re: Dxライブラリ ゲームつくり

Posted: 2017年12月12日(火) 00:40
by おにぎり
クリアの処理をすっかり忘れていました。

ダンジョンゲームということで判定の更新はせずに、ダンジョンの生成の時のみ情報を記憶させるというやり方でやろうと思います。

分かりにくい質問のしかたで申し訳ございませんでした。