当前位置:首页 » 编程软件 » 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

热点内容
交叉编译优化 发布:2025-05-14 03:48:52 浏览:531
动图在线压缩 发布:2025-05-14 03:35:24 浏览:132
w7共享无法访问 发布:2025-05-14 03:35:24 浏览:482
为什么微信会出现账号密码错误 发布:2025-05-14 03:03:30 浏览:692
幻影脚本官网 发布:2025-05-14 03:01:13 浏览:826
servlet的webxml怎么配置 发布:2025-05-14 02:51:46 浏览:772
怎么取消手势密码 发布:2025-05-14 02:51:11 浏览:639
openvpn搭建vpn服务器搭建 发布:2025-05-14 02:47:52 浏览:998
密码忘了从哪里找 发布:2025-05-14 02:39:09 浏览:548
我的世界什么服务器有前途 发布:2025-05-14 02:30:31 浏览:528