您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x节点(CCScriptSupport.h)API

2013-11-30 14:17 204 查看
本文来自http://blog.csdn.net/runaying ,引用必须注明出处!


cocos2d-x节点(CCScriptSupport.h)API

温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记

调度器脚本处理程序入口、触摸脚本处理程序入口、脚本处理程序入口
///cocos2d-x-3.0alpha0/cocos2dx/script_support
//调度器脚本处理程序入口、触摸脚本处理程序入口、脚本处理程序入口

#ifndef __SCRIPT_SUPPORT_H__
#define __SCRIPT_SUPPORT_H__

#include "platform/CCCommon.h"
#include "event_dispatcher/CCTouch.h"
#include "event_dispatcher/CCEventTouch.h"
#include "event_dispatcher/CCEventKeyboard.h"
#include "cocoa/CCSet.h"
#include <map>
#include <string>
#include <list>

typedef struct lua_State lua_State;

NS_CC_BEGIN

class Timer;
class Layer;
class MenuItem;
class NotificationCenter;
class CallFunc;
class Acceleration;

enum ccScriptType {
kScriptTypeNone = 0,
kScriptTypeLua,
kScriptTypeJavascript
};

class ScriptHandlerEntry : public Object
{
public:
static ScriptHandlerEntry* create(int nHandler);
/**
* @js NA
* @lua NA
*/
~ScriptHandlerEntry(void);

int getHandler(void) {
return _handler;
}

int getEntryId(void) {
return _entryId;
}

protected:
ScriptHandlerEntry(int nHandler)
: _handler(nHandler)
{
static int newEntryId = 0;
newEntryId++;
_entryId = newEntryId;
}

int _handler;
int _entryId;
};

/**
* @addtogroup script_support
* @{
*/

class SchedulerScriptHandlerEntry : public ScriptHandlerEntry
{
public:
// nHandler return by tolua_ref_function(), called from LuaCocos2d.cpp
/**
* @js NA
* @lua NA
*/
static SchedulerScriptHandlerEntry* create(int nHandler, float fInterval, bool bPaused);
/**
* @js NA
* @lua NA
*/
~SchedulerScriptHandlerEntry(void);
/**
* @js NA
* @lua NA
*/
cocos2d::Timer* getTimer(void) {
return _timer;
}
/**
* @js NA
* @lua NA
*/
bool isPaused(void) {
return _paused;
}
/**
* @js NA
* @lua NA
*/
void markedForDeletion(void) {
_markedForDeletion = true;
}
/**
* @js NA
* @lua NA
*/
bool isMarkedForDeletion(void) {
return _markedForDeletion;
}

private:
SchedulerScriptHandlerEntry(int nHandler)
: ScriptHandlerEntry(nHandler)
, _timer(NULL)
, _paused(false)
, _markedForDeletion(false)
{
}
bool init(float fInterval, bool bPaused);

cocos2d::Timer*   _timer;
bool                _paused;
bool                _markedForDeletion;
};

class TouchScriptHandlerEntry : public ScriptHandlerEntry
{
public:
/**
* @js NA
* @lua NA
*/
static TouchScriptHandlerEntry* create(int nHandler, bool bIsMultiTouches, int nPriority, bool bSwallowsTouches);
/**
* @js NA
* @lua NA
*/
~TouchScriptHandlerEntry(void);
/**
* @js NA
* @lua NA
*/
bool isMultiTouches(void) {
return _isMultiTouches;
}
/**
* @js NA
* @lua NA
*/
int getPriority(void) {
return _priority;
}
/**
* @js NA
* @lua NA
*/
bool getSwallowsTouches(void) {
return _swallowsTouches;
}

private:
TouchScriptHandlerEntry(int nHandler)
: ScriptHandlerEntry(nHandler)
, _isMultiTouches(false)
, _priority(0)
, _swallowsTouches(false)
{
}
bool init(bool bIsMultiTouches, int nPriority, bool bSwallowsTouches);

bool    _isMultiTouches;
int     _priority;
bool    _swallowsTouches;
};

enum ScriptEventType
{
kNodeEvent = 0,
kMenuClickedEvent,
kNotificationEvent,
kCallFuncEvent,
kScheduleEvent,
kTouchEvent,
kTouchesEvent,
kKeypadEvent,
kAccelerometerEvent,
kControlEvent,
kCommonEvent,
kTableViewEvent,//Now it's only used in LuaBinding
};

struct BasicScriptData
{
// nativeobject:to get handler for lua or to get jsobject for js
void* nativeObject;
// value: a pointer to a object that already defined
void* value;

// Constructor
/**
* @js NA
* @lua NA
*/
BasicScriptData(void* inObject,void* inValue = NULL)
: nativeObject(inObject),value(inValue)
{
}
};

struct SchedulerScriptData
{
// lua use
int handler;
float elapse;
// js use
void* node;

// Constructor
/**
* @js NA
* @lua NA
*/
SchedulerScriptData(int inHandler,float inElapse,void* inNode = NULL)
: handler(inHandler),
elapse(inElapse),
node(inNode)
{
}
};

struct TouchesScriptData
{
EventTouch::EventCode actionType;
void* nativeObject;
const std::vector<Touch*>& touches;

// Constructor
/**
* @js NA
* @lua NA
*/
TouchesScriptData(EventTouch::EventCode inActionType, void* inNativeObject, const std::vector<Touch*>& inTouches)
: actionType(inActionType),
nativeObject(inNativeObject),
touches(inTouches)
{
}
};

struct TouchScriptData
{
EventTouch::EventCode actionType;
void* nativeObject;
Touch* touch;

// Constructor
/**
* @js NA
* @lua NA
*/
TouchScriptData(EventTouch::EventCode inActionType, void* inNativeObject, Touch* inTouch)
: actionType(inActionType),
nativeObject(inNativeObject),
touch(inTouch)
{
}
};

struct KeypadScriptData
{
EventKeyboard::KeyCode actionType;
void* nativeObject;

// Constructor
/**
* @js NA
* @lua NA
*/
KeypadScriptData(EventKeyboard::KeyCode inActionType,void* inNativeObject)
: actionType(inActionType),nativeObject(inNativeObject)
{
}
};

struct CommonScriptData
{
// Now this struct is only used in LuaBinding.
int handler;
char eventName[64];
Object* eventSource;
char eventSourceClassName[64];

// Constructor
/**
* @js NA
* @lua NA
*/
CommonScriptData(int inHandler,const char* inName,Object* inSource = NULL,const char* inClassName = NULL)
: handler(inHandler),
eventSource(inSource)
{
strncpy(eventName, inName, 64);

if (NULL == inClassName)
{
memset(eventSourceClassName, 0, 64*sizeof(char));
}
else
{
strncpy(eventSourceClassName, inClassName, 64);
}
}
};

struct ScriptEvent
{
ScriptEventType type;
void* data;

// Constructor
/**
* @js NA
* @lua NA
*/
ScriptEvent(ScriptEventType inType,void* inData)
: type(inType),
data(inData)
{
}
};

// 不要让ScriptEngineProtocol从Object对象继承,因为setScriptEngine只能由 AppDelegate.cpp 调用一次
// 它会影响 ScriptCore实例的生命周期,autorelease池将在 ScriptCore 毁灭之前销毁
//所以,如果你点击关闭按钮,将出现在Win32崩溃。
class CC_DLL ScriptEngineProtocol
{
public:
/**
* @js NA
* @lua NA
*/
virtual ~ScriptEngineProtocol() {};

/** Get script type
* @js NA
* @lua NA
*/
virtual ccScriptType getScriptType() { return kScriptTypeNone; };

/** Remove script object.
* @js NA
* @lua NA
*/
virtual void removeScriptObjectByObject(Object* pObj) = 0;

/** Remove 脚本函数句柄,只有LuaEngine类需要实现这个功能.
* @js NA
* @lua NA
*/
virtual void removeScriptHandler(int nHandler) {};

/** 重新配置脚本函数句柄,只有LuaEngine类需要实现这个功能.
* @js NA
* @lua NA
*/
virtual int reallocateScriptHandler(int nHandler) { return 0;}

/**
@brief 执行给定的字符串包含的脚本代码.
@param codes 持有应该执行的有效的脚本代码
@return 0 如果该字符串被正确执行.
@return other if the string is executed wrongly.
* @js NA
* @lua NA
*/
virtual int executeString(const char* codes) = 0;

/**
@brief Execute a script file.
@param filename 要执行的脚本文件的文件名
* @js NA
* @lua NA
*/
virtual int executeScriptFile(const char* filename) = 0;

/**
@brief 执行全局函数脚本。
@brief 该函数不应该采取任何参数,应该返回一个整数.
@param functionName 全局脚本环境中,也就是被执行的函数名,
@return The integer value returned from the script function.
* @js NA
* @lua NA
*/
virtual int executeGlobalFunction(const char* functionName) = 0;

/**when 触发脚本事件,调用此功能,添加parent到一个需要的 ScriptEvent object.nativeObject 是触发事件的对象, can be NULL in lua
* @js NA
* @lua NA
*/
virtual int sendEvent(ScriptEvent* evt) = 0;

/** 由 CCAssert 调用,允许脚本引擎来处理失败的 assertions(断言)
* @return true 如果 assertions(断言)是由脚本引擎处理, false otherwise.
* @js NA
* @lua NA
*/
virtual bool handleAssert(const char *msg) = 0;
};

/**
ScriptEngineManagerr是一个单例它持有一个criptEngineProtocl 对象实例 S
它可以帮助的cocos2d-x和用户找回 LuaEngine 对象
@since v0.99.5-x-0.8.5
*/
class CC_DLL ScriptEngineManager
{
public:
/**
* @js NA
* @lua NA
*/
~ScriptEngineManager(void);
/**
* @js NA
* @lua NA
*/
ScriptEngineProtocol* getScriptEngine(void) {
return _scriptEngine;
}
/**
* @js NA
* @lua NA
*/
void setScriptEngine(ScriptEngineProtocol *pScriptEngine);
/**
* @js NA
* @lua NA
*/
void removeScriptEngine(void);
/**
* @js NA
* @lua NA
*/
static ScriptEngineManager* getInstance();
/**
* @js NA
* @lua NA
*/
static void destroyInstance();
/**
* @js NA
* @lua NA
*/
CC_DEPRECATED_ATTRIBUTE static ScriptEngineManager* sharedManager() { return ScriptEngineManager::getInstance(); };
/**
* @js NA
* @lua NA
*/
CC_DEPRECATED_ATTRIBUTE static void purgeSharedManager() { ScriptEngineManager::destroyInstance(); };

private:
ScriptEngineManager(void)
: _scriptEngine(NULL)
{
}

ScriptEngineProtocol *_scriptEngine;
};

// end of script_support group
/// @}

NS_CC_END

#endif // __SCRIPT_SUPPORT_H__
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: