cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建
一、创建文件·
FishAchor.h还有FishAchor.cpp。
主要就是创建每种鱼的类,方便以后的取用~,很多是重复性的操作,然后我们是mini版,暂时也就加入大概6钟鱼就好= =,然后我们现在就来搭建~。
二、鱼的基类
1、定义~
class FishActor : public Sprite //继承精灵类,然后作为各种鱼的基类,有最基本的属性
{
public:
enum class FishActorType //首先在这里需要得知,鱼的类型
{
SmallFish,
AngelFish,
Croaker,
Amphiprion,
Bream,
MarlinsFish,
}; /** Speed property of the fishes */
CC_SYNTHESIZE(float, speedX, SpeedX); //速度~
CC_SYNTHESIZE(float, speedY, SpeedY); FishActorType fishType; //鱼的类型 /** Create the fish by their types */
static FishActor* createWithType(FishActorType fishType); //创建方法~ /** Play the death animation */
virutal Animate* playDeathAnimation(); //鱼死亡时的动画~ /** Update the fish movement */
void updateFishMovement(float dt); //鱼出现的动画~ /** Activate the fish movement */
virutal void activateFishMovement(); //激活 protected:
CC_SYNTHESIZE(float, fishScore, FishScore); //鱼的得分~ };
这个主要是作为一个大的接口类,方便用同一个接口,创建不同的鱼,节约重复性的代码操作~。具体的实现呢~
2、实现~
(1)创建方法~
FishActor* FishActor::createWithType(FishActorType fishType)
{ FishActor *fish=nullptr; //创建一个空指针 //Create the fishes by the fish type
switch (fishType) //根据类型进行创建
{
case FishActorType::SmallFish: fish = SmallFishActor::create();
break;
case FishActorType::AngelFish: fish = AngelFishActor::create();
break;
case FishActorType::Croaker: fish = CroakerActor::create();
break;
case FishActorType::Amphiprion: fish = AmphiprionActor::create();
break; case FishActorType::Bream: fish = BreamActor::create();
break; case FishActorType::MarlinsFish: fish = MarlinsFishActor::create();
break; default:
break;
} return fish;
}
(2)鱼移动的movement
void FishActor::updateFishMovement(float delta)
{
auto direction = rand() % - 1.0f;
auto shiftX = (rand() % + )*direction;
auto shiftY = (rand() % + )*direction; setSpeedX(shiftX == ? : shiftX);
setSpeedY(shiftY == ? : shiftY); auto rotation = -atan2(shiftY, shiftX);
this->setRotation(rotation*180.0f / 3.14f + 180.0f);
}
3、其中一种鱼的创建~
(1)类的声明~
class AngelFishActor : public FishActor
{ public: bool init(); CREATE_FUNC(AngelFishActor);
Animate* playDeathAnimation(); //每个鱼敲掉的动画不一样~
void activateFishMovement();
};
(2)具体实现
1、init()
bool SmallFishActor::init()
{ FishActor::init(); //一般不会不成功的= =,是继承Sprite里面的创建~ setSpeedX(1.0f); //设置速度~
setSpeedY(1.0f); setFishScore(1.0f); 设置得分~ fishType = FishActorType::SmallFish; //Read the swimming animations textures
auto fishes = Vector<SpriteFrame*>();//动态数组容器
fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_001.png"));
fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_002.png"));
fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_003.png"));
fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_004.png")); //Create swimming animation
auto fishAnimation = Animation::createWithSpriteFrames(fishes, 0.1);
auto fishAnimate = Animate::create(fishAnimation); //Run the swiming action forever
runAction(RepeatForever::create(fishAnimate)); return true;
}
2、鱼移动的动画创建
void SmallFishActor::activateFishMovement()
{
schedule(schedule_selector(FishActor::updateFishMovement), + rand() % ); //调用基类函数~
}
3、死掉的动画~
Animate* SmallFishActor::playDeathAnimation()
{ //Read the death anmtions textures
auto deathFrames = Vector<SpriteFrame*>(); //创建一个数组
deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_001.png"));
deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_002.png"));
deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_003.png"));
deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_004.png"));
deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_005.png")); //Create the death anmation
auto deathAnimation = Animation::createWithSpriteFrames(deathFrames, 0.1);//设置播放的时间间隔~
auto deathAnimate = Animate::create(deathAnimation); 返回创建好的动画~
return deathAnimate;
}
三、七说八说~
图片资源已经上传的github~:https://github.com/Wenne/FishingMini
cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建的更多相关文章
- cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建
一.创建文件~ MainMenuScene.h MainMenuScene.cpp MainMenuLayer.h MainMenuLayer.cpp 那个场景的搭建就不多说了,那个我的打 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴
上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音
<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像
Cocos2d-x中的图像是通过精灵类来显示的.在Cocos2d-x中游戏中的每一个角色.怪物.道具都可以理解成是一个精灵,游戏背景作为一种特殊的单位将其理解成是一个精灵也没有什么不妥.在源文件本章目 ...
- cocos2dx游戏开发——别踩白块学习笔记(二)——经典模式的实现
一.创建GameScene以及GameLayer 就是简单创建一个Scene而已,在此就不多说啦~,可以参照我的打飞机的学习笔记(2). 二.添加一个开始栏 很简单,就是调用Block中的create ...
- 《Cocos2d-x游戏开发实战精解》学习笔记2--在Cocos2d-x中显示一行文字
在Cocos2d-x中要显示文字就需要用到Label控件.在3.x版本的Cocos2d中,舍弃了之前版本所使用的LabelTTF.LabelAtlas.LabelBMFont 3个用于显示文字的类,而 ...
- cocos2dx游戏开发——别踩白块学习笔记(一)——Block类
一.Block类介绍 当然啦,Block类在这个游戏里就是必需品= =,因为整体都是由这个搞出来的,所以我们可以把游戏需要实现的功能都放在这里. 主要有下面这些功能(经典模式): 1.创建一个Bloc ...
- Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇
懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...
- cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发
cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发 的产生 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622 ...
随机推荐
- 高性能的分布式内存对象缓存系统Memcached
Memcached概述 什么是Memcached? 先看看下面几个概念: Memory:内存存储,不言而喻,速度快,对于内存的要求高,不指出的话所缓存的内容非持久化.对于CPU要求很低,所以常常采 ...
- 不错的linux下通用的java程序启动脚本
不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...
- PQ格式化虚拟机硬盘如何生效
用pq格式化虚拟机硬盘后,安装时,总是从dhcp的网卡启动,没有从硬盘启动 但是用ghost是可以拷贝镜像文件的 这就是说,硬盘有了,但是没有将硬盘"激活",没有将硬盘设为acti ...
- 分析器错误消息: 类型“test.test.testx”不明确: 它可能来自程序集“F:\testProject\bin\test.test.DLL”或程序集“F:\testProject\bin \testProject.DLL”。请在类型名称中显式指定程序集。
问题描述: RT 分析器错误消息: 类型“test.test.testx”不明确: 它可能来自程序集“F:\testProject\bin\test.test.DLL”或程序集“F:\testProj ...
- thinkphp中limit方法
limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多.ThinkPHP的limit方法可以兼容所有的数据库驱动类的. 用法 限制结果数量 例如获取满足 ...
- 浅谈如何使用Log4j记录日志
一.什么是log4j Log4J是Apache的一个开放源代码的项目.通过使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格 ...
- NGUI 学习笔记实战之二——商城数据绑定(Ndata)
上次笔记实现了游戏商城的UI界面,没有实现动态数据绑定,所以是远远不够的.今天采用NData来做一个商城. 如果你之前没看过,可以参考上一篇博客 NGUI 学习笔记实战——制作商城UI界面 ht ...
- [BZOJ2724][Violet 6]蒲公英
[BZOJ2724][Violet 6]蒲公英 试题描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 输入示 ...
- Insertion Sort List
对链表进行插入排序,比对数组排序麻烦一点. ListNode *insertSortList(ListNode *head) { ListNode dummy(-); for (ListNode *c ...
- Linux prerouting和postrouting的区别
我大概清楚一点就是从内网出去的时候用POSTROUTING进来的时候用PREROUTING,可是做透明代理的时候确是用PREROUTING.这是为什么呢? 回复: sunnygg pre还是post是 ...