ページ 1 / 1
dxライブラリ 時間差表示について
Posted: 2017年11月27日(月) 14:52
by てんさん
dxライブラリ初心者です。
今簡単なパズルゲームを作っていて
Draw Format Stringで決めたUIを時間差で3つ表示したいのですがどうプログラムでかけばいいのでしょうか?
時間差は2秒ごとくらいでお願いします。ちなみに時間差で表示させたいUIは
最初に
DrawFormatString(204, 95, WHITE, "%d", sen);
二秒後に
DrawFormatString(204, 115, WHITE, "%d", sen2);
そのまた二秒後に
DrawString(197, 135, "10000", WHITE);
という形でお願いします。初めての投稿なので上手く説明できてないと思いますが
その都度説明しますのでどうか教えてください。お願いいたします。
Re: dxライブラリ 時間差表示について
Posted: 2017年11月27日(月) 17:50
by 25130
どこかで時間計測をする必要があります。
DXライブラリを使用して時間計測を行う方法を、Dixqさんが紹介されています。
http://dixq.net/g/08.html
質問の内容をそのままコードにすると、
コード:
// 最初から表示している
DrawFormatString(204, 95, WHITE, "%d", sen);
// 2秒後、という事は2秒以上が経過している
if (計測時間 が 2秒以上であれば) {
DrawFormatString(204, 115, WHITE, "%d", sen2);
}
// 2秒後の2秒後…つまり4秒以上が経過している
if (計測時間 が 4秒以上であれば) {
DrawString(197, 135, "10000", WHITE);
}
となります。
Re: dxライブラリ 時間差表示について
Posted: 2017年11月27日(月) 20:58
by Dixq (管理人)
基本的には25130さんの書かれている通りですが、リンク先のコードは全体の処理をとめてしまうことを前提としているので
常にメインループに処理を返す必要があります。
2秒ごとにタイムスタンプを打ち続けるサンプルを作ってみました。(1フレーム=1/60秒未満の誤差はあります)
実行結果
[youtube]
[/youtube]
実行コード
TimeStump.h
コード:
#pragma once
class TimeStump
{
public:
explicit TimeStump(int index);
virtual ~TimeStump() = default;
bool update();
void draw() const;
private:
const int _index;
const int _firstTime;
int _time;
};
TimeStump.cpp
コード:
#include "TimeStump.h"
#include <DxLib.h>
constexpr static int INTERVAL = 2000;
TimeStump::TimeStump(int index) :
_index(index),
_firstTime(GetNowCount()),
_time(0)
{
}
bool TimeStump::update()
{
_time = GetNowCount() - _firstTime;
if (_time >= INTERVAL) {
return false;
}
return true;
}
void TimeStump::draw() const
{
DrawFormatString(0, 15*_index, GetColor(255,255,255), "%d", _time);
}
main.cpp
コード:
#include "DxLib.h"
#include <list>
#include "TimeStump.h"
using namespace std;
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
int index = 0;
list<TimeStump> list;
list.emplace_back(TimeStump(index++));
while (!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()) {
if (!list.back().update()) {
list.emplace_back(TimeStump(index++));
}
for (const auto& t : list) {
t.draw();
}
}
DxLib_End();
}
使用プロジェクト
http://dixq.net/g/01_01.html
Re: dxライブラリ 時間差表示について
Posted: 2017年11月27日(月) 23:56
by inemaru
オフトピック
質問内容と関係ないのでオフトピックですが、
管理人さんのサンプルコードでemplace_backメソッドの使い方が良くないように思いました。
動作に関係ないですが、気になったので・・・
攻撃の意図等は、ないです。お気を悪くさせてしまったら、本当にすみません。
折角、コンストラクタ引数でintが渡るようになっているので、
一時変数は、不要だと思います。
コード:
list.emplace_back(TimeStump(index++));
コード:
list.emplace_back(index++);
Re: dxライブラリ 時間差表示について
Posted: 2017年11月28日(火) 08:35
by Dixq (管理人)
オフトピック
おっと、せっかくemplaceになっているのに。
ご指摘ありがとうございます。
一時変数名listってよくないですね・・。すみません、普段Java書いているのでついつい・・。(クラス名が小文字から始まるってことが無い)