细节调整

This commit is contained in:
Nomango 2018-05-15 23:59:58 +08:00
parent 2c13083c09
commit 012c7aad50
12 changed files with 51 additions and 42 deletions

View File

@ -122,10 +122,10 @@ e2d::Animate * e2d::Animate::reverse() const
} }
auto animation = new (std::nothrow) Animation(_animation->getInterval(), frames); auto animation = new (std::nothrow) Animation(_animation->getInterval(), frames);
return new (std::nothrow) Animate(animation); if (animation)
} {
else return new (std::nothrow) Animate(animation);
{ }
return nullptr;
} }
return nullptr;
} }

View File

@ -170,9 +170,9 @@ void e2d::Game::resume()
{ {
if (s_bInitialized && s_bPaused) if (s_bInitialized && s_bPaused)
{ {
s_bPaused = false;
Game::reset(); Game::reset();
} }
s_bPaused = false;
} }
void e2d::Game::reset() void e2d::Game::reset()

View File

@ -1,31 +1,33 @@
#include "..\e2dbase.h" #include "..\e2dbase.h"
#include "..\e2dmanager.h" #include "..\e2dmanager.h"
e2d::Object::Object() e2d::Object::Object()
: _refCount(0) : _refCount(0)
{ {
ObjectManager::__add(this);
} }
e2d::Object::~Object() e2d::Object::~Object()
{ {
} }
// 引用计数加一 void e2d::Object::autorelease()
{
ObjectManager::__add(this);
}
void e2d::Object::retain() void e2d::Object::retain()
{ {
++_refCount; ++_refCount;
} }
// 引用计数减一
void e2d::Object::release() void e2d::Object::release()
{ {
_refCount--; _refCount--;
// 通知对象管理池刷新
ObjectManager::flush(); ObjectManager::flush();
} }
int e2d::Object::getRefCount() const int e2d::Object::getRefCount() const
{ {
return _refCount; return _refCount;
} }

View File

@ -5,10 +5,18 @@
e2d::Scene::Scene() e2d::Scene::Scene()
: _autoUpdate(true) : _autoUpdate(true)
, _colliderVisiable(false) , _colliderVisiable(false)
, _root(new Node()) , _root(nullptr)
{ {
_root->retain(); _root = new (std::nothrow) Node();
_root->_setParentScene(this); if (_root)
{
_root->retain();
_root->_setParentScene(this);
}
else
{
// TODO: 抛出一个异常
}
} }
e2d::Scene::~Scene() e2d::Scene::~Scene()

View File

@ -135,7 +135,7 @@ void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider)
void e2d::ColliderManager::add(const Function& func, const String& name, bool paused) void e2d::ColliderManager::add(const Function& func, const String& name, bool paused)
{ {
auto listener = new Listener(func, name, paused); auto listener = new (std::nothrow) Listener(func, name, paused);
s_vListeners.push_back(listener); s_vListeners.push_back(listener);
} }

View File

@ -39,7 +39,7 @@ static std::vector<Listener*> s_vListeners;
void e2d::InputManager::add(const Function& func, const String& name, bool paused) void e2d::InputManager::add(const Function& func, const String& name, bool paused)
{ {
auto listener = new Listener(func, name, paused); auto listener = new (std::nothrow) Listener(func, name, paused);
s_vListeners.push_back(listener); s_vListeners.push_back(listener);
} }

View File

@ -38,8 +38,7 @@ e2d::Node::Node()
{ {
if (s_fDefaultColliderEnabled) if (s_fDefaultColliderEnabled)
{ {
auto rect = new ColliderRect(this); this->setCollider(new ColliderRect(this));
this->setCollider(rect);
} }
} }
@ -548,22 +547,19 @@ void e2d::Node::setCollider(ColliderType nColliderType)
{ {
case ColliderType::RECT: case ColliderType::RECT:
{ {
auto rect = new ColliderRect(this); this->setCollider(new ColliderRect(this));
this->setCollider(rect);
break; break;
} }
case ColliderType::CIRCLE: case ColliderType::CIRCLE:
{ {
auto rect = new ColliderCircle(this); this->setCollider(new ColliderCircle(this));
this->setCollider(rect);
break; break;
} }
case ColliderType::ELLIPSE: case ColliderType::ELLIPSE:
{ {
auto rect = new ColliderEllipse(this); this->setCollider(new ColliderEllipse(this));
this->setCollider(rect);
break; break;
} }

View File

@ -171,7 +171,7 @@ bool MusicPlayer::open(const e2d::String& filePath)
_dwSize = _ck.cksize; _dwSize = _ck.cksize;
// 将样本数据读取到内存中 // 将样本数据读取到内存中
_pbWaveData = new BYTE[_dwSize]; _pbWaveData = new (std::nothrow) BYTE[_dwSize];
if (!_read(_pbWaveData, _dwSize)) if (!_read(_pbWaveData, _dwSize))
{ {
@ -226,7 +226,7 @@ bool MusicPlayer::open(int resNameId, const e2d::String& resType)
if (nullptr == (pvRes = LockResource(hResData))) if (nullptr == (pvRes = LockResource(hResData)))
return TraceError(L"LockResource"); return TraceError(L"LockResource");
_pResourceBuffer = new CHAR[dwSize]; _pResourceBuffer = new (std::nothrow) CHAR[dwSize];
memcpy(_pResourceBuffer, pvRes, dwSize); memcpy(_pResourceBuffer, pvRes, dwSize);
MMIOINFO mmioInfo; MMIOINFO mmioInfo;
@ -251,7 +251,7 @@ bool MusicPlayer::open(int resNameId, const e2d::String& resType)
_dwSize = _ck.cksize; _dwSize = _ck.cksize;
// Read the sample data into memory // Read the sample data into memory
_pbWaveData = new BYTE[_dwSize]; _pbWaveData = new (std::nothrow) BYTE[_dwSize];
if (!_read(_pbWaveData, _dwSize)) if (!_read(_pbWaveData, _dwSize))
{ {
@ -442,7 +442,7 @@ bool MusicPlayer::_readMMIO()
// 的数据,这个数据就是额外分配的大小 // 的数据,这个数据就是额外分配的大小
if (pcmWaveFormat.wf.wFormatTag == WAVE_FORMAT_PCM) if (pcmWaveFormat.wf.wFormatTag == WAVE_FORMAT_PCM)
{ {
_pwfx = (WAVEFORMATEX*)new CHAR[sizeof(WAVEFORMATEX)]; _pwfx = (WAVEFORMATEX*)new (std::nothrow) CHAR[sizeof(WAVEFORMATEX)];
// 拷贝数据 // 拷贝数据
memcpy(_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat)); memcpy(_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat));
@ -455,7 +455,7 @@ bool MusicPlayer::_readMMIO()
if (mmioRead(_hmmio, (CHAR*)&cbExtraBytes, sizeof(WORD)) != sizeof(WORD)) if (mmioRead(_hmmio, (CHAR*)&cbExtraBytes, sizeof(WORD)) != sizeof(WORD))
return TraceError(L"mmioRead"); return TraceError(L"mmioRead");
_pwfx = (WAVEFORMATEX*)new CHAR[sizeof(WAVEFORMATEX) + cbExtraBytes]; _pwfx = (WAVEFORMATEX*)new (std::nothrow) CHAR[sizeof(WAVEFORMATEX) + cbExtraBytes];
// 拷贝数据 // 拷贝数据
memcpy(_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat)); memcpy(_pwfx, &pcmWaveFormat, sizeof(pcmWaveFormat));

View File

@ -67,7 +67,7 @@ static std::vector<TimerInfo*> s_vTimers;
void e2d::Timer::start(const Function& func, double delay, int updateTimes, bool paused, const String& name) void e2d::Timer::start(const Function& func, double delay, int updateTimes, bool paused, const String& name)
{ {
auto timer = new TimerInfo(func, name, delay, updateTimes, paused); auto timer = new (std::nothrow) TimerInfo(func, name, delay, updateTimes, paused);
s_vTimers.push_back(timer); s_vTimers.push_back(timer);
} }
@ -78,7 +78,7 @@ void e2d::Timer::start(const Function& func, const String& name)
void e2d::Timer::startOnce(const Function& func, double timeOut) void e2d::Timer::startOnce(const Function& func, double timeOut)
{ {
auto timer = new TimerInfo(func, L"", timeOut, 1, false); auto timer = new (std::nothrow) TimerInfo(func, L"", timeOut, 1, false);
s_vTimers.push_back(timer); s_vTimers.push_back(timer);
} }

View File

@ -1,11 +1,6 @@
#pragma once #pragma once
#include "e2dmacros.h" #include "e2dmacros.h"
#include "e2dcustom.h" #include "e2dcustom.h"
#include <set>
#include <stack>
#include <vector>
#include <functional>
#include <sstream>
namespace e2d namespace e2d
{ {
@ -583,6 +578,9 @@ public:
virtual ~Object(); virtual ~Object();
// 自动释放
void autorelease();
// 引用计数加一 // 引用计数加一
void retain(); void retain();
@ -881,8 +879,8 @@ protected:
}; };
template<typename Object> template <class Type>
inline void SafeRelease(Object*& p) inline void SafeRelease(Type*& p)
{ {
if (p != nullptr) if (p != nullptr)
{ {
@ -891,4 +889,5 @@ inline void SafeRelease(Object*& p)
} }
} }
} }

View File

@ -38,9 +38,14 @@
#include <d2d1helper.h> #include <d2d1helper.h>
#include <xaudio2.h> #include <xaudio2.h>
// C RunTime Header Files // C++ RunTime Header Files
#include <stdio.h> #include <set>
#include <wchar.h> #include <stack>
#include <vector>
#include <functional>
#include <sstream>
#include <random>
#include <utility>
// Import Libraries // Import Libraries
#pragma comment(lib, "d2d1.lib") #pragma comment(lib, "d2d1.lib")

View File

@ -1,6 +1,5 @@
#pragma once #pragma once
#include "e2dbase.h" #include "e2dbase.h"
#include <random>
namespace e2d namespace e2d
{ {