cocos2d-x节点(CCScriptSupport.h)API

该博客详细介绍了cocos2d-x中CCScriptSupport.h文件提供的节点API,包括调度器脚本处理、触摸事件处理和一般脚本处理的入口函数。作者建议读者参考其Cocos2d-X权威指南笔记以深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文来自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__


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值