1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Cocos2d-x血条跟随怪物运动--之游戏开发《赵云要格斗》(5)cocos2dx 3.3移植版

Cocos2d-x血条跟随怪物运动--之游戏开发《赵云要格斗》(5)cocos2dx 3.3移植版

时间:2020-01-18 12:25:53

相关推荐

Cocos2d-x血条跟随怪物运动--之游戏开发《赵云要格斗》(5)cocos2dx 3.3移植版

源码:git@:baidang201/ARPG_Zhaoyun.git

本章在前面的基础上《Cocos2d-x自定义血条及其美化--之游戏开发《赵云要格斗》(4)》设计一个怪物类,并实现怪物的上方显示血条,血条跟随怪物的运动而运动。用到的血条类在上一讲中,平时我们游戏一般怪物都是头顶一个血条的,这里我们就是要实现这个功能。

Cocos2d-x版本:2.2.5

工程环境:windows7+VS

打开方式:将工程放在cocos2d-x安装目录下的project文件夹下用VS打开

重要说明:由于TexturePacker试用期结束了,不能再用,所以接下来的动画都不合成plist和整张的PNG。同时,之前的赵云图像太动画效果不是很好,所以换了个赵云的图片。另外,将整个项目的类都分别归档,这样更加容易看懂些,所以hero.h和hero.cpp有些函数进行了更改,同时调用的地方也改了下。这里一定要注意!

这是本章的一个效果:

(下一章的效果)

一、更改英雄hero类

赵云的图片:以下中是一部分,动画就是通过读一张一张的PNG图片来实现的(没有再合成Plist和整张PNG)

更改后的英雄类Hero.h(类的函数和变量还是不变的,使用方法还是不变的,只不SetAnimation函数参数更改变了)

更改后的英雄类Hero.cpp

记得在用的地方要改下SetAnimation,其它地方都不变,只不SetAnimation函数参数更改变了

效果:和以前相比,赵云的图片更加清楚了些,而且攻击的图片也比较顺了一点(20张图片啊!)

二、自定义带血条的怪物

这里的血条用到了前面的自定义血条,思路就是把上篇自定义的血条类ProgressView应用在Monster中,得到Monster类中怪物的位置,然后根据这个位置来设置血条成员变量的位置(一般在上方),最后把怪物精灵和血条类都addchild()进来就行了。

下面这是怪物的资源:(一部分,动画也是通过一张一张的播放的)

Monster.h:

Monster.cpp:

使用方法:

HelloWorldScene.h添加头文件 #include "Monster.h"

HelloWorldScene.h添加成员变量: Monster *monster1;//怪物种类1

HelloWorldScene.cpp的Init()函数进行初始化:

这是不带血条的怪物:

这是带血条的怪物:

好了,这一篇就结束了,下一篇我们将会来讲讲智能怪物,让怪物动起来并能出动攻击!

下面是血条跟随怪物移动的效果。

源码下载:血条跟随怪物运动

//

总结下TexturePacker纹理的调用和多个图片调用的区别。

1 压缩纹理的调用

将压缩纹理图片载入全局纹理缓存CCSpriteFrameCache-》获取精灵框帧CCSpriteFrame,将特定序列的精灵框帧增加到列表-》使用列表初始化动画Animation-》使用动画包装成动作CCAnimate

2 多个图片的调用

使用创建动画对象Animation->动画增加每一帧的图片->动画包装成动作CCAnimate

:如下是示例代码:

《1 压缩纹理

CCSpriteFrameCache *m_frameCache=CCSpriteFrameCache::sharedSpriteFrameCache();

m_frameCache->addSpriteFramesWithFile(name_plist,name_png);

//用一个列表保存所有的CCSpriteFrameCache

Vector<CCSpriteFrame*> frameArray = Vector<CCSpriteFrame*>();

unsigned int i;

for(i=startIndex;i<=num;i++)

{

CCSpriteFrame* frame=m_frameCache->spriteFrameByName(CCString::createWithFormat("%s%d.png", actNameInNamePng, i)->getCString());

frameArray.pushBack(frame);

}

//使用列表创建动画对象

Animation* animation=Animation::createWithSpriteFrames(frameArray);

animation->setLoops(-1);//表示无限循环播放

animation->setDelayPerUnit(0.1f);//每两张图片的时间隔,图片数目越少,间隔最小就越小

//将动画包装成一个动作

CCAnimate* act=CCAnimate::create(animation);

m_HeroSprite->runAction(act);

《2多个图片的调用CCAnimation* animation = CCAnimation::create();

for( int i=1;i<=num;i++)

{

char szName[100] = {0};

sprintf(szName,"%s%d.png",name_each,i);

animation->addSpriteFrameWithFileName(szName); //加载动画的帧

}

animation->setDelayPerUnit(2.8f / 14.0f);

animation->setRestoreOriginalFrame(true); //动画播放结束后,回到初始帧

animation->setLoops(-1); //动画循环

//将动画包装成一个动作

CCAnimate* act=CCAnimate::create(animation);

m_MonsterSprite->runAction(act);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。