Refactoring : project files

This commit is contained in:
Nomango 2018-09-05 13:38:30 +08:00
parent 65ba8e96d2
commit 42ac308278
10 changed files with 1279 additions and 1275 deletions

View File

@ -5,135 +5,135 @@ namespace e2d
{ {
// 按键消息 // 按键消息
class KeyEvent class KeyEvent
{
public:
// 按键消息类型
enum class Type : int
{ {
Down = 0x0100, // 按下 public:
Up // 抬起 // 按键消息类型
enum class Type : int
{
Down = 0x0100, // 按下
Up // 抬起
};
public:
explicit KeyEvent(
HWND hWnd,
UINT message,
WPARAM w_param,
LPARAM l_param
);
// 获取按键键值
KeyCode GetCode() const;
// 获取按键次数
int GetCount() const;
// 获取事件类型
KeyEvent::Type GetType() const;
// VK 键值转换
static KeyCode ToKeyCode(
WPARAM w_param
);
protected:
int count_;
KeyCode code_;
KeyEvent::Type type_;
}; };
public:
explicit KeyEvent(
HWND hWnd,
UINT message,
WPARAM w_param,
LPARAM l_param
);
// 获取按键键值 // 鼠标消息
KeyCode GetCode() const; class MouseEvent
// 获取按键次数
int GetCount() const;
// 获取事件类型
KeyEvent::Type GetType() const;
// VK 键值转换
static KeyCode ToKeyCode(
WPARAM w_param
);
protected:
int count_;
KeyCode code_;
KeyEvent::Type type_;
};
// 鼠标消息
class MouseEvent
{
public:
// 鼠标消息类型
enum class Type : int
{ {
Move = 0x0200, // 鼠标移动 public:
LeftDown, // 鼠标左键按下 // 鼠标消息类型
LeftUp, // 鼠标左键抬起 enum class Type : int
LeftDoubleClick, // 鼠标左键双击 {
RightDown, // 鼠标右键按下 Move = 0x0200, // 鼠标移动
RightUp, // 鼠标右键抬起 LeftDown, // 鼠标左键按下
RightDoubleClick, // 鼠标右键双击 LeftUp, // 鼠标左键抬起
MiddleDown, // 鼠标中键按下 LeftDoubleClick, // 鼠标左键双击
MiddleUp, // 鼠标中键抬起 RightDown, // 鼠标右键按下
MiddleDoubleClick, // 鼠标中键双击 RightUp, // 鼠标右键抬起
Wheel // 滑动滚轮 RightDoubleClick, // 鼠标右键双击
MiddleDown, // 鼠标中键按下
MiddleUp, // 鼠标中键抬起
MiddleDoubleClick, // 鼠标中键双击
Wheel // 滑动滚轮
};
public:
explicit MouseEvent(
HWND hWnd,
UINT message,
WPARAM w_param,
LPARAM l_param,
float dpi
);
// 获取鼠标横坐标
float GetX() const;
// 获取鼠标纵坐标
float GetY() const;
// 获取鼠标坐标
Point GetPos() const;
// 获取事件类型
MouseEvent::Type GetType() const;
float GetWheelDelta() const;
// 鼠标左键是否按下
bool IsLButtonDown() const;
// 鼠标右键是否按下
bool IsRButtonDown() const;
// 鼠标中键是否按下
bool IsMButtonDown() const;
// Shift 键是否按下
bool IsShiftDown() const;
// Ctrl 键是否按下
bool IsCtrlDown() const;
protected:
UINT message_;
WPARAM w_param_;
LPARAM l_param_;
Point pos_;
MouseEvent::Type type_;
}; };
public:
explicit MouseEvent(
HWND hWnd,
UINT message,
WPARAM w_param,
LPARAM l_param,
float dpi
);
// 获取鼠标横坐标 // 碰撞事件
float GetX() const; class Collision
{
public:
Collision();
// 获取鼠标纵坐标 explicit Collision(
float GetY() const; Node* node,
Collider::Relation relation
);
// 获取鼠标坐标 ~Collision();
Point GetPos() const;
// 获取事件类型 // 获取发生碰撞节点
MouseEvent::Type GetType() const; Node* GetNode() const;
float GetWheelDelta() const; // 获取交集关系
Collider::Relation GetRelation() const;
// 鼠标左键是否按下 protected:
bool IsLButtonDown() const; Node * node_;
Collider::Relation relation_;
// 鼠标右键是否按下 };
bool IsRButtonDown() const;
// 鼠标中键是否按下
bool IsMButtonDown() const;
// Shift 键是否按下
bool IsShiftDown() const;
// Ctrl 键是否按下
bool IsCtrlDown() const;
protected:
UINT message_;
WPARAM w_param_;
LPARAM l_param_;
Point pos_;
MouseEvent::Type type_;
};
// 碰撞事件
class Collision
{
public:
Collision();
explicit Collision(
Node* node,
Collider::Relation relation
);
~Collision();
// 获取发生碰撞节点
Node* GetNode() const;
// 获取交集关系
Collider::Relation GetRelation() const;
protected:
Node * node_;
Collider::Relation relation_;
};
} }

View File

@ -5,191 +5,191 @@ namespace e2d
{ {
class Music; class Music;
// 音源回调 // 音源回调
class VoiceCallback class VoiceCallback
: public IXAudio2VoiceCallback : public IXAudio2VoiceCallback
{
public:
VoiceCallback();
~VoiceCallback();
STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) {}
STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) {}
STDMETHOD_(void, OnStreamEnd) (THIS);
STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) {}
STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext);
STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext);
STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {}
STDMETHOD_(void, SetCallbackOnStreamEnd) (THIS_ const Function& func);
STDMETHOD_(void, SetCallbackOnLoopEnd) (THIS_ const Function& func);
protected:
Function loop_end_callback_;
Function stream_end_callback_;
};
// 文字渲染器
class E2DTextRenderer
: public IDWriteTextRenderer
{
private:
E2DTextRenderer();
~E2DTextRenderer();
public:
static HRESULT Create(
E2DTextRenderer** ppTextRenderer,
ID2D1Factory* pD2DFactory,
ID2D1HwndRenderTarget* pRT,
ID2D1SolidColorBrush* pBrush
);
STDMETHOD_(void, SetTextStyle)(
CONST D2D1_COLOR_F &fillColor,
BOOL outline,
CONST D2D1_COLOR_F &outline_color,
FLOAT outline_width,
D2D1_LINE_JOIN outlineJoin
);
STDMETHOD(DrawGlyphRun)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
DWRITE_MEASURING_MODE measuringMode,
__in DWRITE_GLYPH_RUN const* glyphRun,
__in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawUnderline)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
__in DWRITE_UNDERLINE const* underline,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawStrikethrough)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
__in DWRITE_STRIKETHROUGH const* strikethrough,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawInlineObject)(
__maybenull void* clientDrawingContext,
FLOAT originX,
FLOAT originY,
IDWriteInlineObject* inlineObject,
BOOL IsSideways,
BOOL IsRightToLeft,
IUnknown* clientDrawingEffect
);
STDMETHOD(IsPixelSnappingDisabled)(
__maybenull void* clientDrawingContext,
__out BOOL* isDisabled
);
STDMETHOD(GetCurrentTransform)(
__maybenull void* clientDrawingContext,
__out DWRITE_MATRIX* transform
);
STDMETHOD(GetPixelsPerDip)(
__maybenull void* clientDrawingContext,
__out FLOAT* pixelsPerDip
);
public:
unsigned long STDMETHODCALLTYPE AddRef();
unsigned long STDMETHODCALLTYPE Release();
HRESULT STDMETHODCALLTYPE QueryInterface(
IID const& riid,
void** ppvObject
);
private:
unsigned long cRefCount_;
D2D1_COLOR_F sFillColor_;
D2D1_COLOR_F sOutlineColor_;
FLOAT fOutlineWidth;
BOOL bShowOutline_;
ID2D1Factory* pD2DFactory_;
ID2D1HwndRenderTarget* pRT_;
ID2D1SolidColorBrush* pBrush_;
ID2D1StrokeStyle * pCurrStrokeStyle_;
};
// 异常
class Exception
{
public:
Exception() E2D_NOEXCEPT;
explicit Exception(const char * message) E2D_NOEXCEPT;
Exception(Exception const& other) E2D_NOEXCEPT;
virtual ~Exception() E2D_NOEXCEPT;
Exception& operator=(Exception const& other) E2D_NOEXCEPT;
// 获取异常信息
virtual const char * GetMsg() const;
private:
const char * message_;
};
// 系统异常
class SystemException
: public Exception
{
public:
SystemException() E2D_NOEXCEPT;
explicit SystemException(const char * message) E2D_NOEXCEPT;
};
template<class Interface>
inline void SafeRelease(Interface*& p)
{
if (p != nullptr)
{ {
p->Release(); public:
p = nullptr; VoiceCallback();
}
} ~VoiceCallback();
STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) {}
STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) {}
STDMETHOD_(void, OnStreamEnd) (THIS);
STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) {}
STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext);
STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext);
STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) {}
STDMETHOD_(void, SetCallbackOnStreamEnd) (THIS_ const Function& func);
STDMETHOD_(void, SetCallbackOnLoopEnd) (THIS_ const Function& func);
protected:
Function loop_end_callback_;
Function stream_end_callback_;
};
inline void ThrowIfFailed(HRESULT hr) // 文字渲染器
{ class E2DTextRenderer
if (FAILED(hr)) : public IDWriteTextRenderer
{ {
// 在此处设置断点以捕获 D2D API 异常. private:
static char s_str[64] = {}; E2DTextRenderer();
sprintf_s(s_str, "Failure with HRESULT of %08X", static_cast<unsigned int>(hr));
throw SystemException(s_str); ~E2DTextRenderer();
public:
static HRESULT Create(
E2DTextRenderer** ppTextRenderer,
ID2D1Factory* pD2DFactory,
ID2D1HwndRenderTarget* pRT,
ID2D1SolidColorBrush* pBrush
);
STDMETHOD_(void, SetTextStyle)(
CONST D2D1_COLOR_F &fillColor,
BOOL outline,
CONST D2D1_COLOR_F &outline_color,
FLOAT outline_width,
D2D1_LINE_JOIN outlineJoin
);
STDMETHOD(DrawGlyphRun)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
DWRITE_MEASURING_MODE measuringMode,
__in DWRITE_GLYPH_RUN const* glyphRun,
__in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawUnderline)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
__in DWRITE_UNDERLINE const* underline,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawStrikethrough)(
__maybenull void* clientDrawingContext,
FLOAT baselineOriginX,
FLOAT baselineOriginY,
__in DWRITE_STRIKETHROUGH const* strikethrough,
IUnknown* clientDrawingEffect
);
STDMETHOD(DrawInlineObject)(
__maybenull void* clientDrawingContext,
FLOAT originX,
FLOAT originY,
IDWriteInlineObject* inlineObject,
BOOL IsSideways,
BOOL IsRightToLeft,
IUnknown* clientDrawingEffect
);
STDMETHOD(IsPixelSnappingDisabled)(
__maybenull void* clientDrawingContext,
__out BOOL* isDisabled
);
STDMETHOD(GetCurrentTransform)(
__maybenull void* clientDrawingContext,
__out DWRITE_MATRIX* transform
);
STDMETHOD(GetPixelsPerDip)(
__maybenull void* clientDrawingContext,
__out FLOAT* pixelsPerDip
);
public:
unsigned long STDMETHODCALLTYPE AddRef();
unsigned long STDMETHODCALLTYPE Release();
HRESULT STDMETHODCALLTYPE QueryInterface(
IID const& riid,
void** ppvObject
);
private:
unsigned long cRefCount_;
D2D1_COLOR_F sFillColor_;
D2D1_COLOR_F sOutlineColor_;
FLOAT fOutlineWidth;
BOOL bShowOutline_;
ID2D1Factory* pD2DFactory_;
ID2D1HwndRenderTarget* pRT_;
ID2D1SolidColorBrush* pBrush_;
ID2D1StrokeStyle * pCurrStrokeStyle_;
};
// 异常
class Exception
{
public:
Exception() E2D_NOEXCEPT;
explicit Exception(const char * message) E2D_NOEXCEPT;
Exception(Exception const& other) E2D_NOEXCEPT;
virtual ~Exception() E2D_NOEXCEPT;
Exception& operator=(Exception const& other) E2D_NOEXCEPT;
// 获取异常信息
virtual const char * GetMsg() const;
private:
const char * message_;
};
// 系统异常
class SystemException
: public Exception
{
public:
SystemException() E2D_NOEXCEPT;
explicit SystemException(const char * message) E2D_NOEXCEPT;
};
template<class Interface>
inline void SafeRelease(Interface*& p)
{
if (p != nullptr)
{
p->Release();
p = nullptr;
}
}
inline void ThrowIfFailed(HRESULT hr)
{
if (FAILED(hr))
{
// 在此处设置断点以捕获 D2D API 异常.
static char s_str[64] = {};
sprintf_s(s_str, "Failure with HRESULT of %08X", static_cast<unsigned int>(hr));
throw SystemException(s_str);
}
} }
}
} }

View File

@ -6,74 +6,74 @@ namespace e2d
{ {
class Node; class Node;
// 碰撞体管理器 // 碰撞体管理器
class CollisionManager class CollisionManager
{ {
friend class Node; friend class Node;
friend class Collider; friend class Collider;
public: public:
// 获取碰撞体管理器实例 // 获取碰撞体管理器实例
static CollisionManager * GetInstance(); static CollisionManager * GetInstance();
// 打开或关闭碰撞监听 // 打开或关闭碰撞监听
// 默认:关闭 // 默认:关闭
void SetCollisionEnabled( void SetCollisionEnabled(
bool enabled bool enabled
); );
// 添加可互相碰撞物体的名称 // 添加可互相碰撞物体的名称
void AddName( void AddName(
const String& name1, const String& name1,
const String& name2 const String& name2
); );
// 添加可互相碰撞物体的名称 // 添加可互相碰撞物体的名称
void AddName( void AddName(
const std::vector<std::pair<String, String>>& names const std::vector<std::pair<String, String>>& names
); );
// 判断两个物体是否是可碰撞的 // 判断两个物体是否是可碰撞的
bool IsCollidable( bool IsCollidable(
Node * node1, Node * node1,
Node * node2 Node * node2
); );
// 判断两个物体是否是可碰撞的 // 判断两个物体是否是可碰撞的
bool IsCollidable( bool IsCollidable(
const String& name1, const String& name1,
const String& name2 const String& name2
); );
private: private:
CollisionManager(); CollisionManager();
~CollisionManager(); ~CollisionManager();
E2D_DISABLE_COPY(CollisionManager); E2D_DISABLE_COPY(CollisionManager);
// 添加碰撞体 // 添加碰撞体
void AddCollider( void AddCollider(
Collider* collider Collider* collider
); );
// 移除碰撞体 // 移除碰撞体
void RemoveCollider( void RemoveCollider(
Collider* collider Collider* collider
); );
// 更新碰撞体 // 更新碰撞体
void UpdateCollider( void UpdateCollider(
Collider* collider Collider* collider
); );
private: private:
bool collision_enabled_; bool collision_enabled_;
std::vector<Collider*> colliders_; std::vector<Collider*> colliders_;
std::set<std::pair<size_t, size_t>> collision_list_; std::set<std::pair<size_t, size_t>> collision_list_;
}; };
} }

View File

@ -8,406 +8,406 @@ namespace e2d
{ {
// 窗体 // 窗体
class Window class Window
{
public:
// 鼠标指针样式
enum class Cursor : int
{ {
Normal, /* 默认指针样式 */ public:
Hand, /* 手状指针 */ // 鼠标指针样式
No, /* 禁止指针 */ enum class Cursor : int
Wait, /* 沙漏指针 */ {
ArrowWait /* 默认指针和小沙漏 */ Normal, /* 默认指针样式 */
Hand, /* 手状指针 */
No, /* 禁止指针 */
Wait, /* 沙漏指针 */
ArrowWait /* 默认指针和小沙漏 */
};
// 弹窗样式
enum class PopupStyle : int
{
Info, /* 提示 */
Warning, /* 警告 */
Error /* 错误 */
};
public:
// 获取窗体实例
static Window * GetInstance();
// 销毁窗体实例
static void DestroyInstance();
// 创建窗体互斥体
bool CheckMutex(
const String& mutex = L"" /* 进程互斥体名称 */
);
// 获取窗体标题
const String& GetTitle() const;
// 获取窗体宽度
int GetWidth() const;
// 获取窗体高度
int GetHeight() const;
// 获取窗体大小
Size GetSize() const;
// 获取窗口 DPI
float GetDpi() const;
// 获取窗口句柄
HWND GetHWnd();
// 修改窗体大小
void SetSize(
int width, /* 窗体宽度 */
int height /* 窗体高度 */
);
// 设置窗体标题
void SetTitle(
const String& title /* 窗体标题 */
);
// 设置窗体图标
void SetIcon(
int icon_id
);
// 设置鼠标指针样式
void SetCursor(
Cursor cursor
);
// 打开或隐藏控制台
void SetConsoleEnabled(
bool enabled
);
// 是否允许响应输入法
void SetTypewritingEnabled(
bool enabled
);
// 弹出窗口
// 返回值:当窗口包含取消按钮时,返回值表示用户是否点击确认按钮
bool Popup(
const String& text, /* 窗口内容 */
const String& title, /* 窗口标题 */
PopupStyle style = PopupStyle::Info,/* 弹窗样式 */
bool has_cancel = false /* 包含取消按钮 */
);
// 处理窗体消息
void Poll();
private:
Window();
~Window();
E2D_DISABLE_COPY(Window);
// 根据客户区大小定位窗口
Rect Locate(
int width,
int height
);
// Win32 窗口消息回调程序
static LRESULT CALLBACK WndProc(
HWND hWnd,
UINT msg,
WPARAM w_param,
LPARAM l_param
);
private:
HWND hWnd_;
MSG msg_;
int width_;
int height_;
String title_;
int icon_id_;
float dpi_;
static Window * instance_;
}; };
// 弹窗样式
enum class PopupStyle : int // 渲染器
class Renderer
{ {
Info, /* 提示 */ public:
Warning, /* 警告 */ // 获取渲染器实例
Error /* 错误 */ static Renderer * GetInstance();
// 销毁实例
static void DestroyInstance();
// 获取背景色
Color GetBackgroundColor();
// 修改背景色
void SetBackgroundColor(
const Color& color
);
// 显示或隐藏 FPS
// 默认:隐藏
void ShowFps(
bool show
);
// 开始渲染
void BeginDraw();
// 结束渲染
void EndDraw();
// 获取文字渲染器
E2DTextRenderer * GetTextRenderer();
// 获取 ID2D1HwndRenderTarget 对象
ID2D1HwndRenderTarget * GetRenderTarget();
// 获取 ID2D1SolidColorBrush 对象
ID2D1SolidColorBrush * GetSolidBrush();
// 获取 ID2D1Factory 对象
static ID2D1Factory * GetFactory();
// 获取 IWICImagingFactory 对象
static IWICImagingFactory * GetImagingFactory();
// 获取 IDWriteFactory 对象
static IDWriteFactory * GetWriteFactory();
// 获取 Miter 样式的 ID2D1StrokeStyle
static ID2D1StrokeStyle * GetMiterStrokeStyle();
// 获取 Bevel 样式的 ID2D1StrokeStyle
static ID2D1StrokeStyle * GetBevelStrokeStyle();
// 获取 Round 样式的 ID2D1StrokeStyle
static ID2D1StrokeStyle * GetRoundStrokeStyle();
protected:
Renderer();
~Renderer();
E2D_DISABLE_COPY(Renderer);
protected:
bool show_fps_;
int render_times_;
Time last_render_time_;
D2D1_COLOR_F clear_color_;
E2DTextRenderer* text_renderer_;
IDWriteTextFormat* fps_text_format_;
IDWriteTextLayout* fps_text_layout_;
ID2D1SolidColorBrush* solid_brush_;
ID2D1HwndRenderTarget* render_target_;
static ID2D1Factory* factory_;
static IWICImagingFactory* imaging_factory_;
static IDWriteFactory* write_factory_;
static ID2D1StrokeStyle* miter_stroke_style_;
static ID2D1StrokeStyle* bevel_stroke_style_;
static ID2D1StrokeStyle* round_stroke_style_;
static Renderer * instance_;
}; };
public:
// 获取窗体实例
static Window * GetInstance();
// 销毁窗体实例
static void DestroyInstance();
// 创建窗体互斥体
bool CheckMutex(
const String& mutex = L"" /* 进程互斥体名称 */
);
// 获取窗体标题
const String& GetTitle() const;
// 获取窗体宽度
int GetWidth() const;
// 获取窗体高度
int GetHeight() const;
// 获取窗体大小
Size GetSize() const;
// 获取窗口 DPI
float GetDpi() const;
// 获取窗口句柄
HWND GetHWnd();
// 修改窗体大小
void SetSize(
int width, /* 窗体宽度 */
int height /* 窗体高度 */
);
// 设置窗体标题
void SetTitle(
const String& title /* 窗体标题 */
);
// 设置窗体图标
void SetIcon(
int icon_id
);
// 设置鼠标指针样式
void SetCursor(
Cursor cursor
);
// 打开或隐藏控制台
void SetConsoleEnabled(
bool enabled
);
// 是否允许响应输入法
void SetTypewritingEnabled(
bool enabled
);
// 弹出窗口 // 输入设备
// 返回值:当窗口包含取消按钮时,返回值表示用户是否点击确认按钮 class Input
bool Popup( {
const String& text, /* 窗口内容 */ public:
const String& title, /* 窗口标题 */ // 获取输入设备实例
PopupStyle style = PopupStyle::Info,/* 弹窗样式 */ static Input * GetInstance();
bool has_cancel = false /* 包含取消按钮 */
);
// 处理窗体消息 // 销毁输入设备实例
void Poll(); static void DestroyInstance();
private: // 检测键盘某按键是否正被按下
Window(); bool IsDown(
KeyCode key
);
~Window(); // 检测鼠标按键是否正被按下
bool IsDown(
MouseCode code
);
E2D_DISABLE_COPY(Window); // 获得鼠标X轴坐标值
float GetMouseX();
// 根据客户区大小定位窗口
Rect Locate(
int width,
int height
);
// Win32 窗口消息回调程序
static LRESULT CALLBACK WndProc(
HWND hWnd,
UINT msg,
WPARAM w_param,
LPARAM l_param
);
private:
HWND hWnd_;
MSG msg_;
int width_;
int height_;
String title_;
int icon_id_;
float dpi_;
static Window * instance_;
};
// 渲染器
class Renderer
{
public:
// 获取渲染器实例
static Renderer * GetInstance();
// 销毁实例
static void DestroyInstance();
// 获取背景色
Color GetBackgroundColor();
// 修改背景色
void SetBackgroundColor(
const Color& color
);
// 显示或隐藏 FPS
// 默认:隐藏
void ShowFps(
bool show
);
// 开始渲染
void BeginDraw();
// 结束渲染
void EndDraw();
// 获取文字渲染器
E2DTextRenderer * GetTextRenderer();
// 获取 ID2D1HwndRenderTarget 对象 // 获得鼠标Y轴坐标值
ID2D1HwndRenderTarget * GetRenderTarget(); float GetMouseY();
// 获取 ID2D1SolidColorBrush 对象 // 获得鼠标坐标值
ID2D1SolidColorBrush * GetSolidBrush(); Point GetMousePos();
// 获取 ID2D1Factory 对象 // 获得鼠标X轴坐标增量
static ID2D1Factory * GetFactory(); float GetMouseDeltaX();
// 获取 IWICImagingFactory 对象 // 获得鼠标Y轴坐标增量
static IWICImagingFactory * GetImagingFactory(); float GetMouseDeltaY();
// 获取 IDWriteFactory 对象 // 获得鼠标Z轴鼠标滚轮坐标增量
static IDWriteFactory * GetWriteFactory(); float GetMouseDeltaZ();
// 获取 Miter 样式的 ID2D1StrokeStyle // 刷新输入设备状态
static ID2D1StrokeStyle * GetMiterStrokeStyle(); void Update();
// 获取 Bevel 样式的 ID2D1StrokeStyle protected:
static ID2D1StrokeStyle * GetBevelStrokeStyle(); Input();
// 获取 Round 样式的 ID2D1StrokeStyle ~Input();
static ID2D1StrokeStyle * GetRoundStrokeStyle();
protected: E2D_DISABLE_COPY(Input);
Renderer();
~Renderer(); protected:
IDirectInput8W * direct_input_;
IDirectInputDevice8W* keyboard_device_;
IDirectInputDevice8W* mouse_device_;
DIMOUSESTATE mouse_state_;
char key_buffer_[256];
E2D_DISABLE_COPY(Renderer); static Input * instance_;
};
protected:
bool show_fps_;
int render_times_;
Time last_render_time_;
D2D1_COLOR_F clear_color_;
E2DTextRenderer* text_renderer_;
IDWriteTextFormat* fps_text_format_;
IDWriteTextLayout* fps_text_layout_;
ID2D1SolidColorBrush* solid_brush_;
ID2D1HwndRenderTarget* render_target_;
static ID2D1Factory* factory_; // 音频设备
static IWICImagingFactory* imaging_factory_; class Audio
static IDWriteFactory* write_factory_; {
static ID2D1StrokeStyle* miter_stroke_style_; public:
static ID2D1StrokeStyle* bevel_stroke_style_; // 获取音频设备实例
static ID2D1StrokeStyle* round_stroke_style_; static Audio * GetInstance();
static Renderer * instance_;
};
// 销毁实例
static void DestroyInstance();
// 输入设备 // 获取 XAudio2 实例对象
class Input IXAudio2 * GetXAudio2();
{
public:
// 获取输入设备实例
static Input * GetInstance();
// 销毁输入设备实例 // 获取 MasteringVoice 实例对象
static void DestroyInstance(); IXAudio2MasteringVoice* GetMasteringVoice();
// 检测键盘某按键是否正被按下 protected:
bool IsDown( Audio();
KeyCode key
);
// 检测鼠标按键是否正被按下 virtual ~Audio();
bool IsDown(
MouseCode code
);
// 获得鼠标X轴坐标值 E2D_DISABLE_COPY(Audio);
float GetMouseX();
// 获得鼠标Y轴坐标值 protected:
float GetMouseY(); IXAudio2 * x_audio2_;
IXAudio2MasteringVoice* mastering_voice_;
// 获得鼠标坐标值 static Audio * instance_;
Point GetMousePos(); };
// 获得鼠标X轴坐标增量
float GetMouseDeltaX();
// 获得鼠标Y轴坐标增量 // 游戏
float GetMouseDeltaY(); class Game
{
public:
// 获取 Game 实例
static Game * GetInstance();
// 获得鼠标Z轴鼠标滚轮坐标增量 // 销毁实例
float GetMouseDeltaZ(); static void DestroyInstance();
// 刷新输入设备状态 // 启动游戏
void Update(); void Start();
protected: // 暂停游戏
Input(); void Pause();
~Input(); // 继续游戏
void Resume();
E2D_DISABLE_COPY(Input); // 结束游戏
void Quit();
protected: // 游戏是否暂停
IDirectInput8W * direct_input_; bool IsPaused();
IDirectInputDevice8W* keyboard_device_;
IDirectInputDevice8W* mouse_device_;
DIMOUSESTATE mouse_state_;
char key_buffer_[256];
static Input * instance_; // 场景入栈
}; void EnterScene(
Scene * scene /* 下一个场景的指针 */
);
// 场景入栈
void EnterScene(
Transition * transition /* 场景动画 */
);
// 音频设备 // 获取当前场景
class Audio Scene * GetCurrentScene();
{
public:
// 获取音频设备实例
static Audio * GetInstance();
// 销毁实例 // 是否正在进行场景动画
static void DestroyInstance(); bool IsTransitioning() const;
// 获取 XAudio2 实例对象 // 更新场景内容
IXAudio2 * GetXAudio2(); void UpdateScene();
// 获取 MasteringVoice 实例对象 // 渲染场景画面
IXAudio2MasteringVoice* GetMasteringVoice(); void DrawScene();
protected: protected:
Audio(); Game();
virtual ~Audio(); ~Game();
E2D_DISABLE_COPY(Audio); E2D_DISABLE_COPY(Game);
protected: private:
IXAudio2 * x_audio2_; bool quit_;
IXAudio2MasteringVoice* mastering_voice_; bool paused_;
Scene* curr_scene_;
Scene* next_scene_;
Transition* transition_;
static Audio * instance_; static Game * instance_;
}; };
// 游戏 // 垃圾回收池
class Game class GC
{ {
public: public:
// 获取 Game 实例 // 获取 GC 实例
static Game * GetInstance(); static GC * GetInstance();
// 销毁实例 // 自动释放
static void DestroyInstance(); void AutoRelease(
Ref* ref
);
// 启动游戏 // 安全地释放对象
void Start(); void SafeRelease(
Ref* ref
);
// 暂停游戏 // 刷新内存池
void Pause(); void Flush();
// 继续游戏 private:
void Resume(); GC();
// 结束游戏 ~GC();
void Quit();
// 游戏是否暂停 E2D_DISABLE_COPY(GC);
bool IsPaused();
// 场景入栈 private:
void EnterScene( bool notifyed_;
Scene * scene /* 下一个场景的指针 */ bool cleanup_;
); std::set<Ref*> pool_;
};
// 场景入栈 }
void EnterScene(
Transition * transition /* 场景动画 */
);
// 获取当前场景
Scene * GetCurrentScene();
// 是否正在进行场景动画
bool IsTransitioning() const;
// 更新场景内容
void UpdateScene();
// 渲染场景画面
void DrawScene();
protected:
Game();
~Game();
E2D_DISABLE_COPY(Game);
private:
bool quit_;
bool paused_;
Scene* curr_scene_;
Scene* next_scene_;
Transition* transition_;
static Game * instance_;
};
// 垃圾回收池
class GC
{
public:
// 获取 GC 实例
static GC * GetInstance();
// 自动释放
void AutoRelease(
Ref* ref
);
// 安全地释放对象
void SafeRelease(
Ref* ref
);
// 刷新内存池
void Flush();
private:
GC();
~GC();
E2D_DISABLE_COPY(GC);
private:
bool notifyed_;
bool cleanup_;
std::set<Ref*> pool_;
};
}

View File

@ -6,505 +6,505 @@ namespace e2d
{ {
// 随机数产生器 // 随机数产生器
class Random class Random
{
public:
// 取得范围内的一个整型随机数
template<typename T>
static inline T Range(T min, T max)
{
return e2d::Random::RandomInt(min, max);
}
// 取得范围内的一个浮点数随机数
static inline float Range(float min, float max)
{
return e2d::Random::RandomReal(min, max);
}
// 取得范围内的一个浮点数随机数
static inline double Range(double min, double max)
{
return e2d::Random::RandomReal(min, max);
}
private:
template<typename T>
static T RandomInt(T min, T max)
{ {
std::uniform_int_distribution<T> dist(min, max); public:
return dist(Random::GetEngine()); // 取得范围内的一个整型随机数
} template<typename T>
static inline T Range(T min, T max)
{
return e2d::Random::RandomInt(min, max);
}
template<typename T> // 取得范围内的一个浮点数随机数
static T RandomReal(T min, T max) static inline float Range(float min, float max)
{
return e2d::Random::RandomReal(min, max);
}
// 取得范围内的一个浮点数随机数
static inline double Range(double min, double max)
{
return e2d::Random::RandomReal(min, max);
}
private:
template<typename T>
static T RandomInt(T min, T max)
{
std::uniform_int_distribution<T> dist(min, max);
return dist(Random::GetEngine());
}
template<typename T>
static T RandomReal(T min, T max)
{
std::uniform_real_distribution<T> dist(min, max);
return dist(Random::GetEngine());
}
// 获取随机数产生器
static std::default_random_engine &GetEngine();
};
// 音乐
class Music :
public Ref
{ {
std::uniform_real_distribution<T> dist(min, max); friend class VoiceCallback;
return dist(Random::GetEngine());
} public:
Music();
// 获取随机数产生器
static std::default_random_engine &GetEngine(); explicit Music(
}; const e2d::String& file_path /* 音乐文件路径 */
);
// 音乐 explicit Music(
class Music : const Resource& res /* 音乐资源 */
public Ref );
{
friend class VoiceCallback; virtual ~Music();
public: // 打开音乐文件
Music(); bool Open(
const e2d::String& file_path /* 音乐文件路径 */
explicit Music( );
const e2d::String& file_path /* 音乐文件路径 */
); // 打开音乐资源
bool Open(
explicit Music( const Resource& res
const Resource& res /* 音乐资源 */ );
);
// 播放
virtual ~Music(); bool Play(
int loopCount = 0
// 打开音乐文件 );
bool Open(
const e2d::String& file_path /* 音乐文件路径 */ // 暂停
); void Pause();
// 打开音乐资源 // 继续
bool Open( void Resume();
const Resource& res
); // 停止
void Stop();
// 播放
bool Play( // 关闭并回收资源
int loopCount = 0 void Close();
);
// 是否正在播放
// 暂停 bool IsPlaying() const;
void Pause();
// 设置音量
// 继续 bool SetVolume(
void Resume(); float volume
);
// 停止
void Stop(); // 设置播放结束时的执行函数
void SetCallbackOnEnd(
// 关闭并回收资源 const Function& func
void Close(); );
// 是否正在播放 // 设置循环播放中每一次播放结束时的执行函数
bool IsPlaying() const; void SetCallbackOnLoopEnd(
const Function& func
// 设置音量 );
bool SetVolume(
float volume // 获取 IXAudio2SourceVoice 对象
); IXAudio2SourceVoice * GetSourceVoice() const;
// 设置播放结束时的执行函数 protected:
void SetCallbackOnEnd( bool _readMMIO();
const Function& func
); bool _resetFile();
// 设置循环播放中每一次播放结束时的执行函数 bool _read(
void SetCallbackOnLoopEnd( BYTE* buffer,
const Function& func DWORD size_to_read
); );
// 获取 IXAudio2SourceVoice 对象 bool _findMediaFileCch(
IXAudio2SourceVoice * GetSourceVoice() const; wchar_t* dest_path,
int cch_dest,
protected: const wchar_t * file_name
bool _readMMIO(); );
bool _resetFile(); protected:
bool opened_;
bool _read( DWORD size_;
BYTE* buffer, CHAR* buffer_;
DWORD size_to_read BYTE* wave_data_;
); HMMIO hmmio_;
MMCKINFO ck_;
bool _findMediaFileCch( MMCKINFO ck_riff_;
wchar_t* dest_path, WAVEFORMATEX* wfx_;
int cch_dest, VoiceCallback callback_;
const wchar_t * file_name IXAudio2SourceVoice* voice_;
); };
protected:
bool opened_; // 音乐播放器
DWORD size_; class Player
CHAR* buffer_; {
BYTE* wave_data_; public:
HMMIO hmmio_; // 获取播放器实例
MMCKINFO ck_; static Player * GetInstance();
MMCKINFO ck_riff_;
WAVEFORMATEX* wfx_; // 销毁实例
VoiceCallback callback_; static void DestroyInstance();
IXAudio2SourceVoice* voice_;
}; // 预加载音乐资源
bool Preload(
const String& file_path /* 音乐文件路径 */
// 音乐播放器 );
class Player
{ // 播放音乐
public: bool Play(
// 获取播放器实例 const String& file_path, /* 音乐文件路径 */
static Player * GetInstance(); int loop_count = 0 /* 重复播放次数,设置 -1 为循环播放 */
);
// 销毁实例
static void DestroyInstance(); // 暂停音乐
void Pause(
// 预加载音乐资源 const String& file_path /* 音乐文件路径 */
bool Preload( );
const String& file_path /* 音乐文件路径 */
); // 继续播放音乐
void Resume(
// 播放音乐 const String& file_path /* 音乐文件路径 */
bool Play( );
const String& file_path, /* 音乐文件路径 */
int loop_count = 0 /* 重复播放次数,设置 -1 为循环播放 */ // 停止音乐
); void Stop(
const String& file_path /* 音乐文件路径 */
// 暂停音乐 );
void Pause(
const String& file_path /* 音乐文件路径 */ // 获取音乐播放状态
); bool IsPlaying(
const String& file_path /* 音乐文件路径 */
// 继续播放音乐 );
void Resume(
const String& file_path /* 音乐文件路径 */ // 预加载音乐资源
); bool Preload(
const Resource& res /* 音乐资源 */
// 停止音乐 );
void Stop(
const String& file_path /* 音乐文件路径 */ // 播放音乐
); bool Play(
const Resource& res, /* 音乐资源 */
// 获取音乐播放状态 int loop_count = 0 /* 重复播放次数,设置 -1 为循环播放 */
bool IsPlaying( );
const String& file_path /* 音乐文件路径 */
); // 暂停音乐
void Pause(
// 预加载音乐资源 const Resource& res /* 音乐资源 */
bool Preload( );
const Resource& res /* 音乐资源 */
); // 继续播放音乐
void Resume(
// 播放音乐 const Resource& res /* 音乐资源 */
bool Play( );
const Resource& res, /* 音乐资源 */
int loop_count = 0 /* 重复播放次数,设置 -1 为循环播放 */ // 停止音乐
); void Stop(
const Resource& res /* 音乐资源 */
// 暂停音乐 );
void Pause(
const Resource& res /* 音乐资源 */ // 获取音乐播放状态
); bool IsPlaying(
const Resource& res /* 音乐资源 */
// 继续播放音乐 );
void Resume(
const Resource& res /* 音乐资源 */ // 获取音量
); float GetVolume();
// 停止音乐 // 设置音量
void Stop( void SetVolume(
const Resource& res /* 音乐资源 */ float volume /* 音量范围为 -224 ~ 2240 是静音1 是正常音量 */
); );
// 获取音乐播放状态 // 暂停所有音乐
bool IsPlaying( void PauseAll();
const Resource& res /* 音乐资源 */
); // 继续播放所有音乐
void ResumeAll();
// 获取音量
float GetVolume(); // 停止所有音乐
void StopAll();
// 设置音量
void SetVolume( // 清空音乐缓存
float volume /* 音量范围为 -224 ~ 2240 是静音1 是正常音量 */ void ClearCache();
);
protected:
// 暂停所有音乐 Player();
void PauseAll();
~Player();
// 继续播放所有音乐
void ResumeAll(); E2D_DISABLE_COPY(Player);
// 停止所有音乐 protected:
void StopAll(); float volume_;
std::map<size_t, Music*> musics_;
// 清空音乐缓存
void ClearCache(); static Player * instance_;
};
protected:
Player();
~Player();
E2D_DISABLE_COPY(Player);
protected:
float volume_;
std::map<size_t, Music*> musics_;
static Player * instance_;
};
class Timer; class Timer;
// 定时任务 // 定时任务
class Task : class Task :
public Ref public Ref
{ {
friend class Timer; friend class Timer;
public: public:
explicit Task( explicit Task(
const Function& func, /* 执行函数 */ const Function& func, /* 执行函数 */
const String& name = L"" /* 任务名称 */ const String& name = L"" /* 任务名称 */
); );
explicit Task( explicit Task(
const Function& func, /* 执行函数 */ const Function& func, /* 执行函数 */
float delay, /* 时间间隔(秒) */ float delay, /* 时间间隔(秒) */
int times = -1, /* 执行次数(设 -1 为永久执行) */ int times = -1, /* 执行次数(设 -1 为永久执行) */
const String& name = L"" /* 任务名称 */ const String& name = L"" /* 任务名称 */
); );
// 启动任务 // 启动任务
void Start(); void Start();
// 停止任务 // 停止任务
void Stop(); void Stop();
// 任务是否正在执行 // 任务是否正在执行
bool IsRunning() const; bool IsRunning() const;
// 获取任务名称 // 获取任务名称
const String& GetName() const; const String& GetName() const;
protected: protected:
// 执行任务 // 执行任务
void Update(); void Update();
// 任务是否就绪 // 任务是否就绪
bool IsReady() const; bool IsReady() const;
protected: protected:
bool running_; bool running_;
bool stopped_; bool stopped_;
int run_times_; int run_times_;
int total_times_; int total_times_;
String name_; String name_;
Duration delay_; Duration delay_;
Time last_time_; Time last_time_;
Function callback_; Function callback_;
}; };
// 定时器 // 定时器
class Timer class Timer
{ {
public: public:
// 获取定时器实例 // 获取定时器实例
static Timer * GetInstance(); static Timer * GetInstance();
// 添加任务 // 添加任务
void AddTask( void AddTask(
Task * task Task * task
); );
// 启动任务 // 启动任务
void StartTasks( void StartTasks(
const String& task_name const String& task_name
); );
// 停止任务 // 停止任务
void StopTasks( void StopTasks(
const String& task_name const String& task_name
); );
// 移除任务 // 移除任务
void RemoveTasks( void RemoveTasks(
const String& task_name const String& task_name
); );
// 启动所有任务 // 启动所有任务
void StartAllTasks(); void StartAllTasks();
// 停止所有任务 // 停止所有任务
void StopAllTasks(); void StopAllTasks();
// 移除所有任务 // 移除所有任务
void RemoveAllTasks(); void RemoveAllTasks();
// 更新定时器 // 更新定时器
void Update(); void Update();
// 刷新所有任务计时 // 刷新所有任务计时
void UpdateTime(); void UpdateTime();
private: private:
Timer(); Timer();
~Timer(); ~Timer();
E2D_DISABLE_COPY(Timer); E2D_DISABLE_COPY(Timer);
private: private:
std::vector<Task*> tasks_; std::vector<Task*> tasks_;
}; };
// 数据管理工具 // 数据管理工具
class Data class Data
{ {
public: public:
Data( Data(
const String& key, /* 键值 */ const String& key, /* 键值 */
const String& field = L"Defalut" /* 字段名称 */ const String& field = L"Defalut" /* 字段名称 */
); );
// 该数据是否存在 // 该数据是否存在
bool Exists() const; bool Exists() const;
// 保存 int 类型的值 // 保存 int 类型的值
bool SaveInt( bool SaveInt(
int value int value
); );
// 保存 float 类型的值 // 保存 float 类型的值
bool SaveFloat( bool SaveFloat(
float value float value
); );
// 保存 double 类型的值 // 保存 double 类型的值
bool SaveDouble( bool SaveDouble(
double value double value
); );
// 保存 bool 类型的值 // 保存 bool 类型的值
bool SaveBool( bool SaveBool(
bool value bool value
); );
// 保存 String 类型的值 // 保存 String 类型的值
bool SaveString( bool SaveString(
const String& value const String& value
); );
// 获取 int 类型的值 // 获取 int 类型的值
int GetInt() const; int GetInt() const;
// 获取 float 类型的值 // 获取 float 类型的值
float GetFloat() const; float GetFloat() const;
// 获取 double 类型的值 // 获取 double 类型的值
double GetDouble() const; double GetDouble() const;
// 获取 bool 类型的值 // 获取 bool 类型的值
bool GetBool() const; bool GetBool() const;
// 获取 字符串 类型的值 // 获取 字符串 类型的值
String GetString(); String GetString();
protected: protected:
String key_; String key_;
String field_; String field_;
const String& data_path_; const String& data_path_;
}; };
// 文件 // 文件
class File class File
{ {
public: public:
File(); File();
File( File(
const String& file_name const String& file_name
); );
virtual ~File(); virtual ~File();
// 打开文件 // 打开文件
bool Open( bool Open(
const String& file_name const String& file_name
); );
// 文件或文件夹是否存在 // 文件或文件夹是否存在
bool Exists() const; bool Exists() const;
// 是否是文件夹 // 是否是文件夹
bool IsFolder() const; bool IsFolder() const;
// 删除文件 // 删除文件
bool Delete(); bool Delete();
// 获取文件路径 // 获取文件路径
const String& GetPath() const; const String& GetPath() const;
// 获取文件扩展名 // 获取文件扩展名
String GetExtension() const; String GetExtension() const;
// 释放资源到临时文件目录 // 释放资源到临时文件目录
static File Extract( static File Extract(
int resource_name, /* 资源名称 */ int resource_name, /* 资源名称 */
const String& resource_type, /* 资源类型 */ const String& resource_type, /* 资源类型 */
const String& dest_file_name /* 目标文件名 */ const String& dest_file_name /* 目标文件名 */
); );
// 添加文件搜索路径 // 添加文件搜索路径
static void AddSearchPath( static void AddSearchPath(
const String& path const String& path
); );
// 创建文件夹 // 创建文件夹
static bool CreateFolder( static bool CreateFolder(
const String& dir_path /* 文件夹路径 */ const String& dir_path /* 文件夹路径 */
); );
// 弹出打开文件对话框 // 弹出打开文件对话框
static File ShowOpenDialog( static File ShowOpenDialog(
const String& title = L"打开", /* 对话框标题 */ const String& title = L"打开", /* 对话框标题 */
const String& filter = L"" /* 筛选扩展名,例如 "*.jpg;*.jpeg" */ const String& filter = L"" /* 筛选扩展名,例如 "*.jpg;*.jpeg" */
); );
// 弹出保存文件对话框 // 弹出保存文件对话框
static File ShowSaveDialog( static File ShowSaveDialog(
const String& title = L"保存", /* 对话框标题 */ const String& title = L"保存", /* 对话框标题 */
const String& def_file = L"", /* 默认保存的文件名 */ const String& def_file = L"", /* 默认保存的文件名 */
const String& def_ext = L"" /* 默认追加的扩展名,例如 "txt" */ const String& def_ext = L"" /* 默认追加的扩展名,例如 "txt" */
); );
protected: protected:
DWORD attributes_; DWORD attributes_;
String file_path_; String file_path_;
static std::list<String> search_paths_; static std::list<String> search_paths_;
}; };
// 路径 // 路径
class Path class Path
{ {
friend class Game; friend class Game;
public: public:
// 获取数据的默认保存路径 // 获取数据的默认保存路径
static const String& GetDataPath(); static const String& GetDataPath();
// 获取临时文件目录 // 获取临时文件目录
static const String& GetTemporaryPath(); static const String& GetTemporaryPath();
// 获取 LocalAppData 目录 // 获取 LocalAppData 目录
static const String& GetLocalAppDataPath(); static const String& GetLocalAppDataPath();
// 获取当前程序的运行路径 // 获取当前程序的运行路径
static const String& GetExeFilePath(); static const String& GetExeFilePath();
}; };
} }

View File

@ -5,145 +5,145 @@ namespace e2d
{ {
class Game; class Game;
class Scene; class Scene;
// 场景过渡 // 场景过渡
class Transition : class Transition :
public Ref public Ref
{ {
friend class Game; friend class Game;
public: public:
explicit Transition( explicit Transition(
Scene* scene, Scene* scene,
float duration float duration
); );
virtual ~Transition(); virtual ~Transition();
// 场景过渡动画是否结束 // 场景过渡动画是否结束
bool IsDone(); bool IsDone();
protected: protected:
// 初始化场景过渡动画 // 初始化场景过渡动画
virtual bool Init( virtual bool Init(
Game * game, Game * game,
Scene * prev Scene * prev
); );
// 更新场景过渡动画 // 更新场景过渡动画
virtual void Update(); virtual void Update();
// 渲染场景过渡动画 // 渲染场景过渡动画
virtual void Draw(); virtual void Draw();
// 停止场景过渡动画 // 停止场景过渡动画
virtual void Stop(); virtual void Stop();
// 重置场景过渡动画 // 重置场景过渡动画
virtual void Reset() { }; virtual void Reset() { };
protected: protected:
bool done_; bool done_;
float duration_; float duration_;
float delta_; float delta_;
Time started_; Time started_;
Scene* out_scene_; Scene* out_scene_;
Scene* in_scene_; Scene* in_scene_;
ID2D1Layer * out_layer_; ID2D1Layer * out_layer_;
ID2D1Layer * in_layer_; ID2D1Layer * in_layer_;
D2D1_LAYER_PARAMETERS out_layer_param_; D2D1_LAYER_PARAMETERS out_layer_param_;
D2D1_LAYER_PARAMETERS in_layer_param_; D2D1_LAYER_PARAMETERS in_layer_param_;
}; };
// 淡入淡出过渡 // 淡入淡出过渡
class FadeTransition : class FadeTransition :
public Transition public Transition
{ {
public: public:
explicit FadeTransition( explicit FadeTransition(
Scene* scene, /* 切换的场景 */ Scene* scene, /* 切换的场景 */
float duration /* 动画持续时长 */ float duration /* 动画持续时长 */
); );
protected: protected:
// 更新动画 // 更新动画
virtual void Update() override; virtual void Update() override;
virtual bool Init( virtual bool Init(
Game * game, Game * game,
Scene * prev Scene * prev
) override; ) override;
}; };
// 渐变过渡 // 渐变过渡
class EmergeTransition : class EmergeTransition :
public Transition public Transition
{ {
public: public:
explicit EmergeTransition( explicit EmergeTransition(
Scene* scene, /* 切换的场景 */ Scene* scene, /* 切换的场景 */
float duration /* 浮现动画持续时长 */ float duration /* 浮现动画持续时长 */
); );
protected: protected:
virtual void Update() override; virtual void Update() override;
virtual bool Init( virtual bool Init(
Game * game, Game * game,
Scene * prev Scene * prev
) override; ) override;
}; };
// 盒状过渡 // 盒状过渡
class BoxTransition : class BoxTransition :
public Transition public Transition
{ {
public: public:
explicit BoxTransition( explicit BoxTransition(
Scene* scene, /* 切换的场景 */ Scene* scene, /* 切换的场景 */
float duration /* 动画持续时长 */ float duration /* 动画持续时长 */
); );
protected: protected:
virtual void Update() override; virtual void Update() override;
virtual bool Init( virtual bool Init(
Game * game, Game * game,
Scene * prev Scene * prev
) override; ) override;
}; };
// 移入过渡 // 移入过渡
class MoveTransition : class MoveTransition :
public Transition public Transition
{ {
public: public:
explicit MoveTransition( explicit MoveTransition(
Scene* scene, /* 切换的场景 */ Scene* scene, /* 切换的场景 */
float moveDuration, /* 场景移动动画持续时长 */ float moveDuration, /* 场景移动动画持续时长 */
Direction direction = Direction::Left /* 场景移动方向 */ Direction direction = Direction::Left /* 场景移动方向 */
); );
protected: protected:
virtual void Update() override; virtual void Update() override;
virtual bool Init( virtual bool Init(
Game * game, Game * game,
Scene * prev Scene * prev
) override; ) override;
virtual void Reset() override; virtual void Reset() override;
protected: protected:
Direction direction_; Direction direction_;
Point pos_delta_; Point pos_delta_;
Point start_pos_; Point start_pos_;
}; };
} }

View File

@ -19,16 +19,17 @@
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\core\e2dnode.h" />
<ClInclude Include="..\..\core\easy2d.h" /> <ClInclude Include="..\..\core\easy2d.h" />
<ClInclude Include="..\..\core\e2daction.h" /> <ClInclude Include="..\..\core\e2daction.h" />
<ClInclude Include="..\..\core\e2dcommon.h" /> <ClInclude Include="..\..\core\e2dutil.h" />
<ClInclude Include="..\..\core\e2dcomponent.h" /> <ClInclude Include="..\..\core\e2dcomponent.h" />
<ClInclude Include="..\..\core\e2devent.h" /> <ClInclude Include="..\..\core\e2devent.h" />
<ClInclude Include="..\..\core\e2dimpl.h" /> <ClInclude Include="..\..\core\e2dimpl.h" />
<ClInclude Include="..\..\core\e2dmodule.h" /> <ClInclude Include="..\..\core\e2dmodule.h" />
<ClInclude Include="..\..\core\e2dmacros.h" /> <ClInclude Include="..\..\core\e2dmacros.h" />
<ClInclude Include="..\..\core\e2dmanager.h" /> <ClInclude Include="..\..\core\e2dmanager.h" />
<ClInclude Include="..\..\core\e2dutil.h" /> <ClInclude Include="..\..\core\e2dtool.h" />
<ClInclude Include="..\..\core\e2dtransition.h" /> <ClInclude Include="..\..\core\e2dtransition.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -80,14 +81,14 @@
<ClCompile Include="..\..\core\Event\KeyEvent.cpp" /> <ClCompile Include="..\..\core\Event\KeyEvent.cpp" />
<ClCompile Include="..\..\core\Event\MouseEvent.cpp" /> <ClCompile Include="..\..\core\Event\MouseEvent.cpp" />
<ClCompile Include="..\..\core\Manager\CollisionManager.cpp" /> <ClCompile Include="..\..\core\Manager\CollisionManager.cpp" />
<ClCompile Include="..\..\core\Node\Button.cpp" />
<ClCompile Include="..\..\core\Node\Canvas.cpp" /> <ClCompile Include="..\..\core\Node\Canvas.cpp" />
<ClCompile Include="..\..\core\Node\Scene.cpp" /> <ClCompile Include="..\..\core\Node\Scene.cpp" />
<ClCompile Include="..\..\core\Node\Menu.cpp" />
<ClCompile Include="..\..\core\Node\Node.cpp" /> <ClCompile Include="..\..\core\Node\Node.cpp" />
<ClCompile Include="..\..\core\Node\Sprite.cpp" /> <ClCompile Include="..\..\core\Node\Sprite.cpp" />
<ClCompile Include="..\..\core\Node\Text.cpp" /> <ClCompile Include="..\..\core\Node\Text.cpp" />
<ClCompile Include="..\..\core\Node\ToggleButton.cpp" /> <ClCompile Include="..\..\core\Component\Button.cpp" />
<ClCompile Include="..\..\core\Component\ToggleButton.cpp" />
<ClCompile Include="..\..\core\Component\Menu.cpp" />
<ClCompile Include="..\..\core\Tool\Data.cpp" /> <ClCompile Include="..\..\core\Tool\Data.cpp" />
<ClCompile Include="..\..\core\Tool\File.cpp" /> <ClCompile Include="..\..\core\Tool\File.cpp" />
<ClCompile Include="..\..\core\Tool\Music.cpp" /> <ClCompile Include="..\..\core\Tool\Music.cpp" />

View File

@ -32,15 +32,16 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\core\easy2d.h" /> <ClInclude Include="..\..\core\easy2d.h" />
<ClInclude Include="..\..\core\e2daction.h" /> <ClInclude Include="..\..\core\e2daction.h" />
<ClInclude Include="..\..\core\e2dcommon.h" />
<ClInclude Include="..\..\core\e2dmacros.h" /> <ClInclude Include="..\..\core\e2dmacros.h" />
<ClInclude Include="..\..\core\e2dmanager.h" /> <ClInclude Include="..\..\core\e2dmanager.h" />
<ClInclude Include="..\..\core\e2dtransition.h" /> <ClInclude Include="..\..\core\e2dtransition.h" />
<ClInclude Include="..\..\core\e2devent.h" /> <ClInclude Include="..\..\core\e2devent.h" />
<ClInclude Include="..\..\core\e2dutil.h" />
<ClInclude Include="..\..\core\e2dmodule.h" /> <ClInclude Include="..\..\core\e2dmodule.h" />
<ClInclude Include="..\..\core\e2dcomponent.h" /> <ClInclude Include="..\..\core\e2dcomponent.h" />
<ClInclude Include="..\..\core\e2dimpl.h" /> <ClInclude Include="..\..\core\e2dimpl.h" />
<ClInclude Include="..\..\core\e2dnode.h" />
<ClInclude Include="..\..\core\e2dtool.h" />
<ClInclude Include="..\..\core\e2dutil.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\core\Action\Action.cpp"> <ClCompile Include="..\..\core\Action\Action.cpp">
@ -154,12 +155,6 @@
<ClCompile Include="..\..\core\Custom\VoiceCallback.cpp"> <ClCompile Include="..\..\core\Custom\VoiceCallback.cpp">
<Filter>Custom</Filter> <Filter>Custom</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\Node\Button.cpp">
<Filter>Node</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Node\Menu.cpp">
<Filter>Node</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Node\Node.cpp"> <ClCompile Include="..\..\core\Node\Node.cpp">
<Filter>Node</Filter> <Filter>Node</Filter>
</ClCompile> </ClCompile>
@ -169,9 +164,6 @@
<ClCompile Include="..\..\core\Node\Text.cpp"> <ClCompile Include="..\..\core\Node\Text.cpp">
<Filter>Node</Filter> <Filter>Node</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\Node\ToggleButton.cpp">
<Filter>Node</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Tool\Data.cpp"> <ClCompile Include="..\..\core\Tool\Data.cpp">
<Filter>Tool</Filter> <Filter>Tool</Filter>
</ClCompile> </ClCompile>
@ -244,5 +236,14 @@
<ClCompile Include="..\..\core\Action\Callback.cpp"> <ClCompile Include="..\..\core\Action\Callback.cpp">
<Filter>Action</Filter> <Filter>Action</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\Component\Button.cpp">
<Filter>Component</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Component\Menu.cpp">
<Filter>Component</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Component\ToggleButton.cpp">
<Filter>Component</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -163,16 +163,17 @@
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\core\e2dnode.h" />
<ClInclude Include="..\..\core\easy2d.h" /> <ClInclude Include="..\..\core\easy2d.h" />
<ClInclude Include="..\..\core\e2daction.h" /> <ClInclude Include="..\..\core\e2daction.h" />
<ClInclude Include="..\..\core\e2dcommon.h" /> <ClInclude Include="..\..\core\e2dutil.h" />
<ClInclude Include="..\..\core\e2dcomponent.h" /> <ClInclude Include="..\..\core\e2dcomponent.h" />
<ClInclude Include="..\..\core\e2devent.h" /> <ClInclude Include="..\..\core\e2devent.h" />
<ClInclude Include="..\..\core\e2dimpl.h" /> <ClInclude Include="..\..\core\e2dimpl.h" />
<ClInclude Include="..\..\core\e2dmodule.h" /> <ClInclude Include="..\..\core\e2dmodule.h" />
<ClInclude Include="..\..\core\e2dmacros.h" /> <ClInclude Include="..\..\core\e2dmacros.h" />
<ClInclude Include="..\..\core\e2dmanager.h" /> <ClInclude Include="..\..\core\e2dmanager.h" />
<ClInclude Include="..\..\core\e2dutil.h" /> <ClInclude Include="..\..\core\e2dtool.h" />
<ClInclude Include="..\..\core\e2dtransition.h" /> <ClInclude Include="..\..\core\e2dtransition.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -224,14 +225,14 @@
<ClCompile Include="..\..\core\Event\KeyEvent.cpp" /> <ClCompile Include="..\..\core\Event\KeyEvent.cpp" />
<ClCompile Include="..\..\core\Event\MouseEvent.cpp" /> <ClCompile Include="..\..\core\Event\MouseEvent.cpp" />
<ClCompile Include="..\..\core\Manager\CollisionManager.cpp" /> <ClCompile Include="..\..\core\Manager\CollisionManager.cpp" />
<ClCompile Include="..\..\core\Node\Button.cpp" />
<ClCompile Include="..\..\core\Node\Canvas.cpp" /> <ClCompile Include="..\..\core\Node\Canvas.cpp" />
<ClCompile Include="..\..\core\Node\Scene.cpp" /> <ClCompile Include="..\..\core\Node\Scene.cpp" />
<ClCompile Include="..\..\core\Node\Menu.cpp" />
<ClCompile Include="..\..\core\Node\Node.cpp" /> <ClCompile Include="..\..\core\Node\Node.cpp" />
<ClCompile Include="..\..\core\Node\Sprite.cpp" /> <ClCompile Include="..\..\core\Node\Sprite.cpp" />
<ClCompile Include="..\..\core\Node\Text.cpp" /> <ClCompile Include="..\..\core\Node\Text.cpp" />
<ClCompile Include="..\..\core\Node\ToggleButton.cpp" /> <ClCompile Include="..\..\core\Component\Button.cpp" />
<ClCompile Include="..\..\core\Component\ToggleButton.cpp" />
<ClCompile Include="..\..\core\Component\Menu.cpp" />
<ClCompile Include="..\..\core\Tool\Data.cpp" /> <ClCompile Include="..\..\core\Tool\Data.cpp" />
<ClCompile Include="..\..\core\Tool\File.cpp" /> <ClCompile Include="..\..\core\Tool\File.cpp" />
<ClCompile Include="..\..\core\Tool\Music.cpp" /> <ClCompile Include="..\..\core\Tool\Music.cpp" />

View File

@ -32,15 +32,16 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\core\easy2d.h" /> <ClInclude Include="..\..\core\easy2d.h" />
<ClInclude Include="..\..\core\e2daction.h" /> <ClInclude Include="..\..\core\e2daction.h" />
<ClInclude Include="..\..\core\e2dcommon.h" />
<ClInclude Include="..\..\core\e2dmacros.h" /> <ClInclude Include="..\..\core\e2dmacros.h" />
<ClInclude Include="..\..\core\e2dmanager.h" /> <ClInclude Include="..\..\core\e2dmanager.h" />
<ClInclude Include="..\..\core\e2dtransition.h" /> <ClInclude Include="..\..\core\e2dtransition.h" />
<ClInclude Include="..\..\core\e2devent.h" /> <ClInclude Include="..\..\core\e2devent.h" />
<ClInclude Include="..\..\core\e2dutil.h" />
<ClInclude Include="..\..\core\e2dmodule.h" /> <ClInclude Include="..\..\core\e2dmodule.h" />
<ClInclude Include="..\..\core\e2dcomponent.h" /> <ClInclude Include="..\..\core\e2dcomponent.h" />
<ClInclude Include="..\..\core\e2dimpl.h" /> <ClInclude Include="..\..\core\e2dimpl.h" />
<ClInclude Include="..\..\core\e2dnode.h" />
<ClInclude Include="..\..\core\e2dtool.h" />
<ClInclude Include="..\..\core\e2dutil.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\core\Action\Action.cpp"> <ClCompile Include="..\..\core\Action\Action.cpp">
@ -154,12 +155,6 @@
<ClCompile Include="..\..\core\Custom\VoiceCallback.cpp"> <ClCompile Include="..\..\core\Custom\VoiceCallback.cpp">
<Filter>Custom</Filter> <Filter>Custom</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\Node\Button.cpp">
<Filter>Node</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Node\Menu.cpp">
<Filter>Node</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Node\Node.cpp"> <ClCompile Include="..\..\core\Node\Node.cpp">
<Filter>Node</Filter> <Filter>Node</Filter>
</ClCompile> </ClCompile>
@ -169,9 +164,6 @@
<ClCompile Include="..\..\core\Node\Text.cpp"> <ClCompile Include="..\..\core\Node\Text.cpp">
<Filter>Node</Filter> <Filter>Node</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\Node\ToggleButton.cpp">
<Filter>Node</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Tool\Data.cpp"> <ClCompile Include="..\..\core\Tool\Data.cpp">
<Filter>Tool</Filter> <Filter>Tool</Filter>
</ClCompile> </ClCompile>
@ -244,5 +236,14 @@
<ClCompile Include="..\..\core\Action\Callback.cpp"> <ClCompile Include="..\..\core\Action\Callback.cpp">
<Filter>Action</Filter> <Filter>Action</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\core\Component\Button.cpp">
<Filter>Component</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Component\Menu.cpp">
<Filter>Component</Filter>
</ClCompile>
<ClCompile Include="..\..\core\Component\ToggleButton.cpp">
<Filter>Component</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>