![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
cocos2dx
文章平均质量分 86
小牛_牛sky
学海无涯
展开
-
CocoStudio 在c++响应回调方法
cocos2dx 3.9cocostudio 3.9今天用到了按钮的回调方法回调方法有Click和Touch两种。分别是对应cocos2dx的addClickEventListener和addTouchEventListener.看代码//依次对应csb文件的按钮名称 std::string btnName[]={"singlegame_btn","mulgame_b原创 2016-11-17 10:53:06 · 2106 阅读 · 1 评论 -
cocos2dx 植物大战僵尸 17 路障僵尸
原版植物大战僵尸的路障是饰品,能阻挡一部分伤害,在路障掉落前路障僵尸是不会受伤的。如下为个人头脑风暴。路障僵尸使用装饰者的话,需要继承自ZombieBase,由于图片原因,所以内部需要有一个普通僵尸。对木桶僵尸,内部处理的逻辑为站立,行走,攻击,当路障死亡后更新交给Zombie即可。路障在活着时负责对伤害的吸收,在路障死亡时,会有一个路障掉落动画。同时路障僵尸的贴图消失,显示内部僵尸的原创 2017-06-06 16:05:35 · 1184 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 12 僵尸卡片
本次实现僵尸卡片和僵尸的产生。以前的代码中我们是通过在tmx中设置的一个属性来判断当前的游戏是处于主角是植物还是僵尸,如下上面的card属性,则标识了当前的关卡状态,目前的卡片有两种1.植物卡片 在开始游戏时会显示出出场的僵尸的种类,然后选择植物卡片,接着游戏开始(这个已经实现)2.僵尸卡片 选择僵尸卡片(和选择植物卡片类似),然后直接开始游戏先放出调整的代码,在Gam原创 2017-06-01 21:40:18 · 1008 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 13 僵尸的产生
新建一个僵尸基类,注意如果使用cocos2dx,把SDL改为CC/*僵尸移动方向*/enum class ZombieDir{ Left, Right,};class ZombieBase : public Entity{ SDL_BOOL_SYNTHESIZE(m_bDead,Dead);//是否死亡 SDL_SYNTHESIZE(int,m_nHitPoint,HitP原创 2017-06-02 20:59:37 · 1478 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 14 僵尸的攻击
先看看目前僵尸层的实现class ZombieLayerDelegate{public: virtual Terrain*findTerrainOfZombieCollision(ZombieBase*zombie)=0;};class ZombieLayer : public Layer{private: map > m_zombies; //TODO扩展使用 vect原创 2017-06-03 16:54:43 · 523 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 18 土豆雷
土豆雷是我打植物大战僵尸时喜欢使用的植物,它能保证在开局时能快速地种植植物。今天就实现土豆雷。土豆雷有一个准备时间,在准备时间完成前不具有任何攻击力。以后破土,能够炸死小范围的僵尸,之后土豆雷死亡。土豆雷在破土后,每一帧检查是否有僵尸和它发生碰撞,如果有,就炸死小范围的僵尸,然后有一个土豆雷炸过后的特效,以及僵尸有一个变成灰的特效。我的思路是使用一个特殊的子弹Boom,这个子弹并没有贴图,只是原创 2017-06-07 20:43:48 · 809 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 15 豌豆射手的实现
豌豆射手类似于向日葵,只不过向日葵发动技能是产生阳光,而豌豆射手则是产生豌豆子弹罢了。我只找到了上图的资源,所以在豌豆射手的状态改变则简单多了。class Peashooter : public Plant{ SDL_SYNTHESIZE(int,m_nDamage,Damage);//伤害值private: float m_elapsed;public: Peashoot原创 2017-06-04 15:06:40 · 1575 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 19 读报僵尸
今天实现读报僵尸,需要对僵尸类进行重写一下,目前的代码结构并不能很好地实现读报僵尸。class ZombieBase : public Entity{ SDL_BOOL_SYNTHESIZE(m_bDead,Dead);//是否死亡 SDL_SYNTHESIZE(int,m_nHitPoint,HitPoint);//当前血量 SDL_SYNTHESIZE(float,m_fCriti原创 2017-06-08 19:12:26 · 765 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 21 塔基的更新
在前面的帖子中,塔基生成有两种方法,一种是通过tmx的tile layer,图层进行创建,另一种是通过对象层进行创建,需要注意的是,僵尸的findTerrainOfZombieCollision,是查找和僵尸碰撞的塔基的,内部实现如下Terrain*GameScene::findTerrainOfZombieCollision(ZombieBase*zombie){ //获取当前僵尸所在的原创 2017-06-10 14:55:22 · 297 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 22 寒冰射手
寒冰射手是我目前感觉比较难的植物,因为这个植物的子弹会给僵尸一个减速的debuff的,而这个debuff对有的僵尸 起作用,比如一般的僵尸,而对带有报纸的僵尸或者一些特殊的僵尸也是不会减速的,所以饰品需要以下两个功能1.吸收伤害2.吸收一些debuff因为c++无法返回两个返回值,所以就不能使用返回值了,对于c++,可以使用引用来改变伤害值和当前攻击类型。先对当前的饰品基类进行改变。原创 2017-06-12 20:41:00 · 640 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 20 卷心菜投手
在实现卷心菜投手前,需要对以前的代码进行稍微地调整。因为以前仅仅实现了豌豆射手,所以不需要关注第一个僵尸的位置,而卷心菜投手就不同了,它是锁定第一个最靠近的僵尸,然后进行攻击的,所以需要对僵尸进行x轴的排序。static bool zombieComparisonLess(ZombieBase* n1, ZombieBase* n2);在ZombieLayer中添加这个静态方法,实现如下b原创 2017-06-10 09:27:14 · 1370 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 23 撑杆僵尸
撑杆僵尸在一开始快速运动,能跳过第一个碰到的植物,并且在这之后速度会变慢下来,并且在跳的过程中是不与子弹碰撞 以及免疫冰冻等特殊效果的。所以需要有一个撑杆饰品类,作为以后的扩展使用,同时需要更新僵尸基类。class ZombieDelegate{public: virtual Plant*getTopPlant(Terrain*terrain) = 0; virtual void sh原创 2017-06-14 22:30:47 · 762 阅读 · 0 评论 -
RPG游戏 01-人物行走和地图图块
要开发一个游戏,地图是首先应该考虑的,我这里使用的是tiled来编辑地图。tiled对于一般的游戏开发还行,相对通用,不过也没有那么强的针对性,要对从tiled解析的内容里再在程序中进行相应的处理。今天考虑的是图块,对于图块,如果简单地分的话可以分为两种属性:1.priority属性 2.pass_down pass_left pass_right pass_uppriprity,顾名思原创 2017-12-29 21:58:27 · 5190 阅读 · 0 评论 -
cocos2dx粒子引擎的分析-1
先分析ParticleSystem类的init群代码bool ParticleSystem::init(){ return initWithTotalParticles(150);}这个是默认的初始化函数,里面调用了initWithTotalParticles()函数。bool ParticleSystem::initWithFile(const std::strin...原创 2018-09-16 09:00:31 · 701 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 24 坚果和大坚果
前些天实现了撑杆僵尸,对于撑杆僵尸来说,只有大坚果是无法跳过去的,所以本节实现坚果和大坚果,对于这两种植物,实现起来是不难的,因为只是一般的植物,然后会有两个损伤点,损伤点1:int(MAX HP*2/3) 损伤点2:int(MAX HP*1/3)(摘自百度词条pvz)。接着看看实现吧。class WallNut : public Plant{protected: enum class原创 2017-06-17 20:34:46 · 792 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 16 僵尸的行走死亡和攻击死亡
在实现僵尸的攻击时死亡和行走时死亡前,先更新一下原有的僵尸基类添加了两个成员protected: Terrain*m_pAim;//当前塔基 ZombieDelegate*m_pDelegate; MoveBehavior*m_pMoveBehavior; HpBar*m_pHpBar; Garnishry*m_pGarnishry;//饰品为血量条和饰品。原版的植物大战僵尸使用原创 2017-06-05 22:49:53 · 790 阅读 · 0 评论 -
cocos2dx EventListenerCustom 和NotificationCenter的优缺点
(本人总结,如有不对,请多多指正)自从cocos2dx 3.x后,NotificationCenter就标记为废弃了,而是用EventListenerCustom代替NotificationCenter 实现很简单,里面有着数组NotificationObserver当你注册了一个消息的同时,也注册了消息所响应的函数,这些包含在NotificationObserver类中,当有消息发出原创 2016-11-26 12:18:35 · 2137 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 2 创建卡片层
一般情况下,游戏开始流程是,进入游戏,获取各种信息,镜头自动向右,然后出现卡片选择界面,另外就是还会有一个判断,就是当前获取的植物个数是否大于个人所拥有的卡槽数,如果大于,就出现卡片选择界面,否则,直接选定所拥有的卡片,然后镜头回转,开始游戏不难了解,这得实现卡片选择界面和卡片界面,卡片选择界面负责卡片的选择卡片界面则有两个功能,在游戏处于卡片选择状态时,点击卡片会从卡片层移出该卡原创 2017-05-22 21:09:56 · 933 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 3 卡片
卡片更新主要在update(float)中,主要用于对卡片的cd,是显示正常图片还是显示不可点击图片进行更新代码如下void Card::update(float dt){ m_fCurCD -= dt; //cd已经完成 if (m_fCurCD <= 0.f) { m_fCurCD = 0.f; auto sunNum = DynamicData::getInsta原创 2017-05-23 20:02:03 · 559 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 4 太阳
游戏中的场景有的会产生阳光,所以需要在每一个关卡设置一个标识,来确定是否产生阳光,在tmx中添加以下属性之后在LevelLayer中获取该属性void LevelLayer::loadProperties(){ auto &properties = m_pTiledMap->getProperties(); for (auto property : properties原创 2017-05-24 20:20:08 · 695 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 5 塔基Terrain的更新
以前的代码中并有设置行数这个概念,但是植物大战僵尸这个游戏里确实是有一个概念的,那怎么设置行数呢?个人认为,每一行都有一个僵尸的行走路径,并且路径之间是不交叉的,那么我们就可以先生成路径,然后在生成terrain的时候检测当前和那个路径发生了碰撞,如果发生碰撞,就获取这个折线的所在行数,传递给terrain,然后把terrain添加到对应的容器中这个行数是跟植物的攻击方式有关的,植物的攻击方式原创 2017-05-27 10:34:26 · 543 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 6 植物层
上一节实现了塔基的行数的确定,这一节就着手于植物的创建。下面就说说植物类的继承关系这里说明下,这个游戏我打算使用box2d,不过这里并不是要进行物理模拟,而是仅仅用作物理碰撞,因为有些地方使用box2d会更好,比如,在屋顶场景中有个斜坡,豌豆等子弹碰到后会消失,使用box2d就不难实现,而且使用box2d也便于碰撞调试等等。另外,我也使用了Physics Editor和Text原创 2017-05-27 19:38:28 · 721 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 7 向日葵和双生向日葵
这个是向日葵的贴图,由于只找到了这样的资源图片,也就这样用了,不过这样做好处还是有的。使用遮罩让这两个向日葵只显示一个,当处于正常动画时显示上方的图片,当要生成太阳时就显示下方的图片。(同双生向日葵)至于遮罩,则如图所示,只是显示一部分,不过需要注意的是,设置遮罩后还需要设置回默认遮罩。有一个帖子http://blog.csdn.net/wei_hehe/article/d原创 2017-05-28 13:36:46 · 1160 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 9 容器植物类
在写容器植物类前,需要对Terrain进行一些小小的更新。这次我是把Terrain中提取出Carrier类,让Terrain塔基和容器类植物都继承自这个类,对于Carrier类,添加的内容很少,只是把Terrain以前的代码移动Carrier中就行了class Carrier{ //使用cocos2dx,把SDL改成CC即可 SDL_SYNTHESIZE(TerrainTy原创 2017-05-28 22:43:22 · 532 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 8 植物类和向日葵的小更新
这次实现容器类的植物,即睡莲和花盆不过在写之前,需要重写下以前的Plant代码。/*植物类型*/enum class PlantType{ Common,//普通类植物 Vessel,//容器类植物};这个是植物类型,目前仅仅有一般性植物和容器类植物,以后也可能会再添加然后在Plant添加属性m_plantType,表示当前的植物类型,和m_pVesselPlant,这个是为原创 2017-05-28 22:20:03 · 488 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 10 铲子的实现
铲子的作用是移除植物,而且铲子是和卡片互斥的,即点击了卡片,再点击铲子时会取消卡片的选中,反之亦然,接下来看看铲子的实现吧class Shovel : public Entity{private: //当前是否处于选中状态 bool m_bSelected;public: Shovel(); ~Shovel(); CREATE_FUNC(Shovel); bool init(原创 2017-05-29 16:19:19 · 804 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 1 简言创建关卡层
本系列不定期更新,我也在网上找了一些资源,但都没能很好地还原原作,不得不说有些遗憾,这次的编写使用的是类cocos2dx的语法,因为cocos2dx的更新速度很快,所以我采用的是类似于伪代码的形式,只贴上具体的代码,另外,我是边写程序边写心得,称不上是教程,我会写下来让我感到纠结的地方,有什么不对的或者不好的,请指点,大家共同努力游戏框架采用的是MVC(应该是吧)。GameScene作原创 2017-05-19 14:51:39 · 1587 阅读 · 3 评论 -
cocos2dx-TextureCache::addImageAsync函数详解
这几天使用了cocos2dx后,对异步加载很感兴趣,所谓过异步加载,就是开启多线程进行资源的加载,同时因为cocos2dx的PoolManager(内存池)不是线程安全的,所以在工作线程中就得避免使用release() retain() autorelease()等函数。因为现在的cocos2dx已经是3.x时代了,好些内容已经进行了改变,就比如异步加载资源,cocos2dx在 2.x使用的是原创 2017-05-09 20:27:37 · 2662 阅读 · 0 评论 -
cocos2dx 植物大战僵尸 11 场景自带的植物
本次实现场景中一开始就存在的实体,如屋顶关卡一开始会有花盆,墓碑等都能比较好的实现。首先在tmx中添加一个对象层,名称为entity object layer,负责保存关卡自带的实体。这个关卡中添加了两个睡莲,可以看到右侧,名称为LilyPad,类型为plant,加上类型是便于以后的扩展,目前仅仅实现添加植物。,目前我是在画面回转时产生这些植物的,即levelStart()函数原创 2017-05-31 21:58:38 · 1472 阅读 · 7 评论 -
cocos2dx粒子引擎的分析-2
粒子系统分为发射器和粒子,发射器的作用就是获取配置文件中的各种数据,然后在特定的时刻产生粒子,并为该粒子赋值,而为了让粒子更加具有随机性,而采用了*Variance变量和CC_RANDOM_MINUS1_!()来保证随机性。接下来则主要分析粒子的产生、更新和结束。先看addParticles(int count),这个函数的作用有两个,第一个开辟出足够的空间(只是单纯的增加了_aprtic...原创 2018-09-16 11:45:31 · 581 阅读 · 0 评论