當前位置:首頁 » 編程軟體 » cocos2dx腳本

cocos2dx腳本

發布時間: 2022-05-18 04:41:32

Ⅰ 如何解決xcode里開發cocos2dx修改lua腳本後不刷新的問題

用xcode來開發cocos2dx,結果發現一個很糾結的問題,如果我一旦修改了一個Lua文件,我必須clean之後再build,否則修改的Lua文件不會體現出來。這是一個很令糾結的結果,特別是我要進行調試的時候,在網上搜索了一圈,發現xcode原來可以提供一個build phase的功能,允許在build中間執行一些腳本,而這個時候只要將腳本文件touch一下就可以解決問題,但是比較奇怪的是,如果是touch Resources文件是不行的,必須touch Resources目錄下的某個文件。
每用一個新的ide總會有學習代價,現在覺得如果要開發cocos2dx+lua,Linux其實是最好的開發環境,原因是如果在不修改cpp的情況下,
只需要用一個編輯器去寫lua即可,然後立即重啟程序就行了,而android或者ios都需要模擬器,win32直接忽略了;奈何現在換成了mac,沒辦法了,不過還好mac的模擬器足夠快,不像android。

Ⅱ quick-cocos2dx-lua腳本文件放在哪

如果在Windows下(……Linux行不行不知道)
obj=io.popen("cd") --如果不在交互模式下,前面可以添加local
path=obj:read("*all"):sub(1,-2) --path存放當前路徑
obj:close() --關掉句柄
上述原理是利用Windows的cd命令返回工作目錄;至於sub(1,-2)是為了去掉換行符
當然如果你有lua socks或者你有lfs(注意匹配你的Lua版本),你可以使用lfs(Lua File System)
require("lfs")
path=lfs.currentdir()
這個則是Lua文件系統庫中的函數。

Ⅲ cocos2dx是怎麼使用lua引擎的

第一步:看cocos2dx調用lua的最初切入點:

[cpp] view plain
bool AppDelegate::applicationDidFinishLaunching()
{
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(480, 320, kResolutionNoBorder);
pDirector->setDisplayStats(true);
pDirector->setAnimationInterval(1.0 / 60);

// register lua engine
CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();//從這里開始了lua旅程。
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);//保存剛才新建的lua引擎對象,以便別處調用。

std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("hello.lua");//CCFileUtils工具類一定封裝了文件的搜索路徑。
//接下來直接執行了腳本,跟句helloCpp工程的實現,這里本該是類似
//CCScene *pScene = HelloWorld::scene();
//pDirector->runWithScene(pScene);
//這樣的代碼,但這里並沒有這樣的代碼,可以猜測:hello.lua中一定是實現了類似這樣的一些功能,事實上,一定是這樣。
//---因為需要添加的這些東西scene、other nodes都是一些c++類的對象,
//既然hello.lua能完成這些工作,那麼lua也一定是有能力訪問並操作了這些類與對象,
//換句話說,也就是一定存在一種機制,讓c++暴漏一些介面供lua調用,
//亦即:lua可以訪問cocos2dx裡面的東西,並且,一定封裝的很好用,否則沒人用了。
pEngine->executeScriptFile(path.c_str());
return true;
}

第二步:看看CCLuaEngine到底幹了點啥

[cpp] view plain
class CCLuaEngine : public CCScriptEngineProtocol
{
public:
static CCLuaEngine* defaultEngine(void);
virtual ~CCLuaEngine(void);
virtual ccScriptType getScriptType() {
return kScriptTypeLua;
};
CCLuaStack *getLuaStack(void) {
return m_stack;
}
//-----------new in me 1
virtual void addSearchPath(const char* path);
//-----------new in me 2
virtual void addLuaLoader(lua_CFunction func);
//----------------------------inherit from CCScriptEngineProtocol------------------
//==================這些函數好像都是純虛函數在父類中===========================
//--------下面這幾個函數基本都是調用【CCLuaStack *m_stack;】的成員方法來實現的
virtual void removeScriptObjectByCCObject(CCObject* pObj);
virtual void removeScriptHandler(int nHandler);
virtual int reallocateScriptHandler(int nHandler);
virtual int executeString(const char* codes);
virtual int executeScriptFile(const char* filename);
virtual int executeGlobalFunction(const char* functionName);
//--------------------------------end--------------------------------
virtual int executeNodeEvent(CCNode* pNode, int nAction);
virtual int executeMenuItemEvent(CCMenuItem* pMenuItem);
virtual int executeNotificationEvent(CCNotificationCenter* pNotificationCenter, const char* pszName);
virtual int executeCallFuncActionEvent(CCCallFunc* pAction, CCObject* pTarget = NULL);
virtual int executeSchele(int nHandler, float dt, CCNode* pNode = NULL);
virtual int executeLayerTouchesEvent(CCLayer* pLayer, int eventType, CCSet *pTouches);
virtual int executeLayerTouchEvent(CCLayer* pLayer, int eventType, CCTouch *pTouch);
virtual int executeLayerKeypadEvent(CCLayer* pLayer, int eventType);
virtual int executeAccelerometerEvent(CCLayer* pLayer, CCAcceleration* pAccelerationValue);
virtual int executeEvent(int nHandler, const char* pEventName, CCObject* pEventSource = NULL, const char* pEventSourceClassName = NULL);
int executeTableViewEvent(int nEventType,cocos2d::extension::CCTableView* pTableView,void* pValue = NULL, CCArray* pResultArray = NULL);
virtual int executeEventWithArgs(int nHandler, CCArray* pArgs);
virtual bool handleAssert(const char *msg);
virtual bool parseConfig(CCScriptEngineProtocol::ConfigType type, const std::string& str);
//----------------------------inherit from CCScriptEngineProtocol end--------------
private:
CCLuaEngine(void)
: m_stack(NULL)
{}
bool init(void);

static CCLuaEngine* m_defaultEngine;
CCLuaStack *m_stack;
};

第三步:CCLuaEngine類中有一個指針成員變數m_stack,我們先來看看它的定義,注意下CCLuaStack和CCLuaEngine的區別於聯系

[cpp] view plain
class CCLuaStack : public CCObject
{
public:
static CCLuaStack *create(void);
static CCLuaStack *attach(lua_State *L);
lua_State* getLuaState(void) {
return m_state;
}
virtual void addSearchPath(const char* path);
virtual void addLuaLoader(lua_CFunction func);
virtual void removeScriptObjectByCCObject(CCObject* pObj);
virtual void removeScriptHandler(int nHandler);
virtual int reallocateScriptHandler(int nHandler);
virtual int executeString(const char* codes);
virtual int executeScriptFile(const char* filename);
virtual int executeGlobalFunction(const char* functionName);

virtual void clean(void);
virtual void pushInt(int intValue);
virtual void pushFloat(float floatValue);
virtual void pushBoolean(bool boolValue);
virtual void pushString(const char* stringValue);
virtual void pushString(const char* stringValue, int length);
virtual void pushNil(void);
virtual void pushCCObject(CCObject* objectValue, const char* typeName);
virtual void pushCCLuaValue(const CCLuaValue& value);
virtual void pushCCLuaValueDict(const CCLuaValueDict& dict);
virtual void pushCCLuaValueArray(const CCLuaValueArray& array);
virtual bool pushFunctionByHandler(int nHandler);
virtual int executeFunction(int numArgs);
virtual int executeFunctionByHandler(int nHandler, int numArgs);
virtual int executeFunctionReturnArray(int nHandler,int nNumArgs,int nNummResults,CCArray* pResultArray);
virtual bool handleAssert(const char *msg);
protected:
CCLuaStack(void)
: m_state(NULL)
, m_callFromLua(0)
{}
bool init(void);
bool initWithLuaState(lua_State *L);

lua_State *m_state;
int m_callFromLua;
};

Ⅳ cocos2dx 用luajit 加密腳本 會被反編譯

1、新建一個名為1.lua的文件,裡面只有一句話print("hello
lua"),新建一個空的out.lua腳本文件
2、開始--運行--cmd
3、luac
-o
out.lua
1.lua
註:
luac
-o
[編譯後腳本名]
[腳本名],必要時帶上腳本路徑,如:
回車之後,再打開out.lua就可以看到編譯好的位元組碼了
然後實驗一下,執行這個位元組碼腳本,可以看到lua原生的解釋器可以直接解析luac編譯出來的bytecode腳本,很方便!

Ⅳ cocos2dx游戲怎麼使用腳本

對於游戲公司而言,採用游戲腳本lua、python等進行開發也很常見,但是很多童鞋對腳本並沒有很熟悉的概念,本篇則向大家簡單介紹腳本的用途以及在Cocos2dx基礎用法;
Lua和python這些詳細介紹的話,請不太熟悉的童鞋自行網路哈,那麼對於lua和python則是兩個常用的腳本語言,lua相對於python而言,lua比較輕量級罷了,而其他區別就不多說了,但是為什麼本章要講解lua的原因則有兩點,首先第一:cocos2dx 游戲引擎內嵌lua,第二點:自從「令人憤怒的小鳥」火起來之後,國內很多都偏向於使用lua了=。 =
那麼對於腳本的用途這里也大概說兩點:
1. 腳本在手游中是類於「大腦」的功能,所有游戲相關的邏輯代碼一般都放在腳本中,而客戶端(前台)的代碼都則屬於「肢體」,也可以說是「播放器」,作用只是用戶展示出UI界面的功能;那麼腳本的作用那麼不僅僅如此,比如地圖數據等都可以利用腳本使用;
2. 腳本在手機網游中的作用尤為重要,比如一款網游「Himi」沒有使用腳本,如果「Himi」1.0版本在發布後突然發現客戶端出現一些棘手的bug需要修復,那麼你想修改那麼也要等待再次更新客戶端重新提交發布才可以解決,這樣會流失一大批用戶,而且游戲每次更新也會流失掉部分用戶,這是肯定的;但是如果「Himi」這款網游使用腳本的話,那麼解決此類問題很eazy,比如我在「Himi」游戲中的邏輯代碼都放在腳本a.lua 中,那麼如果a.lua邏輯中哪裡出現了問題,我們直接可以將修復後的a.lua腳本更新至伺服器中,因為一般腳本都會定義version號,比如a.lua有bug的version:1.0,那麼我們修復後的a.lua version改成1.1,當用戶每次啟動游戲的時候,客戶端都會將腳本的version與伺服器腳本version做對比,當server端腳本version號比當前腳本新,那麼自動下載並覆蓋當前腳本,OK,問題解決;不僅僅如此,比如游戲中做個活動呀,換個圖片呀等等都可以即使更新,而不是每次修改前端代碼都要重新發布新的游戲版本,造成一些損失!
OK,不再多說了,下面我們來介紹在Cocos2dx中對於lua腳本的一些簡單使用,首先我們通過新建一個Cocos2dx-lua模版項目,默認此模版中有個示例,童鞋們可以直接運行項目看效果,但是大家可能會郁悶在class中完全找不到任何相關的代碼?!?那就對了,因為所有邏輯代碼都放置在了lua腳本中,項目啟動後直接解析的一個名稱為hello.lua的腳本!
打開項目的Resources仔細找下,有沒有發現有 hello.lua 合hello2.lua兩個腳本文件?!OK,就是這里拉。 那麼對於cocos2dx_lua demo的例子腳本我這里不多說比較容易,但是肯定不太熟悉的童鞋比較疑惑,那麼Himi這里重新整理了一份簡單的示例腳本代碼,大家可以直接將如下代碼直接復制到hello.lua中看效果;代碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126

require "hello2" -- 包含hello2這個腳本

-- 注視語句

-- 基本上調用的cocos2dx函數和類的時候就是以cocos2d.*這樣子來用
-- 注意2:function 關鍵字定義函數,end結束函數

-- 列印
cocos2d.CCLuaLog("腳本hello開始運行... " .. myadd(3, 5))

-- 創建一個Scene
sceneForWorld = cocos2d.CCScene:node()

-- 創建一個Layer
layerForWorld = cocos2d.CCLayer:node()
sceneForWorld:addChild(layerForWorld)

-- 創建一個精靈
spriteForWorld = cocos2d.CCSprite:spriteWithFile("Icon.png")
layerForWorld:addChild(spriteForWorld)

-- 獲取屏幕寬高
screenSize=cocos2d.CCDirector:sharedDirector():getWinSize()

-- 設置精靈坐標
spriteForWorld:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5))

-- 設置精靈縮放2倍
spriteForWorld:setScale(2)

-- 添加一個CCLabelTTF (!!!!!!備注!!!!!!)
myLableTTF =cocos2d.CCLabelTTF:labelWithString("Himi- Lua 基礎","Helvetica-Bold",24)
myLableTTF:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5+100))
sceneForWorld:addChild(myLableTTF)
-- 添加一個CCLabelTTF
myLableTTF2 =cocos2d.CCLabelTTF:labelWithString("上面icon跟隨用戶觸屏位置","Helvetica-Bold",24)
myLableTTF2:setPosition(cocos2d.CCPoint(screenSize.width*0.5,screenSize.height*0.5-100))
sceneForWorld:addChild(myLableTTF2)

-- @@@@@@@@@@觸摸事件

--開啟觸摸
layerForWorld:setIsTouchEnabled(true)

-- 注冊觸摸事件
layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHBEGAN, "btnTouchBegin")
layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHMOVED, "btnTouchMove")
layerForWorld.__CCTouchDelegate__:registerScriptTouchHandler(cocos2d.CCTOUCHENDED, "btnTouchEnd")

-- touch handers
pointBegin = nil

function btnTouchBegin(e)
cocos2d.CCLuaLog("btnTouchBegin")
local v = e[1]
local pointMove = v:locationInView(v:view())
pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)
spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))
end

function btnTouchMove(e)
cocos2d.CCLuaLog("btnTouchMove")
local v = e[1]
local pointMove = v:locationInView(v:view())
pointMove = cocos2d.CCDirector:sharedDirector():convertToGL(pointMove)
spriteForWorld:setPosition(cocos2d.CCPoint(pointMove.x,pointMove.y))
end

function btnTouchEnd(e)
cocos2d.CCLuaLog("btnTouchEnd")
end

-- @@@@@@@@@@觸摸結束

--動態小狗
winSize = cocos2d.CCDirector:sharedDirector():getWinSize()
FrameWidth = 105
FrameHeight = 95

textureDog = cocos2d.CCTextureCache:sharedTextureCache():addImage("dog.png")
frame0 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(0, 0, FrameWidth, FrameHeight))
frame1 = cocos2d.CCSpriteFrame:frameWithTexture(textureDog, cocos2d.CCRectMake(FrameWidth*1, 0, FrameWidth, FrameHeight))

spriteDog = cocos2d.CCSprite:spriteWithSpriteFrame(frame0)
spriteDog:setPosition(cocos2d.CCPoint(100, winSize.height/4*3))
layerForWorld:addChild(spriteDog)

animFrames = cocos2d.CCMutableArray_CCSpriteFrame__:new(2)
animFrames:addObject(frame0)
animFrames:addObject(frame1)

animation = cocos2d.CCAnimation:animationWithFrames(animFrames, 0.5)

animate = cocos2d.CCAnimate:actionWithAnimation(animation, false);
spriteDog:runAction(cocos2d.CCRepeatForever:actionWithAction(animate))

--自定義函數
function prForHimi()
cocos2d.CCLuaLog("reFresh function")
--取消選擇器
--cocos2d.CCScheler:sharedScheler():unscheleScriptFunc("prForHimi")
end

--使用選擇器進行函數更新
--cocos2d.CCScheler:sharedScheler():scheleScriptFunc("prForHimi", 1, false)

--循環語句
for i=0,4,1 do
for j=0,4,2 do
cocos2d.CCLuaLog("for loop",i)
end
end

-- 避免內存泄漏
collectgarbage( "setpause", 100)
collectgarbage( "setstepmul", 5000)

-- 播放背景音樂
--CocosDenshion.SimpleAudioEngine:sharedEngine():playBackgroundMusic("background.mp3", true)
-- 播放音效
--CocosDenshion.SimpleAudioEngine:sharedEngine():preloadEffect("effect1.wav")

-- run整個scene
cocos2d.CCDirector:sharedDirector():runWithScene(sceneForWorld)

cocos2d.CCLuaLog("腳本hello正常執行結束... " .. myadd(3, 5))

運行效果圖如下:
對於Himi上面給出的自己修改後的代碼注視寫的狠清楚了 =。 = 所以不多加贅述,但是Himi這里需要還要詳細說一點;
腳本lua等一般都示通過中間層(解析)進行與前端代碼(Cocos2dX封裝的引擎類庫)交互,所以很多方法名稱可能發生了改變,那麼對於不太熟悉的童鞋我們如何下手?
OK,如剛才的代碼中有個「備注」,不知道細心童鞋們看到沒有,這里是添加了一個CCLabelTTF ,假如我們不知道它的構造函數是否有修改,或者說參數忘記都是什麼了,那麼請打開你項目的libs文件夾,然後打開lua文件夾,繼續打開cocos2dx_support文件夾找到 LuaCocos2d.cpp文件打開,(注意這個文件代碼很多,打開較慢)然後你會看到很多方法的定義與實現!
那麼假如我們來找 CCLabelTTF的構造方法,那麼搜一下如下語句:

1

tolua_beginmole(tolua_S,"CCLabelTTF");

你將發現此類下方一大批類似的代碼:

沒錯這里就是此類的所有是lua-cocos2dx之間的轉換函數定義,比如常用的CCLabelTTF構造函數:

1

tolua_function(tolua_S,"labelWithString",tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01);

此函數第一參數大家不用理會,第二個參數表示我們使用cocos2d/x時調用的函數名稱,後面則是lua-cocos2dx之間的轉換函數實現代碼,大家可以繼續搜索第三個參數或者按住command然後點擊第三個參數找到其函數實現代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

/* method: labelWithString of class cocos2d::CCLabelTTF */
#ifndef TOLUA_DISABLE_tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01
static int tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString01(lua_State* tolua_S)
{
tolua_Error tolua_err;
if (
!tolua_isusertable(tolua_S,1,"cocos2d::CCLabelTTF",0,&tolua_err) ||
!tolua_isstring(tolua_S,2,0,&tolua_err) ||
!tolua_isstring(tolua_S,3,0,&tolua_err) ||
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
!tolua_isnoobj(tolua_S,5,&tolua_err)
)
goto tolua_lerror;
else
{
const char* label = ((const char*) tolua_tostring(tolua_S,2,0));
const char* fontName = ((const char*) tolua_tostring(tolua_S,3,0));
float fontSize = ((float) tolua_tonumber(tolua_S,4,0));
{
cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*) cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);
tolua_pushusertype(tolua_S,(void*)tolua_ret,"cocos2d::CCLabelTTF");
}
}
return 1;
tolua_lerror:
return tolua_Cocos2d_cocos2d_CCLabelTTF_labelWithString00(tolua_S);
}
#endif //#ifndef TOLUA_DISABLE

在這里看到此函數轉換過程,並可以很清楚看到:

1

cocos2d::CCLabelTTF* tolua_ret = (cocos2d::CCLabelTTF*) cocos2d::CCLabelTTF::labelWithString(label,fontName,fontSize);

到這里大家會很清楚需要的參數都是哪些,如果還不清楚,繼續按住Command然後點擊labelWithString進入cocos2dx引擎代碼 CCLabelTTF.cpp中的此函數實現啦!
可能這部分有童鞋看得比較迷茫 =。 = 那麼Himi來簡化這些復雜來說:
解析lua腳本中的一句代碼->通過解析層代碼->將其轉換並轉到前端代碼進行使用
那麼當然此過程也可逆:
前端代碼->通過解析層代碼->使用lua腳本中東東
這里由於Himi對cocos2dx 中的lua還沒有深入了解,所以不知是否過程可逆;
OK,基本就是這樣,對於腳本的熟悉,主要還是在公司進行使用然後慢慢熟悉和熟練掌握的,本章主要需要童鞋們記住的是腳本的概念和作用!

Ⅵ 如何使用cocos2d

cocos2d是一個非常強大的開源庫,它可以為你開發iphone上面的游戲節省大量的時間。目前支持精靈(sprite)、動畫、物理引擎、聲音引擎以及許許多多非常酷的圖像效果等等。

我也是剛開始學習cocos2d,目前已經有許多非常好的教程來教你如何使用cocos2d了。但是,那些都不是我想要的。我真正想要的是一個非常簡單,但是可以跑起來的游戲。這個游戲包括怎麼使用動畫、碰撞檢測和播放聲音,這就夠了,並不需要使用太多高級的特性。最終,我自己做了一個這樣的游戲,因此,基於我的一些經驗寫了這篇教程,希望會對初學者有所幫助。

這篇教程將會從頭至尾、一步一步地教你如何使用cocos2d來製作一個簡單的iphone游戲。你可以按照教程一步步來,或者乾脆直接跳到文章的最後,下載樣常式序。沒錯!游戲裡面有忍者。

下載並安裝cocos2d

你可以從下面的鏈接來下載cocos2d的最新版本(以前是google,現在採用git了) the Cocos2D Google Code page.

在你下載完代碼以後,你可能想安裝非常有用的項目模板。打開終端窗口,然後cd到你的cocos2d解壓縮目錄下面,輸入./install_template.sh

請注意,你可以傳遞一些參數給這個安裝腳本,比如你把xcode安裝在了一個非標準的目錄下面。(或者你有多個版本的sdk安裝在你的機器上面)

Hello, Cocos2D!

讓我們從最簡單的HelloWorld項目開始吧!啟動xcode,點file->new project,然後選擇cocos2dApplicationtemplate來創建一個新的cocos2d項目並把它命名為「Cocos2dSimpleGame」

繼續,點編譯並運行這個工程模板,如何一切都ok的話,那麼你會看到下面的內容:

cocos2d是按照「場景」(scene)的概念組織的,對一個游戲來說,就好像某個關卡或者屏幕之類的。比如,你可能需要一個場景來為你的游戲建立初使化菜單界面,另外一個場景當作玩游戲的主要界面,還有一個游戲結束的時候的界面。在一個場景裡面,你可以有許多「層」(layer)(這個和photoshop有點類似)。每一個層又可以包含一些結點,比如精靈、標簽、菜單等。而且一個結點也可以包含其它的結點。(比如,一個精靈可以包含一個子精靈)

如果你看一下樣例工程,你會看到只有一個場景HelloWorldScene--我們接下來將會在這個場景裡面實現我們的游戲邏輯。繼續打開它,你會在init方法裡面看到,它把一個帶有「HelloWorld」字樣的標簽加到了當前場景中。我們將把這些代碼去掉,並且放一個精靈在上面。

增加一個精靈

在我們增加一個精靈之前,我們需要一些圖片。你可以自己去創建一些,或者使用我可愛的妻子為這個項目所創建的圖片: a Player image, a Projectile image, and a Target image.

一旦你獲得了這些圖片,你就可以把它們用滑鼠拖到xcode的resource文件夾中去,並且保證「 Copy items into destination group』s folder (if needed)」勾上了。現在,我們擁有自己的圖片了,我們先得計算一下,應該把player放在哪裡。請注意,cocos2d坐標系的原點在屏幕的左下角,即(0,0)位置在左下角,這與一般的窗口坐標系統在左上角有所區別。x方嚮往右是正,y方嚮往上是正。由於項目是landscape(橫版)模式,這就意味著右上角的坐標是(480,320)。

還有需要注意的是,當我們設置一個對象的位置的時候,這個位置是相對於所加精靈的中心點來加的。因此,如果我們想讓我們的player精靈與屏幕的左邊界水平對齊,並且垂直居中的話。

那麼對於x軸:我們需要設置為[player sprite's width]/2。y坐標設置為[window height]/2。

下面有一張圖,可以更加清楚一些:

好,讓他開始射擊吧!打開Class文件夾並點擊HelloWorldScene.m,然後把init方法用下面的代碼替換掉:

復制代碼
-(id) init
{
if( (self=[super init] )) {
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *player = [CCSp www.hbbz08.com rite spriteWithFile:@"Player.png"
rect:CGRectMake(0, 0, 27, 40)];
player.position = ccp(player.contentSize.width/2, winSize.height/2);
[self addChild:player];
}
return self;
}
復制代碼
編譯並運行,你的精靈這時候應該出現在正確的位置上了。但是,這個前景默認是黑的。對於這張忍者圖片來說,白色的背景可能看起來更好一些。在cocos2d裡面,有一種非常簡單的方式來改變層的背景顏色,那就是使用CCColoredLayer類。好,跟我來吧!點擊HelloWorldScene.h,然後把HelloWorld介面聲明改成下面這樣:

@interface HelloWorld : CCColorLayer

然後點擊HelloWorldScene.m文件,在init方法裡面做一些小小的修改,以便使我們能把層的背景顏色改成白的:

Ⅶ cocos2dx-lua中怎麼使用自定義類以及tolua++的使用

使用cocos2dx-lua開發,免不了自己定義類,但是如何使用自定義的類的?
先了解下lua如何調用c++的:
lua腳本代碼->通過coocs2dx中間解析層代碼->將其轉換並調用cocos2dx c++的前端代碼
coocs2dx中間解析層代碼都在libs/lua/cocos2dx_support/LuaCocos2d.cpp 這個文件中,想了解的可以自己去看下這個文件。
也就是說,你自己定義了一個類,lua能夠調用你自己定義的類,你的自定義類就必須在LuaCocos2d.cpp這個中間解析文件中申明。
看了LuaCocos2d.cpp這個文件,可能有的同學都暈了,不知道怎麼在LuaCocos2d.cpp中申明自己的定義的類。不過,不用擔心,cocos2dx已經提供了tolua++這個工具自動編譯生成新的LuaCocos2d.cpp文件。
下面開始進入正題。
一、創建一個coocs2dx-lua 的Demo工程,然後在class中自己定義個類。
SNSprite.h
[/cpp]
//
// SNSprite.h
// LuaDemo
//
// Created by LiuYanghui on 13-4-8.
//
//
#ifndef __LuaDemo__SNSprite__
#define __LuaDemo__SNSprite__
#include 「cocos2d.h」
USING_NS_CC;
class SNSprite : public CCSprite{
public:
static SNSprite* create(const char* name);
private:
void initData();
};
#endif /* defined(__LuaDemo__SNSprite__) */
[/cpp]
SNSprite.cpp

C++

local function createSunnyLayer()
local layerSunny = CCLayer:create()

local labTips = CCLabelTTF:create("這個icon圖標就是使用的自定義類", "Arial", 18)
labTips:setPosition(ccp(240,280))
layerSunny:addChild(labTips)

local sp = SNSprite:create("Icon.png")
sp:setPosition(ccp(100,100))
layerSunny:addChild(sp)

return layerSunny
end
-- play background music, preload effec t

添加到scene中:

C++

-- run
local sceneGame = CCScene:create() -- 創建場景
--sceneGame:addChild(createLayerFarm()) -- 將農場層加入場景
--sceneGame:addChild(createLayerMenu()) -- 將菜單界面層加入場景
sceneGame:addChild(createSunnyLayer())
CCDirector:sharedDirector():runWithScene(sceneGame)

OK,xcode編譯運行,就看到效果了。

Ⅷ cocos2dx在windows下開發怎麼編譯成apk

下面一段是網路的說明:
Cocos2d-x 是一個支持多平台的 2D 手機游戲引擎,使用 C++ 開發,基於OpenGL ES,基於Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2.1 及更高版本, WindowsXP & Windows7,WindowsPhone 8.[1]Cocos2d-x是一個開源的移動2D游戲框架,MIT許可證下發布的。這是一個C++ Cocos2d-iPhone項目的版本。Cocos2d-X發展的重點是圍繞Cocos2d跨平台。Cocos2d-x提供的框架外,手機游戲,可以寫 在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x[2]項目可以很容易地建立和運行iOS,Android 的三星Bada,黑莓Blackberry操作系統和更多。Cocos2d-x還支持Windows、Mac和Linux等桌面操作系統,因此,我們可以 編寫的源代碼很容易在桌面操作系統中編輯和調試。

總的來說,cocos2dx的android交叉編譯環境還是蠻麻煩的。下面內容就是我一步一步實現的過程。
第一部分 安裝
一、Cygwin安裝
這個安裝比較簡單,網上也有大把的例子,這里我只是簡述一下。
首先去官網www.cygwin.com下載安裝,安裝包分32位和64位兩種.視情況選擇了。因為只是編譯,這里選擇的是32位版本。
下載地址:http://cygwin.com/setup-x86.exe
然後默認安裝,在安裝源的時候,選擇
http://mirrors.sohu.com/cygwin 或 http://mirrors.163.com/cygwin ,哪個好用,就哪個。
安裝的時候,把開發包都選上就可以了。
我這里是把cygwin安裝在c:\cygwin目錄下面了。
註:這里默認的vi不是我們常用的vim,使用起來會很不習慣,你可以根據實際情況下載,在安裝的時候,選擇編輯器的vim,然後就可以用了。如果沒有vim,你用的時候在vi命令行輸入set nocp,就可以正常習慣使用了。
二、 adt-bundle安裝
現在adt-bundle都集成了下面的功能,這樣就不用再去配置eclipse插件了。
l Eclipse + ADT plugin
l Android SDK Tools
l Android Platform-tools
l The latest Android platform
l The latest Android system image for the emulator
下載地址:
Adt-bundle也同樣分32位和64位的,在這里照樣下載32位的版本
http://dl.google.com/android/adt/adt-bundle-windows-x86-20131030.zip。64位的地址我也加上http://dl.google.com/android/adt/adt-bundle-windows-x86_64-20131030.zip
下載完成後,解壓就可以使用。我這里是解壓到e:\adt-bundle
裡面有eclipse,sdk兩個目錄和一個SDK Manager管理軟體。運行SDK Manager可以下載你需要的SDK版本。
注意:你下載的java也要對應的32位和64位的環境,否則eclipse將會啟動不了。牢騷一句,oracle把java和mysql並入後,真是開源的最大悲劇。你去下載它,就明白了。祝願oracle早點倒閉。
三、ndk安裝
下載地址:
32位下載地址
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86-legacy-toolchains.zip
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86.zip
64位下載地址
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64-legacy-toolchains.zip
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64.zip
然後解壓就可以了,我這里解壓到
E:\android-ndk-r9b
四、cocos2dx安裝
我這里下載的版本是cocos2dx v2.2。同時還有一個免費的編輯器CocoStudio,它提供了UI和動畫,資源編輯功能。可以不用mac下面那個收費的軟體了。
今天突然http://www.cocos2d-x.org/怎麼都下載不了,沒辦法,只好到https://github.com/cocos2d/cocos2d-x/這里下載了。找到對應的2.2版本。
Cocos2dx下載地址:
https://codeload.github.com/cocos2d/cocos2d-x/zip/cocos2d-x-2.2
Cocostudio下載地址:
http://d001.download.appget.cn/CocoStudio/DownLoad/v1.0.0.1/CocoStudio_Full_V1.0.0.1.exe
然後cocostudio默認安裝就可以了,我這里把cocos2dx解壓到e:/cocos2dx
五、python安裝
因為,cocos2dx創建工程,需要python,所以這里還需要下載python,去他的官網http://www.python.org/下載就可以了
下載地址:
http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi 這個下載32位版本就可以了。然後默認安裝。我這里安裝到了C:\Python27
六、ant安裝
這個是一個將軟體編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用於Java環境中的軟體開發。這里在生成apk的時候,也用到了。所以也要下載安裝。
http://mirrors.cnnic.cn/apache//ant/binaries/apache-ant-1.9.2-bin.zip
解壓到c:\ant就可以了
到這里,所以需要的軟體,都已經下載,並安裝了。
第二部分:配置
第一步:新建環境變數
點windows的開始菜單-〉計算機 右鍵菜單選擇屬性,彈出屬性對話框。然後選擇高級系統設置,如下圖

然後選擇環境變數
增加
ANT_HOME=C:\ant
PYTHON_HOME=C:\Python27
JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_16
NDK_ROOT=E:\android-ndk-r9b
ANDROID_SDK=E:\adt-bundle\sdk
然後編輯環境變數path,追加 %JAVA_HOME%\bin;%ANT_HOME%\bin;%PYTHON_HOME%;%NDK_ROOT%;%ANDROID_SDK%\tools;%ANDROID_SDK%\platform-tools;
這樣,就可以在CMD窗口執行相關的命令了。
第三部分 cocos2dx的工程准備
第一步:增加android_update.bat
在ant生成apk的時候,會需要知道,你編譯的目標是什麼版本和src.dir等信息。創建這個工程,就是為了自動更新它。批處理的內容是
android update project -p . -t android-10
該文件建好後,命名為android_update.bat,放在E:\cocos2dx\template\multi-platform-cpp\proj.android
注意,請先確認你的ANDROID_SDK是否安裝了對就的版本,android-10是對應的是android2.3,其他的版本請用對應的數字。執行e:\adt-bundle\SDK Manager.exe,如下圖所示:

這里的數字是19
那麼批處理的內容改為
android update project -p . -t android-19
第二步:修改build_native.sh
該文件在E:\cocos2dx\template\multi-platform-cpp\proj.android目錄中,因為在執行build_native.sh的時候,會出現的許可權的問題,所以在這個腳本中,增加了許可權設置,來解決這個問題。
在第67行後面,也就是復制資源的後面增加下面一行
chmod 666 -R "$APP_ANDROID_ROOT"/assets就可以了。如下圖所示

第三步,創建工程復制批處理
在cocos2dx的2.2中,已經少了一些批處理來創建工程,現在全部改用python來創建工程。
現在到E:\cocos2dx\tools\project-creator下,創建一個批處理demo.bat,內容如下
python create_project.py -project %~n0% -package com.android.zdhsoft -language cpp
x ..\..\cocos2dx\platform\android\java\src\* ..\..\projects\%~n0%\proj.android\src /E
上面批處理的
第一行的意思是,建一個工程為%~n0%的工程,包名是com.android.zdhsoft,使用的語言是cpp。%~n0%在批處理表示的是 批處理的文件名,在demo.bat中,%~n0%的值是demo。使用該批處理的好處是,如果建議某一個工程,只有把批處理復制一個,然後重新命名就可 以了。如命名為sample.bat,執行後,就可以行到一個sample的cocos2dx工程。
創建的工程在E:\cocos2dx\projects目錄中。
第二行的意思,復制編譯andiroid工程需要的java文件。否則編譯的時候,會提示找不到對應的類。

Ⅸ 運行cocos2dx引擎哪個python文件添加cocos2d

在cocos2d-x2.1.4以上的版本中,取消了使用vs模版創建項目的方法,開始使用python腳本創建項目,使用python創建項目需要在命令行敲很多指令,比較麻煩。我把這些命令組合在一起,放在了一個批處理文件中,直接雙擊打開批處理文件就可以通過幾個簡單的指令來創建項目。
第一步: 新建一個txt文件,將下面這段代碼拷貝進去,保存文件,將文件名改成create_project.bat。

@echo off
set /p projectName=請輸入項目名稱:
if "%projectName%"=="" goto inputError
set /p packageName=請輸入包標示名:
if "%packageName%"=="" goto inputError
create_project.py -project %projectName% -package %packageName% -language cpp
pause
exit
:inputError
@echo 項目名稱或者包標示名不能為空!
pause

如下圖所示:

第二步: 將create_project.bat這個文件放到你的cocos2d-x的\tools\project-creator目錄之下
下圖是我的電腦的目錄,大家根據自己的電腦實際路徑放置

注意,一定要把create_project.bat放到與create_project.py同一目錄下,不然會找不到.py文件,如果覺得每次都打開這個路徑比較麻煩,可以創建一個快捷方式到桌面,但不要直接復制到桌面!

第三步: 直接雙擊打開create_project.bat就行了,出現下面界面,輸入你的項目名和包名就ok了,也不需要指定使用的語言了,已經設置好了用c++了,創建成功後出現以下界面。

好了去projects目錄下找你的項目吧!

Ⅹ cocos2dx3.10 怎麼運行cocos2dx庫

一、通用准備工作

1、安裝Cocos2d-x 3.1

在Cocos2d官網上下載 Cocos2d-x 3.2+引擎 ,下載後解壓縮。

2、安裝Eclipse與Android SDK

這個在Mac上或是PC上開發都是可以通用的。

Eclipse 在其官網下載( 官網地址 )。

Android SDK 在Android開發者中心下載( 地址 )。

Eclipse是開發Android需要用到的IDE。這是個很牛的IDE,有許多插件讓他變得三頭六臂。要開發Android的程序,需要下載相關的插件,但如果每個插件要自己配置,會是很蛋痛的事情。

如果是新手,推薦使用:ADT Bundle。這是Eclipse+Android SDK的合體,所有的項目都已經幫你配置好了。

3、安裝JDK

Eclipse需要Java環境才能運行。如果事先沒有安裝Java環境,則會報錯。

解決方案安裝jdk( 下載地址 )。

一般來說安裝之後會自動配置好環境變數。如果還沒有解決問題,請查找網路上關於JDK安裝的攻略,很多的。

4、安裝CDT插件 ( 下載地址 )

這是個Eclipse的插件,用來支持Eclipse中C/C++語言的開發。

從Eclipse的官網下載,下載之後,將features和plusins這兩個文件夾裡面的內容復制到Ecplise安裝目錄下對應的文件夾之後就可以了。

5、安裝NDK ( 下載地址 )

這是進行C/C++與Java混合編譯的必要工具。記下下載之後解壓到的目錄,因為到之後的安裝中會用到。

6、安裝ANT ( 下載地址 )

Cocos的Android開發需要用到它,所以下載下來安裝好吧。

二、PC環境下配置過程

1、安裝VS2012 ( 官方地址 )

網上還有很多其他下載地址。

最好是2012,我曾經試過2010,2013,都會出這樣那樣的問題。所以,2012!

2、安裝python 2.7.6 ( 下載地址 )

因為Cocos2d-x的安裝程序是用phthon寫的,所以需要這個軟體。不要下載python3.0以上的版本,否則運行會出錯。如果是Mac,那麼天生就自帶了。

3、進行開發環境配置

以上的工作完成之後,就可以進行配置了。啟動Windows的命令行(CMD)工具。進入Cocos2d-x 3.1的安裝目錄,執行:

python setup.py
Cocos2d-x 3.1版本使用這個setup.py來安裝,十分方便。執行之後會讓你配置上面准備工作中所安裝的:ANT、NDK、SDK等目錄,把安裝到哪兒去了填寫進入就行。

4、建立自己的項目

用setup.py配置好Cocos2d-x的環境之後,你的命令行中就會多如「cocos」的命令,新建項目將使用這個命令進行。示例:

cocos new hello(項目名稱)-p com.hello(包名字)-l cpp(項目類型) -d E:\MyCocos\cocos2d(目錄)
新建的項目會把所有的源文件和庫都拷到你的項目目錄中。所以新建的項目文件會很大,有許多人懷疑這個的必要性,不過到你之後的開發中就會知道這種配置方法是對的了。

項目建立好之後,就可以開發了:

A、進行VS2012的開發。

找到你的項目目錄下的:proj.win32,打開裡面的解決方案就行。剩下的就是你的任務了。一般來說,直接就可以運行。

B、進行Android的開發。

使用Eclipse中的項目導入,導入proj.android中的項目方案。導入之後,因為SDK的問題,一般無法啟動,關於這個問題,以及其它的問題,請參見(四、其它問題解決方案)。

三、MAC環境下配置過程

1、注冊蘋果開發者賬號 ( 注冊地址 )

如果不使用真機,使用模擬器調試,那麼有開發者賬號應該就足夠了。

如果要使用真機調試,需要購買IOS開發者會員,688RMB一年。我看到之前的攻略說要99美元,但是看現在的頁面的的提示,應該只要有網銀就可以支付了。網上的攻略寫得非常復雜,說要下載證書什麼什麼的,現在統統都不需要了,XCode全部為您代勞了,只要照提示一路點同意就行。

2、安裝XCode

在你的開發者首頁下面就有XCode的下載。通過App Store下載安裝即可。

請使用最新的XCode(需要OS X 10.8以上系統支持),並使用App Store安裝。我的MacBook Air從朋友那裡拿來時還是10.7,因為下載總是中斷,屢次不成功,所以用XCode 4.6,但好像不通過App Store安裝會出這樣那樣的問題。所以強烈推薦使用最新的版本。

3、進行開發者環境配置。

與PC的配置一樣,打開MAC的終端程序,執行setup.py,配置好各種SDK的路徑就行。但MAC需要再加上一句:

source /Users/yourname/.bash_profile
這是用來刷新配置文件的。

4、建立項目文件

使用命令行建立。

如果你像我一樣用兩個平台(PC與MAC)開發,可以共享同一個項目目錄。我的項目文件是放在PC上的,MAC通過共享訪問項目文件。

項目建立好之後就可以開發了。MAC下的配置相對簡單,使用XCode打開項目目錄下的proj.ios_mac下的項目配置文件就行。之後基本不會出錯的。

四、其它問題解決方案

Eclipse與Android相關:

問題 :SDK錯誤

因為Cocos2d-x的模版默認是使用Android 2.3.3(API-10),如果新安裝的ADT Bundle或Android SDK,是API-19,則會出現錯誤,解決方案是通過Android SDK中的管理工具(SDK Manager)下載Android 2.3.3的SDK。

問題 :Project 'XXX' is missing required source folder: 'gen'

這個問題就是上面的SDK錯誤導致的。

問題 :undefined reference to 'cocos2d::network::HttpClient::getInstance()'

我是使用網路庫(network)的時候出現這個錯誤的。如果你使用其它庫,解決方案是一樣的。原因是缺少庫的引用。解決方案是在Android.mk裡面增加:

LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static

Cocos2d-x的開發者已經在Android.mk裡面加上了很多這種路徑,平時是注釋掉的。您要使用時把這些增加上去就行。

問題 :fatal error: cocos-ext.h: No such file or directory

問題分析:缺少頭文件路徑的引用

需要在:Android.mk裡面增加

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../cocos2d/extensions

Cocos2d-x的開發者已經在Android.mk裡面加上了很多這種路徑,平時是注釋掉的。您要使用時把這些增加上去就行。

問題 :The import org.cocos2dx.lib cannot be resolved。

無法找到指定的庫文件。解決的方案是增加路徑的引用:Project Properties -> Java Build Path -> Source and then linking 「項目目錄/cocos/platform/android/java/src」

VS2012相關:

問題 :「extensions/ExtensionMacros.h」: No such file or directory

無法打開包括文件。

1、解決方案中,添加「現有項目」--> libExtensions 具體目錄: ..\cocos2d\extensions\proj.win32\libExtensions.vcxproj

2、項目中添加引用-->libExtensions

3、通過:屬性->C/C++->附加包含目錄。附加包含目錄:$(EngineRoot)

如果你使用其它的文件,解決方案是一樣的。1、增加項目的引用。2、附加頭文件的包含目錄。

當遇到COCOS2DX 3.2+版本創建許可權問題時:

首先,打開終端cd到目錄 /cocos2d-x-3.2/tools/cocos2d-console/bin 下, 運行 cocos.py 腳本創建文件。

[javascript] view plain

./cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop
參數說明:

HelloWorldDemo為項目名稱

-p 後面接包名

-l 後面接開發語言類型,有cpp, lua, js三種類型

-d 後面接項目存放的目錄

如果出現 -bash: ./cocos.py: Permission denied ,是因為沒有許可權。 用命令 chmod 修改一下目錄下的 cocos.py 許可權就可以了

[cpp] view plain

chmod u+x cocos.py

熱點內容
subplotpython 發布:2025-05-14 06:53:51 瀏覽:660
豎屏大屏導航工廠密碼一般是多少 發布:2025-05-14 06:49:29 瀏覽:805
如何在手機里設置無線網密碼 發布:2025-05-14 06:47:54 瀏覽:119
動態ip文件伺服器 發布:2025-05-14 06:44:22 瀏覽:890
文字分行的腳本有什麼 發布:2025-05-14 06:33:10 瀏覽:288
svn小烏龜怎麼配置 發布:2025-05-14 06:31:43 瀏覽:393
視頻播放器android 發布:2025-05-14 06:31:43 瀏覽:720
android工作室 發布:2025-05-14 06:26:00 瀏覽:658
汽車官方配置表如何下載 發布:2025-05-14 06:21:41 瀏覽:800
停車項目源碼 發布:2025-05-14 06:20:05 瀏覽:358