Magic_Game/Easy2D/easy2d.h

1666 lines
36 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************
* Easy2D Game Engine
*
* Website: http://www.easy2d.cn
* Github: https://github.com/Nomango/Easy2D
* Gitee: https://gitee.com/werelone/Easy2D
******************************************************/
#pragma once
#ifndef __cplusplus
#error Easy2D is only for C++
#endif
#if _MSC_VER < 1900
#error Do Visual Studio 2015/2017 specific stuff
#endif
#include <Windows.h>
#include <tchar.h>
#include <atltypes.h>
#include <atlimage.h>
#include <vector>
#include <stack>
#include <functional>
#include <random>
#if defined(UNICODE) && (_DEBUG)
#pragma comment(lib,"Easy2Ddw.lib")
#elif !defined(UNICODE) && (_DEBUG)
#pragma comment(lib,"Easy2Dd.lib")
#elif defined(UNICODE)
#pragma comment(lib,"Easy2Dw.lib")
#elif !defined(UNICODE)
#pragma comment(lib,"Easy2D.lib")
#endif
// Type Declare
typedef CPoint CVector;
typedef unsigned int VK_KEY;
typedef std::function<void()> CLICK_CALLBACK;
typedef std::function<void()> TIMER_CALLBACK;
typedef std::function<void(VK_KEY)> KEY_CALLBACK;
typedef std::function<void()> MOUSE_CALLBACK;
#ifdef UNICODE
typedef std::wstring TString;
#else
typedef std::string TString;
#endif
// Classes Declare
namespace easy2d
{
class App;
class Scene;
class Object;
class Node;
class FontStyle;
class Color;
class RectNode;
class Text;
class Image;
class BatchNode;
class MouseNode;
class Button;
class TextButton;
class ImageButton;
class Layer;
class Sprite;
class BatchSprite;
class Shape;
class Circle;
class Rectangle;
class Action;
class Animation;
class ActionMoveTo;
class ActionMoveBy;
class ActionScaleTo;
class ActionScaleBy;
class ActionOpacityTo;
class ActionOpacityBy;
class ActionFadeIn;
class ActionFadeOut;
class ActionFrames;
class ActionDelay;
class ActionCallback;
class ActionTwo;
class ActionSequence;
class ActionNeverStop;
class MouseMsg;
class KeyMsg;
class FreePool;
class FileUtils;
class MusicUtils;
class ActionManager;
}
// Classes
namespace easy2d
{
class App
{
friend Scene;
public:
App();
~App();
// <20><><EFBFBD>ڿ<EFBFBD>ѡģʽ
enum MODE { SHOW_CONSOLE = 1, NO_CLOSE = 2, NO_MINI_MIZE = 4 };
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
void createWindow(int width, int height, int mode = 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
void createWindow(CSize size, int mode = 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
void createWindow(TString title, int width, int height, int mode = 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
void createWindow(TString title, CSize size, int mode = 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int run();
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>Դ
void free();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
static App * get();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
static void setOrigin(int originX, int originY);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int getOriginX();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int getOriginY();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
static void quit();
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
static void end();
// <20>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
static void setWindowSize(int width, int height);
// <20>޸Ĵ<DEB8><C4B4>ڴ<EFBFBD>С
static void setWindowSize(CSize size);
// <20>رմ<D8B1><D5B4><EFBFBD>
static void close();
// <20><><EFBFBD>ô<EFBFBD><C3B4>ڱ<EFBFBD><DAB1><EFBFBD>
static void setWindowTitle(TString title);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>
static TString getWindowTitle();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD>
static int getWidth();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ڸ߶<DAB8>
static int getHeight();
// <20>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
static void enterScene(Scene *scene, bool save = true);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
static void backScene();
// <20><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
static void clearScene();
// <20><><EFBFBD><EFBFBD> AppName
static void setAppName(TString appname);
// <20><>ȡ AppName
static TString getAppName();
// <20>޸Ĵ<DEB8><C4B4>ڱ<EFBFBD><DAB1><EFBFBD>ɫ
static void setBkColor(COLORREF color);
// <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>
static void setFPS(DWORD fps);
// <20><><EFBFBD>û<EFBFBD>ͼ<EFBFBD><CDBC>ʽΪĬ<CEAA><C4AC>ֵ
static void reset();
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
static Scene * getCurrentScene();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>еij<D0B5><C4B3><EFBFBD>
static Scene * getLoadingScene();
protected:
TString m_sTitle;
TString m_sAppName;
Scene* m_pCurrentScene;
Scene* m_pNextScene;
Scene* m_pLoadingScene;
std::stack<Scene*> m_SceneStack;
LARGE_INTEGER m_nAnimationInterval;
CSize m_Size;
int m_nWindowMode;
bool m_bRunning;
bool m_bSaveScene;
protected:
void _initGraph();
void _mainLoop();
void _enterNextScene();
};
class FreePool
{
friend App;
friend Object;
private:
// ˢ<><CBA2><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>
static void __flush();
// <20><>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷų<CDB7>
static void __add(Object * nptr);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>нڵ<D0BD>
static void __clearAllObjects();
};
class Scene
{
friend App;
friend MouseMsg;
public:
Scene();
~Scene();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void init();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
virtual void onEnter();
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>Զ<EFBFBD>ִ<EFBFBD><D6B4>
virtual void onExit();
// <20><><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void add(Node * child, int zOrder = 0);
// ɾ<><C9BE><EFBFBD>ӳ<EFBFBD>Ա
bool del(Node * child);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ա
void clearAllChildren();
protected:
std::vector<Node*> m_vChildren;
protected:
void _exec();
void _onDraw();
};
class Object
{
friend FreePool;
public:
Object();
virtual ~Object();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void retain();
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void release();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void autoRelease();
protected:
int m_nRefCount;
bool m_bAutoRelease;
};
class MouseMsg
{
friend App;
public:
MouseMsg();
MouseMsg(TString name, const MOUSE_CALLBACK& callback);
~MouseMsg();
enum MESSAGE
{
MOVE = 0x0200, // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>
LBUTTON_DOWN, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LBUTTON_UP, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̧<EFBFBD><CCA7>
LBUTTON_DBLCLK, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>
RBUTTON_DOWN, // <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD><EFBFBD><EFBFBD>
RBUTTON_UP, // <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD>̧<EFBFBD><CCA7>
RBUTTON_DBLCLK, // <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD>˫<EFBFBD><CBAB>
MBUTTON_DOWN, // <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
MBUTTON_UP, // <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>̧<EFBFBD><CCA7>
MBUTTON_DBLCLK, // <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD>˫<EFBFBD><CBAB>
WHEEL // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void start();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
void stop();
// <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>״̬
void wait();
// <20><><EFBFBD><EFBFBD>
void notify();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
static bool isLButtonDown();
// <20>Ҽ<EFBFBD><D2BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
static bool isRButtonDown();
// <20>м<EFBFBD><D0BC>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
static bool isMButtonDown();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD>
static int getX();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Y<EFBFBD><59><EFBFBD><EFBFBD>
static int getY();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static CPoint getPos();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
static int getWheel();
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
static MESSAGE getMsg();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
static void addListener(TString name, const MOUSE_CALLBACK& callback);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
static void startListener(TString name);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
static void stopListener(TString name);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
static void delListener(TString name);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
static void clearAllListeners();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
static void notifyAllSceneListeners(Scene* scene);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
static void waitAllSceneListeners(Scene* scene);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
static void clearAllSceneListeners(Scene* scene);
private:
static void __exec();
protected:
bool m_bRunning;
bool m_bWaiting;
TString m_sName;
MOUSE_CALLBACK m_callback;
Scene * m_pParentScene;
protected:
// ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
void onMouseMsg();
};
class KeyMsg
{
friend App;
public:
KeyMsg(TString name, const KEY_CALLBACK& callback);
~KeyMsg();
// ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
void onKbHit(VK_KEY key);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void start();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
void stop();
// <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>״̬
void wait();
// <20><><EFBFBD><EFBFBD>
void notify();
// <20>жϼ<D0B6><CFBC>Ƿ񱻰<C7B7><F1B1BBB0>£<EFBFBD><C2A3><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>true
static bool isKeyDown(VK_KEY key);
// <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void addListener(TString name, const KEY_CALLBACK& callback);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void startListener(TString name);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void stopListener(TString name);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void KeyMsg::delListener(TString name);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
static void notifyAllSceneListeners(Scene* scene);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
static void waitAllSceneListeners(Scene* scene);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
static void clearAllSceneListeners(Scene* scene);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void clearAllListeners();
public:
// <20><>ĸ<EFBFBD><C4B8>ֵ
static const VK_KEY A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z;
// <20><><EFBFBD>ּ<EFBFBD>ֵ
static const VK_KEY NUM_1, NUM_2, NUM_3, NUM_4, NUM_5, NUM_6, NUM_7, NUM_8, NUM_9, NUM_0;
// С<><D0A1><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>ֵ
static const VK_KEY NUMPAD_1, NUMPAD_2, NUMPAD_3, NUMPAD_4, NUMPAD_5, NUMPAD_6, NUMPAD_7, NUMPAD_8, NUMPAD_9, NUMPAD_0;
// <20><><EFBFBD>Ƽ<EFBFBD>ֵ
static const VK_KEY Enter, Space, Up, Down, Left, Right, Esc, Shift, LShift, RShift, Ctrl, LCtrl, RCtrl;
// F <20><>ֵ
static const VK_KEY F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12;
private:
static void __exec();
protected:
bool m_bRunning;
bool m_bWaiting;
TString m_sName;
KEY_CALLBACK m_callback;
Scene * m_pParentScene;
};
class FontStyle :
public Object
{
friend Text;
public:
FontStyle();
/**
* ʹ<><CAB9> [<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><C6A1>ֺš<D6BA><C5A1><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>б<EFBFBD><EFBFBD>»<EFBFBD><C2BB>ߡ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>ߡ<EFBFBD><DFA1>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ƕȡ<C7B6>
* ÿ<><C3BF><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>д<EFBFBD>Ƕȡ<C7B6><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*/
FontStyle(LPCTSTR fontfamily, LONG height = 18, LONG weight = 0, LONG width = 0,
bool italic = 0, bool underline = 0, bool strikeout = 0, LONG escapement = 0,
LONG orientation = 0, bool quality = true);
virtual ~FontStyle();
// <20><>ȡĬ<C8A1><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static FontStyle * getDefault();
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>߶<EFBFBD>
void setHeight(LONG value);
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
void setWidth(LONG value);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setFontFamily(LPCTSTR value);
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ʻ<EFBFBD><CABB><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD>Χ0~1000<30><30>Ĭ<EFBFBD><C4AC>Ϊ0
void setWeight(LONG value);
// <20><><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
void setItalic(bool value);
// <20><><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><C2BB><EFBFBD>
void setUnderline(bool value);
// <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>
void setStrikeOut(bool value);
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ƕȣ<C7B6><C8A3><EFBFBD>λ0.1<EFBFBD>ȣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ0
void setEscapement(LONG value);
// <20><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>Ƕȣ<C7B6><C8A3><EFBFBD>λ0.1<EFBFBD>ȣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ0
void setOrientation(LONG value);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5BFB9><EFBFBD>ݣ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊtrue
void setQuality(bool value);
protected:
LOGFONT m_font;
};
class FontWeight
{
public:
static const LONG dontcare; // <20><>ϸֵ 0
static const LONG thin; // <20><>ϸֵ 100
static const LONG extraLight; // <20><>ϸֵ 200
static const LONG light; // <20><>ϸֵ 300
static const LONG normal; // <20><>ϸֵ 400
static const LONG regular; // <20><>ϸֵ 400
static const LONG medium; // <20><>ϸֵ 500
static const LONG demiBlod; // <20><>ϸֵ 600
static const LONG blod; // <20><>ϸֵ 700
static const LONG extraBold; // <20><>ϸֵ 800
static const LONG black; // <20><>ϸֵ 900
static const LONG heavy; // <20><>ϸֵ 900
};
class Color
{
public:
static const COLORREF black; // <20><>ɫ
static const COLORREF blue; // <20><>ɫ
static const COLORREF green; // <20><>ɫ
static const COLORREF cyan; // <20><>ɫ
static const COLORREF red; // <20><>ɫ
static const COLORREF magenta; // <20><>ɫ
static const COLORREF brown; // <20><>ɫ
static const COLORREF lightgray; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF darkgray; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightblue; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightgreen; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightcyan; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightred; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF lightmagenta; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF yellow; // <20><><EFBFBD><EFBFBD>ɫ
static const COLORREF white; // <20><>ɫ
// ͨ<><CDA8><EFBFBD><EFBFBD>̡<EFBFBD><CCA1><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD>ɫ
static COLORREF getFromRGB(BYTE r, BYTE g, BYTE b);
// ͨ<><CDA8>ɫ<EFBFBD><EFBFBD><E0A1A2><EFBFBD>Ͷȡ<CDB6><C8A1><EFBFBD><EFBFBD>Ⱥϳ<C8BA><CFB3><EFBFBD>ɫ
static COLORREF getFromHSL(float H, float S, float L);
// ͨ<><CDA8>ɫ<EFBFBD><EFBFBD><E0A1A2><EFBFBD>Ͷȡ<CDB6><C8A1><EFBFBD><EFBFBD>Ⱥϳ<C8BA><CFB3><EFBFBD>ɫ
static COLORREF getFromHSV(float H, float S, float V);
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD>еĺ<D0B5>ɫֵ
static BYTE getRValue(COLORREF color);
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ɫֵ
static BYTE getGValue(COLORREF color);
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD>е<EFBFBD><D0B5><EFBFBD>ɫֵ
static BYTE getBValue(COLORREF color);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>Ӧ<EFBFBD>ĻҶ<C4BB>ֵ<EFBFBD><D6B5>ɫ
static COLORREF getGray(COLORREF color);
};
class Node :
public Object
{
friend Scene;
friend BatchNode;
public:
Node();
Node(CPoint p);
Node(int x, int y);
virtual ~Node();
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual int getX() const;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual int getY() const;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual CPoint getPos() const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(int x, int y);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(CPoint p);
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(int x, int y);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void move(CVector v);
// <20>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
virtual bool display() const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ
virtual void setDisplay(bool value);
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>ͼ˳<CDBC><CBB3>
virtual int getZOrder() const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD>ͼ˳<CDBC><CBB3><EFBFBD><EFBFBD><30><CEAA><EFBFBD>Ȼ<EFBFBD><C8BB>ƣ<EFBFBD><C6A3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ײ㣩
virtual void setZOrder(int z);
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD>
Scene * getParentScene();
protected:
int m_nZOrder;
bool m_bDisplay;
Scene* m_pScene;
CPoint m_Pos;
protected:
virtual bool _exec(bool active);
virtual void _onDraw() = 0;
void setParentScene(Scene * scene);
};
class BatchNode :
public Node
{
public:
BatchNode();
virtual ~BatchNode();
// <20><><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
void add(Node *child, int z_Order = 0);
// ɾ<><C9BE><EFBFBD>ӽڵ<D3BD>
bool del(Node * child);
// <20><>ȡ<EFBFBD>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
int getCount();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
std::vector<Node*> &getChildren();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
void clearAllChildren();
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(int x, int y) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(CPoint p) override;
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(int x, int y) override;
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(CVector v) override;
protected:
std::vector<Node*> m_vChildren;
protected:
virtual bool _exec(bool active) override;
virtual void _onDraw() override;
};
class Layer :
public BatchNode
{
public:
Layer();
virtual ~Layer();
// ͼ<><CDBC><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
int getBlock() const;
// <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void setBlock(bool block);
protected:
bool m_bBlock;
protected:
virtual bool _exec(bool active) override;
};
class RectNode :
public Node
{
public:
RectNode();
~RectNode();
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD>ײ
virtual bool isCollisionWith(RectNode * rectNode) const;
// <20>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7>ڽڵ<DABD><DAB5><EFBFBD>
virtual bool isPointIn(CPoint p) const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5>ڴ<EFBFBD><DAB4>ھ<EFBFBD><DABE><EFBFBD>
virtual void setWindowCenter();
// <20><><EFBFBD>ýڵ<C3BD><DAB5>ڴ<EFBFBD><DAB4>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setWindowCenterX();
// <20><><EFBFBD>ýڵ<C3BD><DAB5>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setWindowCenterY();
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual int getX() const override;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual int getY() const override;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual CPoint getPos() const override;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual int getWidth() const;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5>߶<EFBFBD>
virtual int getHeight() const;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>С
virtual CSize getSize() const;
// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>
virtual CRect getRect() const;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(int x, int y) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(CPoint p) override;
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(int x, int y) override;
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(CVector v) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void setWidth(int width);
// <20><><EFBFBD>ýڵ<C3BD><DAB5>߶<EFBFBD>
virtual void setHeight(int height);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD>С
virtual void setSize(int width, int height);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD>С
virtual void setSize(CSize size);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>
virtual void setRect(int x1, int y1, int x2, int y2);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>
virtual void setRect(CPoint leftTop, CPoint rightBottom);
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD>ڵľ<DAB5><C4BE><EFBFBD>
virtual void setRect(CRect rect);
protected:
CRect m_Rect;
};
class Text :
public RectNode
{
friend TextButton;
public:
Text();
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Text(TString text, COLORREF color = Color::white, FontStyle * font = FontStyle::getDefault());
// <20><><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Text(int x, int y, TString text, COLORREF color = Color::white, FontStyle * font = FontStyle::getDefault());
virtual ~Text();
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ɫ
COLORREF getColor() const;
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
TString getText() const;
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
FontStyle * getFontStyle();
// <20>ı<EFBFBD><C4B1>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
bool isEmpty() const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setText(TString text);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setColor(COLORREF color);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setFontStyle(FontStyle * style);
protected:
TString m_sText;
COLORREF m_color;
FontStyle * m_pFontStyle;
protected:
virtual void _onDraw() override;
};
class Image :
public RectNode
{
friend Sprite;
friend ImageButton;
public:
Image();
// <20><>ͼƬ<CDBC>ļ<EFBFBD><C4BC><EFBFBD>ȡͼ<C8A1><CDBC>
Image(LPCTSTR ImageFile);
/**
* <20><>ͼƬ<CDBC>ļ<EFBFBD><C4BC><EFBFBD>ȡͼ<C8A1><CDBC>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>꣬ͼƬ<CDBC>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>Ⱥ͸߶<CDB8>
*/
Image(LPCTSTR ImageFile, int x, int y, int width, int height);
virtual ~Image();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float getScaleX() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
float getScaleY() const;
// <20><>ȡ͸<C8A1><CDB8><EFBFBD><EFBFBD>
float getOpacity() const;
/**
* <20><>ͼƬ<CDBC>ļ<EFBFBD><C4BC><EFBFBD>ȡͼ<C8A1><CDBC>
* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
*/
bool setImage(LPCTSTR ImageFile);
/**
* <20><>ͼƬ<CDBC>ļ<EFBFBD><C4BC><EFBFBD>ȡͼ<C8A1><CDBC>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC>ü<EFBFBD><C3BC><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>꣬ͼƬ<CDBC>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>Ⱥ͸߶<CDB8>
* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
*/
bool setImage(LPCTSTR ImageFile, int x, int y, int width, int height);
/**
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡͼ<C8A1>񣬲<EFBFBD>֧<EFBFBD><D6A7> png
* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
*/
bool setImageFromRes(LPCTSTR pResName);
/**
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȡͼ<C8A1>񣬲<EFBFBD>֧<EFBFBD><D6A7> png
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ƣ<EFBFBD>ͼƬ<CDBC>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>꣬ͼƬ<CDBC>ü<EFBFBD><C3BC><EFBFBD><EFBFBD>Ⱥ͸߶<CDB8>
* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
*/
bool setImageFromRes(LPCTSTR pResName, int x, int y, int width, int height);
// <20>ü<EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD> stretch <20><><EFBFBD>
void crop(int x, int y, int width, int height);
// <20><>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>
void stretch(int width, int height);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ
void setScale(float scaleX, float scaleY);
// <20><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>Χ 0~1.0f<EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD> png ͼƬ<CDBC><C6AC>Ч<EFBFBD><D0A7>
void setOpacity(float value);
// <20><><EFBFBD><EFBFBD>͸<EFBFBD><CDB8>ɫ
void setTransparentColor(COLORREF value);
// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
void reset();
// Ԥ<><D4A4><EFBFBD><EFBFBD>ͼƬ
static bool preload(LPCTSTR fileName, bool fromRes = false);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7>ͼ
static void saveScreenshot();
protected:
CImage* m_pCImage;
CRect m_SrcRect;
BYTE m_nAlpha;
float m_fScaleX;
float m_fScaleY;
protected:
virtual void _onDraw() override;
};
class Sprite :
public RectNode
{
friend BatchSprite;
public:
Sprite();
Sprite(Image * image);
Sprite(LPCTSTR imageFileName);
virtual ~Sprite();
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ
bool isCollisionWith(Sprite * sprite);
// <20>޸ľ<DEB8><C4BE><EFBFBD>ͼƬ
virtual void setImage(Image * image);
// ִ<>ж<EFBFBD><D0B6><EFBFBD>
virtual void addAction(Action * action);
// ִ<>ж<EFBFBD><D0B6><EFBFBD>
virtual void runAction(Action * action);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void resumeAction(Action * action);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
virtual void pauseAction(Action * action);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
virtual void stopAction(Action * action);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
virtual void pauseAllActions();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
virtual void resumeAllActions();
// ֹͣ<CDA3><D6B9><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
virtual void stopAllActions();
virtual float getScaleX() const;
virtual float getScaleY() const;
virtual float getOpacity() const;
virtual void setScale(float scaleX, float scaleY);
virtual void setOpacity(float opacity);
protected:
float m_fScaleX;
float m_fScaleY;
BYTE m_nAlpha;
Image * m_pImage;
protected:
bool _exec(bool active) override;
void _onDraw() override;
};
class BatchSprite :
public Sprite
{
public:
BatchSprite();
virtual ~BatchSprite();
// <20><><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
void addSprite(Sprite * sprite, int z_Order = 0);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool delSprite(Sprite * child);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int getCount();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>о<EFBFBD><D0BE><EFBFBD>
std::vector<Sprite*> &getChildren();
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD>
void clearAllSprites();
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><E9A3AC><EFBFBD>򷵻ؿ<F2B7B5BB>ָ<EFBFBD><D6B8>
Sprite * isCollisionWith(Sprite * sprite);
// <20>жϵ<D0B6><CFB5>Ƿ<EFBFBD><C7B7>ھ<EFBFBD><DABE><EFBFBD><EFBFBD>ڲ<EFBFBD>
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD>򷵻ؿ<F2B7B5BB>ָ<EFBFBD><D6B8>
Sprite * isPointIn(CPoint point);
// <20><><EFBFBD>о<EFBFBD><D0BE><EFBFBD>ͬʱִ<CAB1><D6B4>һ<EFBFBD>ζ<EFBFBD><CEB6><EFBFBD>
virtual void addAction(Action * action) override;
// ͬʱ<CDAC>޸<EFBFBD><DEB8><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD>ͼƬ
virtual void setImage(Image * image) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(int x, int y) override;
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
virtual void setPos(CPoint p) override;
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(int x, int y) override;
// <20>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
virtual void move(CVector v) override;
virtual float getScaleX() const override;
virtual float getScaleY() const override;
virtual float getOpacity() const override;
virtual void setScale(float scaleX, float scaleY) override;
virtual void setOpacity(float opacity) override;
protected:
std::vector<Sprite*> m_vSprites;
protected:
bool _exec(bool active) override;
void _onDraw() override;
};
class MouseNode :
public RectNode
{
public:
MouseNode();
virtual ~MouseNode();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
virtual bool isMouseIn();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ѡ<EFBFBD><D1A1>
virtual bool isSelected();
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void setClickedCallback(const CLICK_CALLBACK & callback);
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void setMouseInCallback(const CLICK_CALLBACK & callback);
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void setMouseOutCallback(const CLICK_CALLBACK & callback);
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void setSelectCallback(const CLICK_CALLBACK & callback);
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
virtual void setUnselectCallback(const CLICK_CALLBACK & callback);
// <20><><EFBFBD><EFBFBD>״̬
virtual void reset();
// <20><><EFBFBD>ýڵ<C3BD><DAB5>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
void setBlock(bool block);
protected:
bool m_bTarget;
bool m_bBlock;
enum Status { NORMAL, MOUSEIN, SELECTED } m_eStatus;
CLICK_CALLBACK m_OnMouseInCallback;
CLICK_CALLBACK m_OnMouseOutCallback;
CLICK_CALLBACK m_OnSelectCallback;
CLICK_CALLBACK m_OnUnselectCallback;
CLICK_CALLBACK m_ClickCallback;
protected:
virtual bool _exec(bool active) override;
virtual void _onDraw() override;
// <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>尴ť<E5B0B4><C5A5><EFBFBD>жϷ<D0B6><CFB7><EFBFBD>
virtual bool _isMouseIn();
// <20>л<EFBFBD>״̬
virtual void _setStatus(Status status);
// <20><><EFBFBD><EFBFBD>״̬
virtual void _onNormal() = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
virtual void _onMouseIn() = 0;
// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ʱ
virtual void _onSelected() = 0;
};
class Button :
public MouseNode
{
public:
Button();
virtual ~Button();
// <20><>ť<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
virtual bool isEnable();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
virtual void setEnable(bool enable);
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setX(int x) override;
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setY(int y) override;
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
virtual void setPos(int x, int y) override;
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
virtual void setPos(CPoint p) override;
// <20>ƶ<EFBFBD><C6B6><EFBFBD>ť
virtual void move(int x, int y) override;
// <20>ƶ<EFBFBD><C6B6><EFBFBD>ť
virtual void move(CVector v) override;
protected:
bool m_bEnable;
protected:
virtual bool _exec(bool active) override;
virtual void _onDraw() override;
virtual void _resetPosition() = 0;
virtual void _onNormal() = 0;
virtual void _onMouseIn() = 0;
virtual void _onSelected() = 0;
virtual void _onDisable() = 0;
};
class TextButton :
public Button
{
public:
TextButton();
TextButton(TString text);
TextButton(Text * text);
virtual ~TextButton();
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
void setNormal(Text * text);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
void setMouseIn(Text * text);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ʱ<EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
void setSelected(Text * text);
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>
void setUnable(Text * text);
protected:
Text * m_pNormalText;
Text * m_pMouseInText;
Text * m_pSelectedText;
Text * m_pUnableText;
protected:
virtual void _resetPosition() override;
virtual void _setStatus(Status status) override;
virtual void _onNormal() override;
virtual void _onMouseIn() override;
virtual void _onSelected() override;
virtual void _onDisable() override;
};
class ImageButton :
public Button
{
public:
ImageButton();
ImageButton(LPCTSTR image);
ImageButton(Image * image);
virtual ~ImageButton();
// <20><><EFBFBD>ð<EFBFBD>ťͼƬ
void setNormal(Image * image);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ťͼƬ
void setMouseIn(Image * image);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>ʱ<EFBFBD>İ<EFBFBD>ťͼƬ
void setSelected(Image * image);
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>ʱ<EFBFBD>İ<EFBFBD>ťͼƬ
void setUnable(Image * image);
protected:
Image * m_pNormalImage;
Image * m_pMouseInImage;
Image * m_pSelectedImage;
Image * m_pUnableImage;
protected:
virtual void _resetPosition() override;
virtual void _setStatus(Status status) override;
virtual void _onNormal() override;
virtual void _onMouseIn() override;
virtual void _onSelected() override;
virtual void _onDisable() override;
};
class Shape :
public Node
{
public:
Shape();
virtual ~Shape();
// <20><>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
enum STYLE { ROUND, SOLID, FILL } m_eStyle;
// <20><>ȡ<EFBFBD><C8A1>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
COLORREF getFillColor() const;
// <20><>ȡ<EFBFBD><C8A1>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
COLORREF getLineColor() const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setFillColor(COLORREF color);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
void setLineColor(COLORREF color);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
void setStyle(STYLE style);
protected:
COLORREF fillColor;
COLORREF lineColor;
protected:
virtual void _onDraw() override;
virtual void solidShape() = 0;
virtual void fillShape() = 0;
virtual void roundShape() = 0;
};
class Rect :
public Shape
{
public:
Rect();
Rect(int x, int y, int width, int height);
virtual ~Rect();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>
int getWidth() const;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>θ߶<CEB8>
int getHeight() const;
// <20><><EFBFBD>þ<EFBFBD><C3BE>ο<EFBFBD><CEBF><EFBFBD>
void setWidth(int width);
// <20><><EFBFBD>þ<EFBFBD><C3BE>θ߶<CEB8>
void setHeight(int height);
// <20><><EFBFBD>þ<EFBFBD><C3BE>δ<EFBFBD>С
void setSize(int width, int height);
protected:
CSize m_Size;
protected:
virtual void solidShape() override;
virtual void fillShape() override;
virtual void roundShape() override;
};
class Circle :
public Shape
{
public:
Circle();
Circle(int x, int y, int radius);
virtual ~Circle();
// <20><>ȡԲ<C8A1>ΰ뾶
int getRadius() const;
// <20><><EFBFBD><EFBFBD>Բ<EFBFBD>ΰ뾶
void setRadius(int m_nRadius);
protected:
int m_nRadius;
protected:
virtual void solidShape() override;
virtual void fillShape() override;
virtual void roundShape() override;
};
class Action :
public Object
{
friend Sprite;
friend ActionManager;
friend ActionTwo;
friend ActionNeverStop;
friend ActionSequence;
public:
Action();
virtual ~Action();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
virtual bool isRunning();
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
virtual bool isEnding();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void start();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void resume();
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
virtual void pause();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
virtual void stop();
// <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>״̬
virtual void wait();
// <20><><EFBFBD><EFBFBD>
virtual void notify();
// <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>ÿһ֡ʱ<D6A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void setInterval(UINT ms);
// <20><>ȡһ<C8A1><D2BB><EFBFBD>µĿ<C2B5><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual Action * copy() const = 0;
// <20><>ȡһ<C8A1><D2BB><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual Action * reverse() const;
// <20><>ȡִ<C8A1>иö<D0B8><C3B6><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>
virtual Sprite * getTarget();
protected:
bool m_bRunning;
bool m_bWaiting;
bool m_bEnding;
bool m_bInit;
Sprite * m_pTargetSprite;
Scene * m_pParentScene;
UINT m_nMilliSeconds;
LARGE_INTEGER m_nLast;
LARGE_INTEGER m_nAnimationInterval;
protected:
virtual void _init();
virtual void _exec(LARGE_INTEGER nNow) = 0;
virtual void _reset();
};
class Animation :
public Action
{
public:
Animation(float duration);
virtual ~Animation();
protected:
UINT m_nDuration;
UINT m_nTotalDuration;
protected:
bool _isEnd() const;
bool _isDelayEnough(LARGE_INTEGER nNow);
virtual void _init() override;
virtual void _reset() override;
};
class ActionMoveBy :
public Animation
{
public:
ActionMoveBy(float duration, CVector vec);
virtual ~ActionMoveBy();
virtual ActionMoveBy * copy() const override;
virtual ActionMoveBy * reverse() const override;
protected:
CPoint m_BeginPos;
CVector m_MoveVector;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionMoveTo :
public ActionMoveBy
{
public:
ActionMoveTo(float duration, CPoint pos);
virtual ~ActionMoveTo();
virtual ActionMoveTo * copy() const override;
protected:
CPoint m_EndPos;
protected:
virtual void _init() override;
virtual void _reset() override;
};
class ActionScaleBy :
public Animation
{
public:
ActionScaleBy(float duration, float scaleX, float scaleY);
virtual ~ActionScaleBy();
virtual ActionScaleBy * copy() const override;
virtual ActionScaleBy * reverse() const override;
protected:
float m_nBeginScaleX;
float m_nBeginScaleY;
float m_nVariationX;
float m_nVariationY;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionScaleTo :
public ActionScaleBy
{
public:
ActionScaleTo(float duration, float scaleX, float scaleY);
virtual ~ActionScaleTo();
virtual ActionScaleTo * copy() const override;
protected:
float m_nEndScaleX;
float m_nEndScaleY;
protected:
virtual void _init() override;
virtual void _reset() override;
};
class ActionOpacityBy :
public Animation
{
public:
ActionOpacityBy(float duration, float opacity);
virtual ~ActionOpacityBy();
virtual ActionOpacityBy * copy() const override;
virtual ActionOpacityBy * reverse() const override;
protected:
float m_nBeginVal;
float m_nVariation;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionOpacityTo :
public ActionOpacityBy
{
public:
ActionOpacityTo(float duration, float opacity);
virtual ~ActionOpacityTo();
virtual ActionOpacityTo * copy() const override;
protected:
float m_nEndVal;
protected:
virtual void _init() override;
virtual void _reset() override;
};
class ActionFadeIn :
public ActionOpacityTo
{
public:
ActionFadeIn(float duration) : ActionOpacityTo(duration, 1) {}
};
class ActionFadeOut :
public ActionOpacityTo
{
public:
ActionFadeOut(float duration) : ActionOpacityTo(duration, 0) {}
};
class ActionTwo :
public Action
{
public:
ActionTwo(Action * actionFirst, Action * actionSecond);
virtual ~ActionTwo();
virtual ActionTwo * copy() const override;
virtual ActionTwo * reverse(bool actionReverse = true) const;
protected:
Action * m_FirstAction;
Action * m_SecondAction;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionSequence :
public Action
{
public:
ActionSequence();
ActionSequence(int number, Action * action1, ...);
virtual ~ActionSequence();
void addAction(Action * action);
virtual ActionSequence * copy() const override;
virtual ActionSequence * reverse(bool actionReverse = true) const;
protected:
UINT m_nActionIndex;
std::vector<Action*> m_vActions;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionDelay :
public Action
{
public:
ActionDelay(float duration);
virtual ~ActionDelay();
virtual ActionDelay * copy() const override;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionNeverStop :
public Action
{
public:
ActionNeverStop(Action * action);
virtual ~ActionNeverStop();
virtual ActionNeverStop * copy() const override;
protected:
Action * m_Action;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionFrames :
public Action
{
public:
ActionFrames();
ActionFrames(UINT frameDelay);
~ActionFrames();
void addFrame(Image * frame);
virtual ActionFrames * copy() const override;
virtual ActionFrames * reverse() const override;
protected:
UINT m_nFrameIndex;
std::vector<Image*> m_vFrames;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class ActionCallback :
public Action
{
public:
ActionCallback(const std::function<void()>& callback);
~ActionCallback();
virtual ActionCallback * copy() const override;
protected:
std::function<void()> m_Callback;
protected:
virtual void _init() override;
virtual void _exec(LARGE_INTEGER nNow) override;
virtual void _reset() override;
};
class FileUtils
{
public:
// <20><>ȡϵͳ<CFB5><CDB3> AppData\Local ·<><C2B7>
static TString getLocalAppDataPath();
// <20><>ȡĬ<C8A1>ϵı<CFB5><C4B1><EFBFBD>·<EFBFBD><C2B7>
static TString getDefaultSavePath();
// <20><><EFBFBD><EFBFBD> int <20>͵<EFBFBD>ֵ
static void saveInt(LPCTSTR key, int value);
// <20><><EFBFBD><EFBFBD> double <20>͵<EFBFBD>ֵ
static void saveDouble(LPCTSTR key, double value);
// <20><><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD> <20>͵<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA> Unicode <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
static void saveString(LPCTSTR key, TString value);
// <20><>ȡ int <20>͵<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> default <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
static int getInt(LPCTSTR key, int default);
// <20><>ȡ double <20>͵<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> default <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
static double getDouble(LPCTSTR key, double default);
// <20><>ȡ <20>ַ<EFBFBD><D6B7><EFBFBD> <20>͵<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> default <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
static TString geTString(LPCTSTR key, TString default);
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>Сд<D0A1><D0B4>
static TString getFileExtension(const TString& filePath);
/**
* <20>򿪱<EFBFBD><F2BFAAB1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB>򣬵õ<F2A3ACB5><C3B5><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>
*/
static bool getSaveFilePath(TString& path, LPCTSTR title = _T("<EFBFBD><EFBFBD><EFBFBD>"), LPCTSTR defExt = NULL);
};
class MusicUtils
{
public:
// <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void playBackgroundMusic(TString pszFilePath, bool bLoop = true);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void stopBackgroundMusic(bool bReleaseData = false);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void pauseBackgroundMusic();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void resumeBackgroundMusic();
// <20><>ͷ<EFBFBD><CDB7><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void rewindBackgroundMusic();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>
static bool isBackgroundMusicPlaying();
// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 ~ 1.0f
static void setBackgroundMusicVolume(float volume);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
static unsigned int playMusic(TString pszFilePath, bool loop = false);
// ֹͣ<CDA3><D6B9>Ч
static void stopMusic(unsigned int nSoundId);
// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
static void preloadMusic(TString pszFilePath);
// <20><>ͣ<EFBFBD><CDA3>Ч
static void pauseMusic(unsigned int nSoundId);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
static void resumeMusic(unsigned int nSoundId);
// ж<><D0B6><EFBFBD><EFBFBD>Ч
static void unloadMusic(LPCTSTR pszFilePath);
// <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 ~ 1.0f
static void setVolume(TString pszFilePath, float volume);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void pauseAllMusics();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void resumeAllMusics();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void stopAllMusics();
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
static void end();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 ~ 1.0f
static void setVolume(float volume);
};
class Timer
{
friend App;
public:
Timer(TString name, UINT ms, const TIMER_CALLBACK & callback);
~Timer();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
void start();
// ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1>
void stop();
// <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>״̬
void wait();
// <20><><EFBFBD><EFBFBD>
void notify();
// <20><>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bool isRunning();
// <20><><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>ʱ<EFBFBD><CAB1>
void setInterval(UINT ms);
// <20><><EFBFBD>ûص<C3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
void setCallback(const TIMER_CALLBACK& callback);
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void setName(TString name);
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
UINT getInterval() const;
// <20><>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TString getName() const;
// <20><><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><CAB1>
static void addTimer(Timer * timer);
// <20><><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><CAB1>
static void addTimer(TString name, const TIMER_CALLBACK & callback);
// <20><><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><CAB1>
static void addTimer(TString name, UINT ms, const TIMER_CALLBACK & callback);
// <20><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʱ<EFBFBD><CAB1>
static void startTimer(TString name);
// ֹͣ<CDA3>ض<EFBFBD><D8B6><EFBFBD>ʱ<EFBFBD><CAB1>
static void stopTimer(TString name);
// ɾ<><C9BE><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>ʱ<EFBFBD><CAB1>
static void delTimer(TString name);
// ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
static void clearAllTimers();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
static void notifyAllSceneTimers(Scene* scene);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
static void waitAllSceneTimers(Scene* scene);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>
static void clearAllSceneTimers(Scene* scene);
protected:
bool m_bRunning;
bool m_bWaiting;
TString m_sName;
TIMER_CALLBACK m_callback;
LARGE_INTEGER m_nLast;
LARGE_INTEGER m_nAnimationInterval;
UINT m_nMilliSeconds;
Scene * m_pParentScene;
private:
static void __exec();
};
class ActionManager
{
friend App;
friend Sprite;
public:
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ض<EFBFBD><D8B6>Ķ<EFBFBD><C4B6><EFBFBD>
static void startAction(Action * action);
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ض<EFBFBD><D8B6>Ķ<EFBFBD><C4B6><EFBFBD>
static void resumeAction(Action * action);
// <20><>ͣһ<CDA3><D2BB><EFBFBD>ض<EFBFBD><D8B6>Ķ<EFBFBD><C4B6><EFBFBD>
static void pauseAction(Action * action);
// ֹͣһ<D6B9><D2BB><EFBFBD>ض<EFBFBD><D8B6>Ķ<EFBFBD><C4B6><EFBFBD>
static void stopAction(Action * action);
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> Sprite <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void startSpriteAllActions(Sprite * sprite);
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> Sprite <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void resumeSpriteAllActions(Sprite * sprite);
// <20><>ͣһ<CDA3><D2BB> Sprite <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void pauseSpriteAllActions(Sprite * sprite);
// ֹͣһ<D6B9><D2BB> Sprite <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void stopSpriteAllActions(Sprite * sprite);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void startAllActions();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void resumeAllActions();
// <20><>ͣ<EFBFBD><CDA3>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void pauseAllActions();
// ֹͣ<CDA3><D6B9>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void stopAllActions();
// ɾ<><C9BE><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
static void clearAllActions();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵĶ<CFB5><C4B6><EFBFBD>
static void notifyAllSceneActions(Scene* scene);
// <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵĶ<CFB5><C4B6><EFBFBD>
static void waitAllSceneActions(Scene* scene);
// ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ϵĶ<CFB5><C4B6><EFBFBD>
static void stopAllSceneActions(Scene* scene);
private:
static void __exec();
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static void addAction(Action * action);
};
class Math
{
public:
// ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
template<typename T>
static T randomInt(T min, T max)
{
std::uniform_int_distribution<T> dist(min, max);
return dist(getEngine());
}
// ȡ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>Χ<EFBFBD>ڵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
template<typename T>
static T randomReal(T min, T max)
{
std::uniform_real_distribution<T> dist(min, max);
return dist(getEngine());
}
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static std::default_random_engine &getEngine();
};
} // End of easy2d namespace
// Functions Declare
inline void SafeRelease(easy2d::Object * p) { if (p) p->release(); }
inline void SafeDelete(void * p) { if (p) delete p; }
template<typename T>
inline T random(T min, T max) { return easy2d::Math::randomInt(min, max); }
inline float random(float min, float max) { return easy2d::Math::randomReal(min, max); }
inline double random(double min, double max) { return easy2d::Math::randomReal(min, max); }
inline long double random(long double min, long double max) { return easy2d::Math::randomReal(min, max); }
using namespace easy2d;