如何编译cocos2dx游戏

12 不出意外的话将会在你项目文件夹\bin\debug\android下发现test-debug.apk,这个安装包因为是arm结构所以不一定能在电脑上模拟运行。拷到手机上安装会看到cocos2dx游戏的图标。

为什么使用cocos2dx游戏游戏开發要求性能,cocos3dx用到了c++编译的linux链接库和open ol es的图形库对于2d游戏的开发做到这些已经很好了。本文仅供记录或可参考。

}
















如果项目文件一多的话势必编写起来麻烦而且需要更改时也很容易编写错误,在下一篇文章中用py脚本来避免这种情况

编写完LOCAL_SRC_FILES后若果有引入第三方库的话还需修改以下兩处(这里以iconv库为例)




这里为什么要这样子写,可以从iconv根目录\android.mk下查找



6. 编译项目如果看到控制台输出


}

这一周接触到Cocos2D开发在它的官网仩看到Ray Wenderlic写的关于cocos2d开发的文章,感觉写的挺好翻译了一下。 大家可以在上面看到作者的更多内容 

初次翻译文章望各位关照,想说的话在莋者的文章里边也有表述就直接开始吧 

Cocos2D 是iPhone开发中一个非常有用的库,它可以让你在创建自己的iPhone游戏时节省很多的时间它具有很多的功能,比如sprite(精灵)扶持非常酷的图形效果,动画效果物理库,音频引擎等等 

我是一个Cocos2D开发的新手,尽管有很多有用的教程来介绍如何开始利用 Cocos2D开发但我不能找到一个教程是我期待的那样,它可以创建一个简单但功能丰富的游戏这个游戏具有动画,碰撞还有音频不需偠其它更多的高级 功能。我最终自己完成了一个简单的例子并且在我自己的经验下写了这篇教程以便于它对于其它的新手会有用。 

这篇敎程将带你从头到尾的来 了解用Cocos2D来创建一个简单的iPhone游戏的过程你可以一步步的按教程来,也可能跳过直接从文章的最后来下载例子工程当然,里边会有 ninjas(忍者)

如果你的 XCode不是安装在默认的目录下面(比如说你的机器上面可能安装了多个版本的SDK)你可以在安装脚本里边手工嘚添加一个参数。(译者注我没试过, 试过的大大可以给指明一下) 

Cocos2D被组织到”scenes”(场景)的概念中有点类似于游戏中 的”levels”(等级)或昰”screens”(屏幕).比如你需要有一个场景来为游戏初始化菜单,一个场景为游戏的主要动作一个场景为游戏结束。 在场景里边你要有许哆的图层(就像Photoshop里边的一样),图层可能包含多个(nodes)结点比如sprites(精 灵),labels(标签)menus(菜单)及其它。当然结点也包含其它的结点(比如一个精灵可鉯有一个子精灵)。 

在这个例子工 程中你可以看到有一个场景-HelloWorldScene,我们也将在它里边开始实现我们的游戏继续打开源文件,你会看到茬init这个方法中它 加入了一个label来在场景中显示”Hello World”。我们将要放入一个精灵来代替它


既然我们已经有了 自己的图片,我们就要找出应该茬哪来放置玩家请注意,在Cocos2D里边屏幕的左下角是坐标原点(00),x和y值向右上角递增因为工程是在横向 模式,这意味着左上角的坐标值是(480, 320) 

还需要注意的是在默认状态下当我们为一个物体设置position属性 时,position属性是和我们添加的精灵的中心点关联起来的因此如果我们想把玩家精靈放置在屏幕水平方向的左边,垂直方向的中间: 

你现在可以编译并运行这个工程你的精灵应该会正确显示,但背景默认 是黑色的对這个作品来说,白色背景会更好在Cocos2D中,把一个图层的的背景颜色更改成为一个算定义颜色的简单方法是利用 CCColoredLayer这个类来尝试一下吧。选ΦHelloWorldScene.h并且改变HelloWorld接口省明像下面的那样:

然后选中 HelloWorldScene.m并对init方法进行一个细微的修改来把背景色改为白色

继续编译并运行工程,你会看到你的玩镓精灵在白 色的背景上噢,我们的忍者已经准备表演了     

移动目标 下面我们需要 在场景中添加一些目标让忍者去打击。为了让事情变的哽有趣一些我们要让这些目标移动起来-要不然没什么挑战性。我们在稍稍偏屏幕右边的地方创建一些目 标并为它们建立动作来让它們向左移动。 

在init方法之前添加下面的方法:

在这里我以一种详细的方式来阐明事情以便让 事情更容易理解第一部分我们应该理解目前已經讨论了:我们做一些简单的计算,以确定我们要创建对象设置对象的位置,并把它以添加玩家精灵的相同方式添 加到场景中去 

这里邊的新元素是添加动作。Cocos2D提供了很多非常方便内置的行动可以用来制作动画的行动如移动,跳跃的行动 褪色的行动,动画动作及更多在这里我们为目标使用了三项动作。


?CCMoveTo:我们使用CCMoveTo动作来指导物体屏幕左边请注 意,我们可以指定运动应采取的持续时间在这里,我們采用2-4秒的随机速度 

下 面,添加前面我们已经在CCCallFuncN动作中已经提过的回调函数你可以在addTarget函数前面添加: 

该函数的目的是从场景中移除精灵,一旦该精灵离开屏幕这一点很重要,这样我们不会随着时间的推移有许许多多 的无用精灵在场景之外而内存泄漏。请注意还有其怹(更好)的方式来解决这个问题诸如具有可重复使用Sprite的数组,但这个初级教程我们正在采取简 单的方法。 

最后一件事情在我们运行程序前我们需要实际调用的方法来创建目标!为了让事情更有趣点,我们让目标随着时间的推移持续大量 的出现我们可以在Cocos2D中通过安排┅个回调函数的定期调用来完成这个任务。每1秒执行一次因此,在init函数返回之前调用下面的函数调用

现在像下面这样简单的实现这個回调函数:

就是这样!所以,现在如果你编译并运行该项目,现在你应该看到目标愉快地在屏幕上移动:     在这时忍者希望有一些动莋-让们添加射击吧!我们有很多的方法来实现射击,但在这个游戏中我们要在 用户点击屏幕时来进行射击从玩家射出的子弹将按照点擊的方向前进。 

我想用一个CCMoveTo动作去保持事情还在初级层面上但为了 实现这个,我们必须做一些数学这是因为CCMoveTo要求我们必须为子弹目的哋,但我们不能只使用触摸点因为接触点仅仅代表相对于玩家的射击方向。 事实上我们希望保持子弹通过触摸点,直到移出屏幕 

因此,大家可以看到我们利用起点到触摸点的X和Y方向的偏移创造了个小三角形。我们只需要以 同样的比例大三角形 - 我们知道我们需要一个離开屏幕的结束点 好了,上代码首 先,我们必须使我们的层可以支持触摸添加下面一行到您的init方法:

因为我们已经让图层支持触摸,现在我们可以收到触摸事件的回调因此,让我们实现ccTouchesEnded方法只要用 户完成了接触该方法就会调用,具体如下: 

在第一部分我们选择┅个触摸点来使用,先得到在当前视图中的位置然后调用convertToGL来把坐标转化到当前 的布局。这点很重要因为我们现在是横向模式。 

接下来峩们加载子弹精灵并像往常一样设置初始坐标然后,我们确定我们希望子弹移动的位 置按照前面描述的算法,使用玩家和触摸点之间嘚联系来作为指导载体 

请注意,该算法并不理想我们正在迫使子弹继续前进直到在X方向 上离开屏幕-即使首先在Y方向上已经离开了屏幕!有不同的方法来解决这个,包括检查离开屏幕的最小长度让游戏的逻辑回调核查离开屏幕的子弹和消除回调, 而不是使用回调方法等等。但这个初级教程我们将保持原样。 

我们最需要做的就是确定为运动时间我们希望,子弹会于一个恒定的速率按 照射击方向前進所以我们再次做一些数学。我们可以找出利用勾股定理来算出移动的距离记得在几何学里边,这是规则指出了一个直角三角形的斜边长度等于 两直角边的平方的和的开方。 

一旦我们有了距离我们只是除以速度,以获得所需的时间这是因为速度=距离/时间,或换句話说 时间=距离/速度 

剩下的事情就是设置动作,就想给目标设置动作一样编译并运行,现在你的忍者可以向前来的一大群目标开火了


碰撞检测 所以现在我们已经让shurikens满天飞了-但我们的忍者真正想要做的是放倒一些目标因此,让我们加入一些代码以检测当我们 的子弹和目标的相交。 

要做到这一点我们首先要在目前的场景中更好的跟踪目标和子弹。把以下的代码添加到你的 HelloWorldScene类声明中: 

在init方法中初始化这兩个数组: 

我 们也应该考虑在你的dealloc方法中清理内存:

现在,修改你的addTarget方法添加新目标到目标数组 中并给它设置一个标记以便在以后使用: 

还 要修改你的ccTouchesEndec方法,把新子弹添加到子弹数组中给它设置一个标记以便在以后使用: 

最后修改你的 spriteMoveFinished方法,根据标记的不同在适当的数組中移除精灵:

编译并运行该项目 以确保一切正常在这个时候应该没有什么明显的不同,但现在我们有标记我们要实现碰撞检测。 

以仩应该很清楚了我们只是通过子弹和目标数组,按照它们的边界框创建相应的矩形并使用 CGRectIntersectsRect方法来检查交叉。如果发现有我们从场景囷数组中把它们移除。请注意我们是把这些对象添加到一个 toDelete数组中,因为你不能在一个正在迭代的数组中删除一个对象。同样有更多的朂佳方法来实现这种事情,但我采用了这个简单的方法 
在 你准备要运行前你只需要做一件事-通过添加下面的代码到init方法中去安排上面的方法尽可能多的运行 

让它编译并运行现在当你的子弹和目标碰撞时它们就会消失! 

最后的润色 我 们非常接近拥有一个可行的(但非常简單)的游戏了。我们只需要添加一些声音效果和音乐(因为什么类型的游戏没有音乐的!)和一些简单的游戏逻辑 

,关于iPhone的一系列音频编程博客,你会非常高兴地知道对于Cocos2D开发者来说,在游戏中实现基本的声音效果是多么的 简单 
第一步,拖动一些背景音乐和一个射击声喑效果到你的resources文件夹中随意使用

在你的init方法,像下面的代码所示启动 背景音乐:

然后用下面的代码来代替GameOverScene.h中的内容:

请注意这里有两個不同的对象:一个场景(scene)和一个图层 (layer)。场景可以包含多个图层尽管在这个例子是它只有一个。图层里边只在屏幕中心放了一个标签并安排了一个3秒中的过渡,然后返回到 HelloWorld场景中 
最后,让我们添加一些非常基本的游戏逻辑首先,让我们跟踪玩家破坏的目标添加┅个成员变量到您的 HelloWorldScene.h中 HelloWorld类如下:

继续编译并运行该项目,这样你有了羸和输的判断条件并会在适当的时候看到游戏结束的场景

}

我要回帖

更多关于 cocos2dx游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信