Skip to content

Instantly share code, notes, and snippets.

@stevetranby
Created March 29, 2012 05:49

Revisions

  1. stevetranby revised this gist Mar 29, 2012. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions zAppDelegate.cpp
    Original file line number Diff line number Diff line change
    @@ -114,11 +114,11 @@ bool AppDelegate::applicationDidFinishLaunching()
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";
    string filename = "test.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);
    char *pFileContent = (char*)CCFileUtils::getFileData(filename.c_str(), "r", &size);

    if (pFileContent)
    {
    @@ -183,4 +183,4 @@ void AppDelegate::applicationWillEnterForeground()

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    }
    }
  2. stevetranby revised this gist Mar 29, 2012. 1 changed file with 186 additions and 0 deletions.
    186 changes: 186 additions & 0 deletions zAppDelegate.cpp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,186 @@
    #include "cocos2d.h"
    #include "AppDelegate.h"
    #include "SimpleAudioEngine.h"
    #include "CCScriptSupport.h"
    #include "CCLuaEngine.h"

    #include "tolua++.h"

    extern "C" {
    #include "lualib.h"
    #include "lauxlib.h"
    #include "tolua_fix.h"
    }

    #define IPAD 0

    #if IPAD
    #define CC_WIDTH 1024
    #define CC_HEIGHT 768
    #elif IPHONE_4
    #define CC_WIDTH 960
    #define CC_HEIGHT 640
    #else
    #define CC_WIDTH 480
    #define CC_HEIGHT 320
    #endif

    USING_NS_CC;
    using namespace CocosDenshion;

    AppDelegate::AppDelegate()
    {
    // fixed me
    //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
    }

    AppDelegate::~AppDelegate()
    {
    // end simple audio engine here, or it may crashed on win32
    SimpleAudioEngine::sharedEngine()->end();
    //CCScriptEngineManager::purgeSharedManager();
    }

    bool AppDelegate::initInstance()
    {
    bool bRet = false;
    do
    {
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView * pMainWnd = new CCEGLView();
    CC_BREAK_IF(! pMainWnd
    || ! pMainWnd->Create(TEXT("cocos2d: Hello World"), CC_WIDTH, CC_HEIGHT));

    #endif // CC_PLATFORM_WIN32

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    // OpenGLView initialized in testsAppDelegate.mm on ios platform, nothing need to do here.

    #endif // CC_PLATFORM_IOS

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    // OpenGLView initialized in HelloWorld/android/jni/helloworld/main.cpp
    // the default setting is to create a fullscreen view
    // if you want to use auto-scale, please enable view->create(320,480) in main.cpp

    #endif // CC_PLATFORM_ANDROID

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WOPHONE)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView* pMainWnd = new CCEGLView(this);
    CC_BREAK_IF(! pMainWnd || ! pMainWnd->Create(320,480, WM_WINDOW_ROTATE_MODE_CW));

    #ifndef _TRANZDA_VM_
    // on wophone emulator, we copy resources files to Work7/NEWPLUS/TDA_DATA/Data/ folder instead of zip file
    cocos2d::CCFileUtils::setResource("HelloWorld.zip");
    #endif

    #endif // CC_PLATFORM_WOPHONE

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    // MaxAksenov said it's NOT a very elegant solution. I agree, haha
    CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
    #endif
    bRet = true;
    } while (0);
    return bRet;
    }

    bool AppDelegate::applicationDidFinishLaunching()
    {
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());

    // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
    // pDirector->enableRetinaDisplay(true);

    // turn on display FPS
    pDirector->setDisplayFPS(true);

    // pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    // register lua engine
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);

    if (pFileContent)
    {
    // copy the file contents and add '\0' at the end, or the lua parser can not parse it
    char *pCodes = new char[size + 1];
    pCodes[size] = '\0';
    memcpy(pCodes, pFileContent, size);
    delete[] pFileContent;

    pEngine->executeString(pCodes);
    delete []pCodes;
    }
    #endif

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    string path = CCFileUtils::fullPathFromRelativePath(filename.c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    #endif

    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);

    return true;
    }

    // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
    void AppDelegate::applicationDidEnterBackground()
    {
    CCDirector::sharedDirector()->pause();

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
    }

    // this function will be called when the app is active again
    void AppDelegate::applicationWillEnterForeground()
    {
    CCDirector::sharedDirector()->resume();

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    }
  3. stevetranby revised this gist Mar 29, 2012. 2 changed files with 0 additions and 372 deletions.
    186 changes: 0 additions & 186 deletions AppDelegate.cpp
    Original file line number Diff line number Diff line change
    @@ -1,186 +0,0 @@
    #include "cocos2d.h"
    #include "AppDelegate.h"
    #include "SimpleAudioEngine.h"
    #include "CCScriptSupport.h"
    #include "CCLuaEngine.h"

    #include "tolua++.h"

    extern "C" {
    #include "lualib.h"
    #include "lauxlib.h"
    #include "tolua_fix.h"
    }

    #define IPAD 0

    #if IPAD
    #define CC_WIDTH 1024
    #define CC_HEIGHT 768
    #elif IPHONE_4
    #define CC_WIDTH 960
    #define CC_HEIGHT 640
    #else
    #define CC_WIDTH 480
    #define CC_HEIGHT 320
    #endif

    USING_NS_CC;
    using namespace CocosDenshion;

    AppDelegate::AppDelegate()
    {
    // fixed me
    //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
    }

    AppDelegate::~AppDelegate()
    {
    // end simple audio engine here, or it may crashed on win32
    SimpleAudioEngine::sharedEngine()->end();
    //CCScriptEngineManager::purgeSharedManager();
    }

    bool AppDelegate::initInstance()
    {
    bool bRet = false;
    do
    {
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView * pMainWnd = new CCEGLView();
    CC_BREAK_IF(! pMainWnd
    || ! pMainWnd->Create(TEXT("cocos2d: Hello World"), CC_WIDTH, CC_HEIGHT));

    #endif // CC_PLATFORM_WIN32

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    // OpenGLView initialized in testsAppDelegate.mm on ios platform, nothing need to do here.

    #endif // CC_PLATFORM_IOS

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    // OpenGLView initialized in HelloWorld/android/jni/helloworld/main.cpp
    // the default setting is to create a fullscreen view
    // if you want to use auto-scale, please enable view->create(320,480) in main.cpp

    #endif // CC_PLATFORM_ANDROID

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WOPHONE)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView* pMainWnd = new CCEGLView(this);
    CC_BREAK_IF(! pMainWnd || ! pMainWnd->Create(320,480, WM_WINDOW_ROTATE_MODE_CW));

    #ifndef _TRANZDA_VM_
    // on wophone emulator, we copy resources files to Work7/NEWPLUS/TDA_DATA/Data/ folder instead of zip file
    cocos2d::CCFileUtils::setResource("HelloWorld.zip");
    #endif

    #endif // CC_PLATFORM_WOPHONE

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    // MaxAksenov said it's NOT a very elegant solution. I agree, haha
    CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
    #endif
    bRet = true;
    } while (0);
    return bRet;
    }

    bool AppDelegate::applicationDidFinishLaunching()
    {
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());

    // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
    // pDirector->enableRetinaDisplay(true);

    // turn on display FPS
    pDirector->setDisplayFPS(true);

    // pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    // register lua engine
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);

    if (pFileContent)
    {
    // copy the file contents and add '\0' at the end, or the lua parser can not parse it
    char *pCodes = new char[size + 1];
    pCodes[size] = '\0';
    memcpy(pCodes, pFileContent, size);
    delete[] pFileContent;

    pEngine->executeString(pCodes);
    delete []pCodes;
    }
    #endif

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    string path = CCFileUtils::fullPathFromRelativePath(filename.c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    #endif

    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);

    return true;
    }

    // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
    void AppDelegate::applicationDidEnterBackground()
    {
    CCDirector::sharedDirector()->pause();

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
    }

    // this function will be called when the app is active again
    void AppDelegate::applicationWillEnterForeground()
    {
    CCDirector::sharedDirector()->resume();

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    }
    186 changes: 0 additions & 186 deletions AppDelegate2.cpp
    Original file line number Diff line number Diff line change
    @@ -1,186 +0,0 @@
    #include "cocos2d.h"
    #include "AppDelegate.h"
    #include "SimpleAudioEngine.h"
    #include "CCScriptSupport.h"
    #include "CCLuaEngine.h"

    #include "tolua++.h"

    extern "C" {
    #include "lualib.h"
    #include "lauxlib.h"
    #include "tolua_fix.h"
    }

    #define IPAD 0

    #if IPAD
    #define CC_WIDTH 1024
    #define CC_HEIGHT 768
    #elif IPHONE_4
    #define CC_WIDTH 960
    #define CC_HEIGHT 640
    #else
    #define CC_WIDTH 480
    #define CC_HEIGHT 320
    #endif

    USING_NS_CC;
    using namespace CocosDenshion;

    AppDelegate::AppDelegate()
    {
    // fixed me
    //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
    }

    AppDelegate::~AppDelegate()
    {
    // end simple audio engine here, or it may crashed on win32
    SimpleAudioEngine::sharedEngine()->end();
    //CCScriptEngineManager::purgeSharedManager();
    }

    bool AppDelegate::initInstance()
    {
    bool bRet = false;
    do
    {
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView * pMainWnd = new CCEGLView();
    CC_BREAK_IF(! pMainWnd
    || ! pMainWnd->Create(TEXT("cocos2d: Hello World"), CC_WIDTH, CC_HEIGHT));

    #endif // CC_PLATFORM_WIN32

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    // OpenGLView initialized in testsAppDelegate.mm on ios platform, nothing need to do here.

    #endif // CC_PLATFORM_IOS

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    // OpenGLView initialized in HelloWorld/android/jni/helloworld/main.cpp
    // the default setting is to create a fullscreen view
    // if you want to use auto-scale, please enable view->create(320,480) in main.cpp

    #endif // CC_PLATFORM_ANDROID

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WOPHONE)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView* pMainWnd = new CCEGLView(this);
    CC_BREAK_IF(! pMainWnd || ! pMainWnd->Create(320,480, WM_WINDOW_ROTATE_MODE_CW));

    #ifndef _TRANZDA_VM_
    // on wophone emulator, we copy resources files to Work7/NEWPLUS/TDA_DATA/Data/ folder instead of zip file
    cocos2d::CCFileUtils::setResource("HelloWorld.zip");
    #endif

    #endif // CC_PLATFORM_WOPHONE

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    // MaxAksenov said it's NOT a very elegant solution. I agree, haha
    CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
    #endif
    bRet = true;
    } while (0);
    return bRet;
    }

    bool AppDelegate::applicationDidFinishLaunching()
    {
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());

    // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
    // pDirector->enableRetinaDisplay(true);

    // turn on display FPS
    pDirector->setDisplayFPS(true);

    // pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    // register lua engine
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);

    if (pFileContent)
    {
    // copy the file contents and add '\0' at the end, or the lua parser can not parse it
    char *pCodes = new char[size + 1];
    pCodes[size] = '\0';
    memcpy(pCodes, pFileContent, size);
    delete[] pFileContent;

    pEngine->executeString(pCodes);
    delete []pCodes;
    }
    #endif

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    string path = CCFileUtils::fullPathFromRelativePath(filename.c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    #endif

    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);

    return true;
    }

    // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
    void AppDelegate::applicationDidEnterBackground()
    {
    CCDirector::sharedDirector()->pause();

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
    }

    // this function will be called when the app is active again
    void AppDelegate::applicationWillEnterForeground()
    {
    CCDirector::sharedDirector()->resume();

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    }
  4. stevetranby revised this gist Mar 29, 2012. 2 changed files with 186 additions and 1 deletion.
    1 change: 0 additions & 1 deletion AppDelegate.cpp
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@

    #include "cocos2d.h"
    #include "AppDelegate.h"
    #include "SimpleAudioEngine.h"
    186 changes: 186 additions & 0 deletions AppDelegate2.cpp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,186 @@
    #include "cocos2d.h"
    #include "AppDelegate.h"
    #include "SimpleAudioEngine.h"
    #include "CCScriptSupport.h"
    #include "CCLuaEngine.h"

    #include "tolua++.h"

    extern "C" {
    #include "lualib.h"
    #include "lauxlib.h"
    #include "tolua_fix.h"
    }

    #define IPAD 0

    #if IPAD
    #define CC_WIDTH 1024
    #define CC_HEIGHT 768
    #elif IPHONE_4
    #define CC_WIDTH 960
    #define CC_HEIGHT 640
    #else
    #define CC_WIDTH 480
    #define CC_HEIGHT 320
    #endif

    USING_NS_CC;
    using namespace CocosDenshion;

    AppDelegate::AppDelegate()
    {
    // fixed me
    //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
    }

    AppDelegate::~AppDelegate()
    {
    // end simple audio engine here, or it may crashed on win32
    SimpleAudioEngine::sharedEngine()->end();
    //CCScriptEngineManager::purgeSharedManager();
    }

    bool AppDelegate::initInstance()
    {
    bool bRet = false;
    do
    {
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView * pMainWnd = new CCEGLView();
    CC_BREAK_IF(! pMainWnd
    || ! pMainWnd->Create(TEXT("cocos2d: Hello World"), CC_WIDTH, CC_HEIGHT));

    #endif // CC_PLATFORM_WIN32

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    // OpenGLView initialized in testsAppDelegate.mm on ios platform, nothing need to do here.

    #endif // CC_PLATFORM_IOS

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    // OpenGLView initialized in HelloWorld/android/jni/helloworld/main.cpp
    // the default setting is to create a fullscreen view
    // if you want to use auto-scale, please enable view->create(320,480) in main.cpp

    #endif // CC_PLATFORM_ANDROID

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WOPHONE)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView* pMainWnd = new CCEGLView(this);
    CC_BREAK_IF(! pMainWnd || ! pMainWnd->Create(320,480, WM_WINDOW_ROTATE_MODE_CW));

    #ifndef _TRANZDA_VM_
    // on wophone emulator, we copy resources files to Work7/NEWPLUS/TDA_DATA/Data/ folder instead of zip file
    cocos2d::CCFileUtils::setResource("HelloWorld.zip");
    #endif

    #endif // CC_PLATFORM_WOPHONE

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    // MaxAksenov said it's NOT a very elegant solution. I agree, haha
    CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
    #endif
    bRet = true;
    } while (0);
    return bRet;
    }

    bool AppDelegate::applicationDidFinishLaunching()
    {
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());

    // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
    // pDirector->enableRetinaDisplay(true);

    // turn on display FPS
    pDirector->setDisplayFPS(true);

    // pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    // register lua engine
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);

    if (pFileContent)
    {
    // copy the file contents and add '\0' at the end, or the lua parser can not parse it
    char *pCodes = new char[size + 1];
    pCodes[size] = '\0';
    memcpy(pCodes, pFileContent, size);
    delete[] pFileContent;

    pEngine->executeString(pCodes);
    delete []pCodes;
    }
    #endif

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    string path = CCFileUtils::fullPathFromRelativePath(filename.c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    #endif

    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);

    return true;
    }

    // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
    void AppDelegate::applicationDidEnterBackground()
    {
    CCDirector::sharedDirector()->pause();

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
    }

    // this function will be called when the app is active again
    void AppDelegate::applicationWillEnterForeground()
    {
    CCDirector::sharedDirector()->resume();

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    }
  5. stevetranby revised this gist Mar 29, 2012. 4 changed files with 236 additions and 55 deletions.
    187 changes: 187 additions & 0 deletions AppDelegate.cpp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,187 @@

    #include "cocos2d.h"
    #include "AppDelegate.h"
    #include "SimpleAudioEngine.h"
    #include "CCScriptSupport.h"
    #include "CCLuaEngine.h"

    #include "tolua++.h"

    extern "C" {
    #include "lualib.h"
    #include "lauxlib.h"
    #include "tolua_fix.h"
    }

    #define IPAD 0

    #if IPAD
    #define CC_WIDTH 1024
    #define CC_HEIGHT 768
    #elif IPHONE_4
    #define CC_WIDTH 960
    #define CC_HEIGHT 640
    #else
    #define CC_WIDTH 480
    #define CC_HEIGHT 320
    #endif

    USING_NS_CC;
    using namespace CocosDenshion;

    AppDelegate::AppDelegate()
    {
    // fixed me
    //_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
    }

    AppDelegate::~AppDelegate()
    {
    // end simple audio engine here, or it may crashed on win32
    SimpleAudioEngine::sharedEngine()->end();
    //CCScriptEngineManager::purgeSharedManager();
    }

    bool AppDelegate::initInstance()
    {
    bool bRet = false;
    do
    {
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView * pMainWnd = new CCEGLView();
    CC_BREAK_IF(! pMainWnd
    || ! pMainWnd->Create(TEXT("cocos2d: Hello World"), CC_WIDTH, CC_HEIGHT));

    #endif // CC_PLATFORM_WIN32

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

    // OpenGLView initialized in testsAppDelegate.mm on ios platform, nothing need to do here.

    #endif // CC_PLATFORM_IOS

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    // OpenGLView initialized in HelloWorld/android/jni/helloworld/main.cpp
    // the default setting is to create a fullscreen view
    // if you want to use auto-scale, please enable view->create(320,480) in main.cpp

    #endif // CC_PLATFORM_ANDROID

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WOPHONE)

    // Initialize OpenGLView instance, that release by CCDirector when application terminate.
    // The HelloWorld is designed as HVGA.
    CCEGLView* pMainWnd = new CCEGLView(this);
    CC_BREAK_IF(! pMainWnd || ! pMainWnd->Create(320,480, WM_WINDOW_ROTATE_MODE_CW));

    #ifndef _TRANZDA_VM_
    // on wophone emulator, we copy resources files to Work7/NEWPLUS/TDA_DATA/Data/ folder instead of zip file
    cocos2d::CCFileUtils::setResource("HelloWorld.zip");
    #endif

    #endif // CC_PLATFORM_WOPHONE

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    // MaxAksenov said it's NOT a very elegant solution. I agree, haha
    CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
    #endif
    bRet = true;
    } while (0);
    return bRet;
    }

    bool AppDelegate::applicationDidFinishLaunching()
    {
    // initialize director
    CCDirector *pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());

    // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
    // pDirector->enableRetinaDisplay(true);

    // turn on display FPS
    pDirector->setDisplayFPS(true);

    // pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);

    // set FPS. the default value is 1.0/60 if you don't call this
    pDirector->setAnimationInterval(1.0 / 60);

    // register lua engine
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);

    if (pFileContent)
    {
    // copy the file contents and add '\0' at the end, or the lua parser can not parse it
    char *pCodes = new char[size + 1];
    pCodes[size] = '\0';
    memcpy(pCodes, pFileContent, size);
    delete[] pFileContent;

    pEngine->executeString(pCodes);
    delete []pCodes;
    }
    #endif

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    string path = CCFileUtils::fullPathFromRelativePath(filename.c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    #endif

    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);

    return true;
    }

    // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
    void AppDelegate::applicationDidEnterBackground()
    {
    CCDirector::sharedDirector()->pause();

    // if you use SimpleAudioEngine, it must be pause
    // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
    }

    // this function will be called when the app is active again
    void AppDelegate::applicationWillEnterForeground()
    {
    CCDirector::sharedDirector()->resume();

    // if you use SimpleAudioEngine, it must resume here
    // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    }
    55 changes: 0 additions & 55 deletions gistfile1.cpp
    Original file line number Diff line number Diff line change
    @@ -1,55 +0,0 @@

    // register lua engine
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);

    if (pFileContent)
    {
    // copy the file contents and add '\0' at the end, or the lua parser can not parse it
    char *pCodes = new char[size + 1];
    pCodes[size] = '\0';
    memcpy(pCodes, pFileContent, size);
    delete[] pFileContent;

    pEngine->executeString(pCodes);
    delete []pCodes;
    }
    #endif

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    string path = CCFileUtils::fullPathFromRelativePath(filename.c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    #endif

    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);
    return true;
    24 changes: 24 additions & 0 deletions snippet.cpp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);
    25 changes: 25 additions & 0 deletions test.lua
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,25 @@
    local cclog = function(...)
    print(string.format(...))
    end

    function add(x, y)
    return x + y
    end

    function test()
    print "test"
    end

    function test1r()
    return add(3,45)
    end

    function test2p(a,b)
    print ("test passed " .. a .. " and " .. (b))
    end


    function test1p2r(a)
    print ("test2p2r with " .. a)
    return 4, "steve"
    end
  6. stevetranby created this gist Mar 29, 2012.
    55 changes: 55 additions & 0 deletions gistfile1.cpp
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@

    // register lua engine
    CCScriptEngineProtocol* pEngine = CCLuaEngine::engine();
    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);

    string filename = "hello3.lua";

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    unsigned long size;
    char *pFileContent = (char*)CCFileUtils::getFileData("hello.lua", "r", &size);

    if (pFileContent)
    {
    // copy the file contents and add '\0' at the end, or the lua parser can not parse it
    char *pCodes = new char[size + 1];
    pCodes[size] = '\0';
    memcpy(pCodes, pFileContent, size);
    delete[] pFileContent;

    pEngine->executeString(pCodes);
    delete []pCodes;
    }
    #endif

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
    string path = CCFileUtils::fullPathFromRelativePath(filename.c_str());
    pEngine->addSearchPath(path.substr(0, path.find_last_of("/")).c_str());
    pEngine->executeScriptFile(path.c_str());
    #endif

    CCLOG("running scripts");

    //test2p
    lua_State *L = pEngine->getLuaState();
    lua_getglobal(L, "test");
    lua_call(L, 0, 0);

    lua_getglobal(L, "test1r");
    lua_call(L, 0, 1);
    int ret = lua_tointeger(L, -1);
    CCLOG("ret=%d",ret);

    lua_getglobal(L, "test2p");
    lua_pushstring(L, "This is an argument passed to a Lua function from C/C++");
    lua_pushstring(L, "Arg 2");
    lua_call(L, 2, 0);

    lua_getglobal(L, "test1p2r");
    lua_pushinteger(L, 3);
    lua_call(L, 1, 2);
    int x = lua_tointeger(L, -2);
    const char *y = lua_tostring(L, -1);
    CCLOG("val=%d",x);
    CCLOG("msg=%s",y);
    return true;