cocos2dx游戏开发专栏
文章平均质量分 71
cocos2dx游戏开发专栏
尹成
尹成微信18510341407,助理微信18514203048
展开
-
cocos2d-x游戏开发系列教程-搭建cocos2d-x的windows开发环境
在上一篇中我们为了方便创建一个新工程来写cocos2d-x程序,我们将cocos2d自带的模板稍微修改下。我们到cocos2d-x-2.2.1\template目录中可以看到模板multi-platform-cpp,下面我们将它的win32平台的解决方案文件进行修改,进入目录cocos2d-x-2.2.1\template\multi-platform-cpp\proj.win32,在我的电脑上绝原创 2013-12-12 16:02:35 · 7035 阅读 · 6 评论 -
cocos2d-x游戏开发系列教程-前言
cocos2d-x游戏开发前景: 最近企业对于Cocos2D-X开发人才的用人需求很大,而且所提供的薪资相当可观。为满足广大向往游戏开发行业同学的需求,特推出适合新手的Cocos2D-X手游开发教程。Cocos2d-X是一个技持多平台的2D游戏引擎,使用C++开发,基于OpenGL ES,支持WoPhone、iOS、Android、Windows等操作系统。Cocos2d-X主要是围绕跨平台,快捷原创 2013-12-12 11:26:21 · 3484 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-中国象棋00-前言
象棋描述在说代码之前,我们先让象棋效果闪亮登场,让大家看到最后的效果,以方便大家对代码的理解欢迎界面中国象棋程序,运行起来的第一个界面是一个欢迎界面,该欢迎界面在停留一秒后进入游戏界面游戏主界面新局:所有棋子归位,状态复位开始:在开了[新局]之后,点击[开始]开始游戏,只有点击开始之后,才能移动棋子悔棋:后退两步棋难度:该功能未实现选中棋子如果某个棋子选中,该棋子用绿色框围住,表示选中状态移动棋子原创 2013-12-27 14:37:48 · 11201 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-中国象棋01-工程文件概述
上一篇博文我们看到了象棋的效果图,这一张我们来看象棋代码的整体概述让我们先对整个代码框架有个了解。主目录:主目录包含内容如上图:classes目录:业务代码proj.win32:包括main.cpp和工程文件Resorces:代码中用到的资源剩下三个文件我们不用,不解释了classes目录:classes目录代码如上图这里包含了了WelCome.cpp:是欢迎页面的实现AppDelegate.cp原创 2013-12-27 15:20:43 · 9148 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-中国象棋02-main函数和欢迎页面
之前两个博客讲述了象棋的规格和工程文件之后,我们继续深入的从代码开始学习cocos2dx首先从程序入口main函数开始main函数int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine,原创 2013-12-27 22:59:45 · 8556 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-坦克大战游戏之子弹的碰撞检测处理
在上篇我们加上了简单的坦克之间的碰撞检测,这篇我们继续加上子弹之间,子弹与坦克之间的碰撞检测,对于上一篇碰撞处理不太完美的地方我们继续改进。1.子弹之间的碰撞 //玩家子弹和敌方子弹之间的碰撞 CCObject* pObj; CCARRAY_FOREACH(mEnemyTanks, pObj) { Bullet* enemyBullet = ((Tank*)pObj)->getBulle原创 2013-12-27 23:36:07 · 10055 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-中国象棋03-主界面
前情回顾上个博客说道我们象棋程序进入了欢迎界面,在欢迎界面下等待一秒进入主界面进入主界面的关键代码如下:CCScene* pScene = CCMainMenu::scene(); 创建scene...CCDirector::sharedDirector()->replaceScene(ps); 显示scene最关键的是CCMainMenu::scene函数,说明后面要显示的scene类型是C原创 2013-12-28 01:44:34 · 10539 阅读 · 1 评论 -
cocos2d-x游戏开发系列教程-中国象棋04-摆棋
前情回顾在之前的学习中,我们已经了解到,下棋主界面是由CCMainMenu类实现的,在它的init函数中,初始化了主界面需要的各种数据,包括:创建控件,初始化32个棋子,初始化执行变量等等,在这个博文中,我们主要来学习,32个棋子是如何被初始化并显示在界面上的。这个显示和initCoordinate以及了解32个棋子显示在界面的目的,是为了让大家更好理解32个棋子的数据结构,这些数据结构在当棋子走原创 2013-12-28 07:26:28 · 7755 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-中国象棋05-开始游戏
前情回顾通过CCMainMenu的init函数,已经把所有的按钮,棋子都摆放完毕了,但是这个时候,棋子是不能走动的,只有在开始游戏之后才能移动棋子。点击按钮,开始游戏,那么点击开始按钮之后,程序究竟发生了什么事,我们继续看代码到创建这个开始按钮的地方。开始按钮的创建开始按钮的创建代码,在上一篇博文中有所提起,但是没有重点提及,是在CCMainMenu::init()函数中// 开始按钮 pIte原创 2013-12-29 00:18:44 · 7595 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-中国象棋06-游戏规则
前情回顾上一个博文我们提到象棋运动的函数dealWithChess,但是只是说该函数完成了棋子的选择和移动功能其实在这个函数里,在移动棋子之前,是要对棋子的移动是否合法进行判断的,我们一起来看看如何对棋子进行判断的判断移动规则入口在dealWithChess中,关注如下代码,这个judgeAction就是判断棋子移动是否合法的入口了这个代码是判断棋子的移动是否合规则,如果不合规则,则清除状态最后返原创 2013-12-30 08:36:00 · 8295 阅读 · 0 评论 -
cocos2dx进阶学习之CCObject
继承关系CCObject -> CCCopying类定义class CC_DLL CCObject : public CCCopying{public: // object id, CCScriptSupport need public m_uID unsigned int m_uID; // Lua reference id int原创 2014-01-18 22:27:58 · 2595 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽01-前言
前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实现,并以一些篇幅来详细讲述遇到的具体问题和具体的类,由浅入深的学习cocos2dx。程序效果图在学习超级马里奥之前,我们依旧看看超级马里奥的程序运行之后的样子,以便获得感性认识。同学们可以到这里下载源代码(密码是c.itcast.cn),并用vs20原创 2014-01-19 20:56:22 · 8327 阅读 · 2 评论 -
cocos2d-x游戏开发系列教程-超级玛丽02-代码结构
代码下载链接http://download.csdn.net/detail/yincheng01/6864893解压密码:c.itcast.cn前景回顾上一篇博文提到超级马里奥的游戏效果,大家是否已经搭建好环境,让马里奥运行起来呢?代码结构本文主要的目标是让大家粗略了解马里奥的代码结构,以方便后续的学习。appDelegate:应用程序代理CMGameMap:游戏地图类,负责游戏地图的加载和整个程原创 2014-01-20 20:38:25 · 5321 阅读 · 0 评论 -
cocos2dx进阶学习之CCApplication
继承关系CCApplication-> CCApplicationProtocol类主要成员变量static CCApplication * sm_pSharedApplication;静态成员变量,保存唯一的CCApplication实例的地址。在CCApplication的构造函数里保存唯一实例的地址。类主要成员函数CCApplication();构造函数,在构造函数里将单例唯一的指针保存在静原创 2014-01-20 23:16:33 · 3188 阅读 · 0 评论 -
cocos2dx进阶学习之CCEGLView
继承关系CCEGLView-> CCEGLViewProtocolCCEGLView是窗口,在不同平台上有不同的实现,而CCEGLViewProtocol是CCEGLView定义的接口,所以学习CCEGLView,主要是要学习CCEGLViewProtocol中定义的接口。类主要成员CCEGLView();构造函数,初始化所有成员变量。virtual void end();删除窗口,做窗口清理工作原创 2014-01-21 15:36:06 · 6020 阅读 · 1 评论 -
cocos2dx进阶学习之屏幕适配
背景在学习cocos2dx时,我们在main函数中发现一句代码,#include "main.h"#include "AppDelegate.h"#include "CCEGLView.h"USING_NS_CC;int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInsta原创 2014-01-21 16:09:57 · 3543 阅读 · 1 评论 -
cocos2d-x游戏开发系列教程-超级玛丽03-main函数
代码下载链接http://download.csdn.net/detail/yincheng01/6864893解压密码:c.itcast.cnmain函数内容#include "main.h"#include "AppDelegate.h"#include "CCEGLView.h"USING_NS_CC;int APIENTRY _tWinMain(HINSTANCE hInsta原创 2014-01-21 16:18:34 · 3603 阅读 · 1 评论 -
cocos2dx进阶学习之CCDirector
继承关系CCDirecotor -> CCObject, TypeInfoCCDirector翻译成中文一般叫做导演,负责整个游戏场景的切换和游戏周边的服务。原创 2014-01-23 10:35:14 · 2514 阅读 · 0 评论 -
cocos2dx进阶学习之CCScene
继承关系CCScene -> CCNode -> CCObjectCCScene抽象了一个场景的概念,类似舞台的一幕函数static CCScene *create(void);静态创建函数,创建一个CCScene对象,并初始化以及调用autorelease函数让cocos2dx管理该对象生命周期bool init();初始化函数,对该对象进行初始化说明CCScene从CCNode继承,因此更多的原创 2014-01-23 10:42:15 · 2269 阅读 · 0 评论 -
cocos2dx进阶学习之CCNode
继承关系CCNode -> CCObjectCCNode在cocos2dx中抽象舞台对象,需要渲染的对象都是从CCNode派生,包括CCScene,CCLayer,CCSprite等等CCNode提供包容关系管理成员函数virtual bool init();static CCNode * create(void);创建和初始化接口,create函数会自动调用autoreleasevirtual原创 2014-01-24 05:48:08 · 3243 阅读 · 0 评论 -
cocos2dx进阶学习之坐标转换
在cocos2dx中,有四种坐标系GL坐标系:左下为原点,x轴向右,y轴向上UI坐标系:左上为原点,x轴向右,y轴向下世界坐标系:与GL坐标系相同本地坐标系:是节点(CCNode)的坐标系,原点在节点左下角,x轴向右,y轴向上GL坐标和UI坐标转换在导演类(CCDirector)中CCPoint CCDirector::convertToGL(const CCPoint& obPoint);CCP原创 2014-01-24 09:58:21 · 2961 阅读 · 1 评论 -
cocos2d-x游戏开发系列教程-超级玛丽04-AppDelegate
代码下载链接http://download.csdn.net/detail/yincheng01/6864893解压密码:c.itcast.cn背景上一篇博文提到在CCApplication::run()函数中,调用虚函数applicationDidFinishLaunching,将初始化的控制权留给开发者。如何实现,为什么要这么实现呢?如何实现:虚函数重载实现的方法就是开发者从CCApplica原创 2014-01-24 10:12:14 · 3599 阅读 · 0 评论 -
cocos2dx进阶学习之CCLayer
继承关系CCLayer -> CCNode,CCTouchDelegate,CCAccelerometerDelegate,CCKeypadDelegateCCLayer在cocos2dx中抽象的是一个层,场景的一部分,CCLayer的父类很多,除了CCNode之外还有CCTouchDelegate,CCAccelerometerDelegate,CCKeypadDelegate,这三个类都是用户原创 2014-01-24 11:59:41 · 2698 阅读 · 1 评论 -
cocos2dx进阶学习之CCSprite
继承关系CCSprite -> CCNodeRGBA -> CCNode, CCRGBAProtocol CCTextureProtocol从继承关系可以看出,CCSprite也是一个CCNode的子类,在cocos2dx中,CCSprite抽象了舞台中的角色对象,类似舞台中的舞者,或者舞台中的某一个道具。成员函数static CCSpri原创 2014-01-26 00:08:42 · 2553 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽05-CMMenuScene
代码下载链接http://download.csdn.net/detail/yincheng01/6864893解压密码:c.itcast.cn背景上一篇博文提到appDelegate,在该类的重载函数applicationDidFinishLaunching函数中,程序进入CMMenuScene场景,我们顺藤摸瓜来学习CMMenuScene。类定义头文件class CMMenuScene : p原创 2014-02-10 15:00:21 · 3088 阅读 · 0 评论 -
cocos2dx进阶学习之场景切换
背景在学习马里奥时,我们学习到从菜单场景到游戏场景的切换,代码如下void CMMenuScene::OnStartCallBack( CCObject *pSender ){ CCDirector* pDirector = CCDirector::sharedDirector(); CCScene *pScene = CMGameScene::CreateGameScene(); pDi原创 2014-02-10 15:00:47 · 2871 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽06-CMGameScene
背景在CMMenuScene中,当用户点击开始游戏时,导演让场景进入到CMGameScene头文件class CMGameScene : public cocos2d::CCLayer,public CMReceiver{public: // there's no 'id' in cpp, so we recommend returning the class instance pointe原创 2014-02-10 15:59:32 · 3799 阅读 · 1 评论 -
cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap
背景在上一篇博客中,我们提到CMGameScene,但是CMGameScene只是个框架,实际担任游戏逻辑的是CMGameMap类,这个博文就来了解下CMGameMap头文件class CMGameMap : public cocos2d::CCTMXTiledMap ,public CMReceiver{protected: enum { enTagMario = 998,原创 2014-02-10 16:24:05 · 3988 阅读 · 1 评论 -
cocos2dx进阶学习之CCTMXTiledMap
继承关系CCTMXTiledMap -> CCNode它由CCNode派生,我们已经知道CCNode是cocos2dx的舞台对象的公共父类,所以CCTMXTiledMap也是个舞台对象成员static CCTMXTiledMap* create(const char *tmxFile);通过一个文件,创建一个地图对象,这个文件是由工具编辑的地图文件static CCTMXTiledMap* cre原创 2014-02-10 17:04:33 · 2547 阅读 · 0 评论 -
cocos2dx进阶学习之CCTMXLayer
继承关系CCTMXLayer -> CCSpriteBatchNodeCCTMXLayer是在瓦片地图中,抽象一个层的类,它继承自CCSpriteBatchNode,也就是说它抽象了一批相同图片的精灵,在瓦片地图中,用层来抽象她们。成员函数CCSprite* tileAt(const CCPoint& tileCoordinate);获取该坐标的精灵,这里的坐标是网格坐标unsigned int原创 2014-02-11 13:43:15 · 2791 阅读 · 0 评论 -
cocos2dx进阶学习之瓦片地图编辑器
之前学习了瓦片地图类,现在我们来学习下瓦片地图制作工具这个是开源的工具,可以从网上下载,下面我们演示下怎么做地图步骤1将需要用到的图片放到一个目录下,比如我机器上就是d:\tiled,这些图片是基础纹理步骤2打开软件创建一个新的文件步骤3设置格式,我这里没做设置,按照默认继续步骤4将新的tmx地图另存到图块目录步骤5将图块加入完成之后,在右下角就会看到这个图块的内容步骤6增加图层增加完图层之后,修原创 2014-02-11 14:14:13 · 3867 阅读 · 0 评论 -
cocos2dx进阶学习之CCSpriteBatchNode
继承关系CCSpriteBatchNode -> CCNode, CCTextureProtocol成员变量inline CCTextureAtlas* getTextureAtlas(void)inline void setTextureAtlas(CCTextureAtlas* textureAtlas) 获取/设置纹理图集,纹理图集是管理一张大图纹理和区域信息结构体static CCSpri原创 2014-02-11 23:09:28 · 2613 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(三)-按键处理
在地图初始化好了之后,就开始移动马里奥吧,我在windows下,是使用键盘来移动马里奥的w是跳,d是前进,a是后退,那么在程序里是怎么来获取这个按键的呢?普通的windows程序,在按键之后,会有个win32消息发送到应用程序,但是cocos2dx里,没有用这个机制,而是在帧刷新函数中,主动去获取按键状态根据状态来对马里奥进行处理。帧刷新函数是在CMGameScene类中注册的,还记得CMGame原创 2014-02-13 11:03:27 · 3805 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(四)-马里奥平移
上一篇博文提到,程序如何获取键盘输入,也就是D键按下,程序获取到前进指令,那么获取到前进指令之后,马里奥是如何前进的呢,这篇文章我们重点讨论这个问题。马里奥的移动,依旧是在帧刷新函数中,这个调用过程上个博文说过,这里不再重复,简单来说就是CMGameScene::OnCallPerFrame调用CMGameMap::OnCallPerFrame,再调用CMGameMap::MarioMove函数,原创 2014-02-13 11:58:16 · 5298 阅读 · 1 评论 -
cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(五)-地图卷动
马里奥在平移的过程中,涉及到地图的卷动问题。在这个游戏里,地图比窗口大,窗口只是显示了地图的一部分,因此马里奥在移动的时候,移动到一定位置之后要卷动地图,否则马里奥移动到窗口右边之后......那结果将会很难看。卷动地图的原理在于,将地图的放在窗口的位置变化下。如下图所示地图在何时卷动呢?这个看我们的设计,在我们的代码中,卷动是这么实现的:当右键按下,也就是前进键按下时,马里奥就向前移动,移动结束原创 2014-02-13 13:48:05 · 3567 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽07-CMGameMap(六)-马里奥跳跃
当w键按下时,马里奥执行跳跃动作执行跳跃动作也是在MarioMove函数中调用的实际的跳跃则调用了mario对象的OnCtrlJump函数,来看看OnCtrlJump函数吧void CMMario::OnCtrlJump(){ //根据马里奥当前状态 来处理 switch(m_eCurMarioStatus) { case enMarioStatusStandLeft: //待机 和 跑原创 2014-02-13 14:09:55 · 5245 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽08-消息机制
在超级玛丽游戏里,地图类CMGameMap负责所有的程序逻辑,它包含了背景地图,包含了游戏元素精灵,当游戏中的精灵之间发生碰撞时,比如马里奥撞上砖头这种事情发生时,马里奥对象本身不知道怎么处理这个逻辑,这个时候需要有一个机制,让马里奥通知地图对象,去处理这个游戏逻辑,这种通知机制,在cocos2dx中并没有提供。在马里奥游戏里,提供了这个机制,我认为值得好好学习。一般说来,由于地图对象包含了所有的原创 2014-02-13 15:23:25 · 3378 阅读 · 0 评论 -
cocos2d-x游戏开发系列教程-超级玛丽09-怪物激活与移动
在游戏中,很多怪物本身是会移动的,这里主要有蘑菇怪,乌龟等。原创 2014-02-14 15:53:45 · 3914 阅读 · 0 评论 -
cocos2dx进阶学习之CCBI文件
在马里奥这个游戏里,我们用到了几个ccbi文件,比如蘑菇怪,马里奥等,下面是加载马里奥代码从这个代码可以看出,马里奥不是个精灵,是一个CCNode对象,是CCBReader对象从一个文件读出来的CCNode,那mario.ccbi究竟是什么文件呢?ccbi文件是cocosbuilder软件制作的场景资源,现在可以包含动画,像mario.ccbi就包含了一些动画在里面。资源的加载:ccbi资源的加载原创 2014-02-14 16:22:29 · 12030 阅读 · 0 评论 -
cocos2dx进阶学习之CCAction
CCAction在cocos2dx中,抽象了节点的动作。它由CCObject派生,因此它不是渲染节点。它经常的用法是,创建一个action,然后让某个CCNode对象(一般是精灵),去执行它。在马里奥代码里,执行马里奥跳跃的代码如下://增加跳跃运动 CCJumpTo *pJump = CCJumpTo::create(_MARIO_BASIC_JUMP_TIME_,ccp(getPosi原创 2014-02-14 17:22:52 · 2748 阅读 · 0 评论