显示FPS配置移动到Config类中

This commit is contained in:
Nomango 2018-07-17 12:32:20 +08:00
parent 167bf51d4c
commit 109bebb1e4
6 changed files with 79 additions and 58 deletions

View File

@ -39,7 +39,9 @@ void e2d::Renderer::destroyInstance()
}
e2d::Renderer::Renderer()
: _showFps(false)
: _renderTimes(0)
, _lastRenderTime(0)
, _fpsText()
, _renderTarget(nullptr)
, _solidBrush(nullptr)
, _textRenderer(nullptr)
@ -133,50 +135,9 @@ void e2d::Renderer::render()
SceneManager::getInstance()->render();
// äÖȾ FPS
if (_showFps)
if (Game::getInstance()->getConfig()->isFpsShow())
{
static int s_nRenderTimes = 0;
static double s_fLastRenderTime = 0;
static String s_sFpsText;
++s_nRenderTimes;
double fDelay = Time::getTotalTime() - s_fLastRenderTime;
if (fDelay >= 0.3)
{
s_sFpsText = String::format(L"FPS: %.1lf", (1 / fDelay) * s_nRenderTimes);
s_fLastRenderTime = Time::getTotalTime();
s_nRenderTimes = 0;
}
IDWriteTextLayout * pTextLayout = nullptr;
IDWriteTextFormat * pTextFormat = Renderer::getFpsTextFormat();
hr = _writeFactory->CreateTextLayout(
(const WCHAR *)s_sFpsText,
(UINT32)s_sFpsText.getLength(),
pTextFormat,
0,
0,
&pTextLayout
);
if (SUCCEEDED(hr))
{
_renderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
_solidBrush->SetOpacity(1.0f);
_textRenderer->SetTextStyle(
D2D1::ColorF(D2D1::ColorF::White),
TRUE,
D2D1::ColorF(D2D1::ColorF::Black, 0.4f),
1.5f,
D2D1_LINE_JOIN_ROUND
);
pTextLayout->Draw(nullptr, _textRenderer, 10, 0);
SafeRelease(pTextLayout);
}
_renderFps();
}
// ÖÕÖ¹äÖȾ
@ -196,6 +157,50 @@ void e2d::Renderer::render()
}
}
void e2d::Renderer::_renderFps()
{
++_renderTimes;
double fDelay = Time::getTotalTime() - _lastRenderTime;
if (fDelay >= 0.1)
{
_fpsText = String::format(L"FPS: %.1lf", (1 / fDelay) * _renderTimes);
_lastRenderTime = Time::getTotalTime();
_renderTimes = 0;
}
IDWriteTextLayout * pTextLayout = nullptr;
IDWriteTextFormat * pTextFormat = Renderer::getFpsTextFormat();
HRESULT hr = _writeFactory->CreateTextLayout(
(const WCHAR *)_fpsText,
(UINT32)_fpsText.getLength(),
pTextFormat,
0,
0,
&pTextLayout
);
if (SUCCEEDED(hr))
{
_renderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
_solidBrush->SetOpacity(1.0f);
auto textRenderer = this->getTextRenderer();
textRenderer->SetTextStyle(
D2D1::ColorF(D2D1::ColorF::White),
TRUE,
D2D1::ColorF(D2D1::ColorF::Black, 0.4f),
1.5f,
D2D1_LINE_JOIN_ROUND
);
pTextLayout->Draw(nullptr, textRenderer, 10, 0);
SafeRelease(pTextLayout);
}
}
e2d::Color e2d::Renderer::getBackgroundColor()
{
return Color(_clearColor.r, _clearColor.g, _clearColor.b, _clearColor.a);
@ -206,11 +211,6 @@ void e2d::Renderer::setBackgroundColor(Color color)
_clearColor = color.toD2DColorF();
}
void e2d::Renderer::showFps(bool show)
{
_showFps = show;
}
ID2D1HwndRenderTarget * e2d::Renderer::getRenderTarget()
{
return _renderTarget;

View File

@ -5,6 +5,7 @@ e2d::Config::Config()
: _gameName()
, _defaultNodePivot()
, _soundEnabled(true)
, _showFps(false)
, _outlineVisible(false)
, _collisionEnabled(false)
, _colliderVisible(false)
@ -22,6 +23,11 @@ void e2d::Config::setGameName(const String & name)
_gameName = name;
}
void e2d::Config::showFps(bool show)
{
_showFps = show;
}
void e2d::Config::setOutlineVisible(bool visible)
{
_outlineVisible = visible;
@ -69,6 +75,11 @@ bool e2d::Config::isSoundEnabled() const
return _soundEnabled;
}
bool e2d::Config::isFpsShow() const
{
return _showFps;
}
bool e2d::Config::isOutlineVisible() const
{
return _outlineVisible;

View File

@ -71,7 +71,7 @@ void e2d::CollisionManager::__updateCollider(Collider* collider)
relation != Collider::Relation::Disjoin)
{
Collision collision(passive, relation);
SceneManager::getInstance()->getCurrentScene()->onCollision(collision);
active->getParentScene()->onCollision(collision);
active->onCollision(collision);
}
}

View File

@ -149,7 +149,7 @@ void e2d::Node::_render()
// 转换渲染器的二维矩阵
Renderer::getInstance()->getRenderTarget()->SetTransform(_finalMatri);
// 渲染自身
this->onRender();
//this->onRender();
}
else
{
@ -174,7 +174,7 @@ void e2d::Node::_render()
// 转换渲染器的二维矩阵
Renderer::getInstance()->getRenderTarget()->SetTransform(_finalMatri);
// 渲染自身
this->onRender();
//this->onRender();
// 访问剩余节点
for (; i < _children.size(); ++i)

View File

@ -323,11 +323,6 @@ public:
Color color
);
// ÏÔʾ FPS
void showFps(
bool show = true
);
// 渲染游戏画面
void render();
@ -374,8 +369,13 @@ private:
// 删除设备相关资源
void __discardDeviceResources();
// äÖȾ FPS
void _renderFps();
private:
bool _showFps;
int _renderTimes;
double _lastRenderTime;
String _fpsText;
D2D1_COLOR_F _clearColor;
ID2D1HwndRenderTarget* _renderTarget;
ID2D1SolidColorBrush* _solidBrush;

View File

@ -1003,6 +1003,12 @@ public:
const String& name
);
// 显示或隐藏 FPS
// 默认:隐藏
void showFps(
bool show
);
// 显示或隐藏节点轮廓
// 默认:隐藏
void setOutlineVisible(
@ -1045,6 +1051,9 @@ public:
// 获取声音打开状态
bool isSoundEnabled() const;
// 获取 FPS 显示状态
bool isFpsShow() const;
// 获取节点轮廓显示状态
bool isOutlineVisible() const;
@ -1065,6 +1074,7 @@ protected:
protected:
bool _unconfigured;
bool _showFps;
bool _soundEnabled;
bool _outlineVisible;
bool _collisionEnabled;