參考:http://www.cnblogs.com/vokie/p/3816324.html 這篇博文 給了詳細的操作,配有圖,推薦大家看
參考:http://www.codeo4.cn/archives/746 這篇博文版本較老,而且是基於xcode
這次以第二篇博文例子爲主,這個例子沒有新建一個.tulua文件,而是在原來的.tulua中修改,同時新建了一個目錄夾,將要添加的c++頭文件和源文件放在裏面,也有實用價值。
1、創建目錄和c++源文件
在C:\work\quick-cocos2d-x\lib\cocos2d-x\external\extra創建一個myclass目錄,然後創建:
MySprite.h 內容如下:
#ifndef __mtet__MySprite__
#define __mtet__MySprite__
#include "cocos2d.h"
using namespace cocos2d;
class MySprite : public CCSprite{
public:
static MySprite* createMS(const char* fileName);
};
#endif /* defined(__mtet__MySprite__) */
MySprite.cpp 內容如下:
#include "MySprite.h"
MySprite* MySprite::createMS(const char* fileName){
MySprite* sp = new MySprite();
if(sp && sp->initWithFile(fileName)){
sp->setPosition(ccp(100,100));
sp->autorelease();
return sp;
}
CC_SAFE_DELETE(sp);
return NULL;
}
2、修改調用.tolua文件,包含並創建lua對c++文件的調用
在C:\work\quick-cocos2d-x\lib\cocos2d-x\external\extra\luabinding
修改:cocos2dx_extra_luabinding.tolua
A: 在:cocos2dx_extra_luabinding.tolua正文
$#include "network/CCNetwork.h"
後面加上:(這部分是包含c++文件)
$#include "myclass/MySprite.h"
B: 在:cocos2dx_extra_luabinding.tolua正文
class CCNetwork
{
static bool isLocalWiFiAvailable(void);
static bool isInternetConnectionAvailable(void);
static bool isHostNameReachable(const char* hostName);
static int getInternetConnectionStatus(void);
};
後面加上:(這部分是lua對c++的調用)
$#include "myclass/MySprite.h"class MySprite : public CCSprite{
static MySprite* createMS(const char* fileName);
};
3、執行build.bat,生成新的.cpp文件,以便visual studio調用
雙擊C:\work\quick-cocos2d-x\lib\cocos2d-x\external\extra\luabinding\build.bat
生成新的:
cocos2dx_extra_luabinding.cpp
進入cocos2dx_extra_luabinding.cpp,會看到裏面有MySprite這個關鍵字,表示生效
4、用vs2012打開player.sln,生成新的模擬器
打開C:\work\quick-cocos2d-x\player\proj.win32\player.sln
在項目的:cocos2x_2012>cocos2d-x>external>extra>創建一個myclaa篩選項,把MySprite.h和MySprite.cpp包含進來。
然後編譯。
(可以在cocos2x_2012點右鍵選屬性,然後在彈出的配置屬性>c/c++>常規右邊的“附加包含目錄中,點編輯:新增一個:
$(QUICK_COCOS2DX_ROOT)\lib\cocos2d-x\external\extra\myclass,我試過添加或不添加,不影響編譯)
5、測試是否起作用,在MainScene.lua中,修改代碼如下:
function MainScene:ctor()local label = ui.newTTFLabel({
text = "Hello, World",
size = 64,
x = display.cx,
y = display.cy,
align = ui.TEXT_ALIGN_CENTER
})
self:addChild(label)
local ms = MySprite:createMS("icon.png")
self:addChild(ms)
end
用新編譯的模擬器測試,出現icon.png圖片,成功!