Cocos2d-x 捕鱼达人游戏学习教程(4)--实现鱼层类FishLayer
来源:互联网 发布:为什么会有网络诈骗 编辑:程序博客网 时间:2024/05/17 03:26
本篇文章的代码例子: http://vdisk.weibo.com/s/ICRLw
在上一篇文章的基础之上,实现FishLayer类。
FishLayer.h
#include "cocos2d.h"#include "Fish.h"USING_NS_CC;class FishLayer:public CCLayer{ public: //用CREATE_FUNC宏创建FishLayer CREATE_FUNC(FishLayer); bool init(); //初始化一个数组,用来存放鱼的对象 CC_SYNTHESIZE_READONLY(CCArray*, _fishes, Fishes); //该类的析构方法 ~FishLayer(); //添加鱼的方法 void addFish();};
FishLayer.cpp
bool FishLayer::init(){ bool pRet = false; do { //用CC_BREAK_IF方法初始化,可以达到容错的功能 CC_BREAK_IF(!CCLayer::init()); //初始化存放鱼对象的数组 _fishes = CCArray::create(); //用CC_SAFE_RETAIN宏来增加_fishes的引用计数 CC_SAFE_RETAIN(_fishes); //循环50次 for (int i =0; i < 50; i++) { //创建一个随机数,CCRANDOM_0_1可以创建0~1之间的随机数 ,之后*2,可以达到1或2随机出现 的效果 int type = CCRANDOM_0_1()* 2; //初始化鱼的对象 ,用create方法创建时传参数的意思是type是个1或2的随机数,根据type值的不同创建不同的鱼对象 Fish* fish = Fish::create((FishType)type); //将fish添加到_fishes数组中 _fishes->addObject(fish); } //每隔3秒调用一次addFish方法 this->schedule(schedule_selector(FishLayer::addFish),3.0); pRet = true; } while (0); return pRet;}
void FishLayer::addFish(){ //获取当前屏幕的大小 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //生成一个1到11之间的随机数 int countToAdd = CCRANDOM_0_1() * 10 +1; int countHasAdded = 0; CCObject* iterator; //将鱼的对象从_fishes数组中取出 CCARRAY_FOREACH(_fishes, iterator) { //用遍历方法从数组中取精灵对象时,只能用CCObject类取出,取出之后要强转成相对应的类型 Fish* fish = (Fish*)iterator; //对鱼是否在场景中做判断 if (!fish->isRunning()) { this->addChild(fish); //todo 后期应重设Fish产生时的随机坐标 int randomX = CCRANDOM_0_1() * winSize.width; int randomY = CCRANDOM_0_1() * winSize.height; fish->setPosition(ccp(randomX, randomY)); countHasAdded++; //下面判断的目的是为了让分批显示在屏幕上而且每次显示的数目不一致 if (countToAdd == countHasAdded) { break; } } }}FishLayer::~FishLayer(){ CC_SAFE_RELEASE(_fishes); }
接下来我们要将鱼层的类加入到场景中:
在GameScene.h类添加如下代码:
添加红色字体的代码。
#include "cocos2d.h"#include "BackgroundLayer.h"#include "FishLayer.h"//添加头文件USING_NS_CC;
class GameScene:public CCScene{ public: //CREATE_FUNC这个宏定义能够调用create()方法和init()方法,就是初始化的意思 CREATE_FUNC(GameScene); //初始化时在这个方法中赋值 bool init(); //本类的析构方法 ~GameScene(); //载入资源的方法 void preloadResources(); CC_SYNTHESIZE_RETAIN(BackgroundLayer*, _backgroundLayer, BackgroundLayer); //声明鱼层类的对象 CC_SYNTHESIZE_RETAIN(FishLayer*, _fishLayer, FishLayer); };
添加红色字体的代码。
GameScene.cpp
//预载入资源,实现StartScene后将其删除void GameScene::preloadResources(){ //将存放资源的plist文件加入到程序的缓存中 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("fishingjoy_resource.plist"); //从之前加入到系统缓存中的plist文件中读取KEY为fish_frame_count的值 这个值是8 int frameCount = STATIC_DATA_INT("fish_frame_count"); for (int type = k_Fish_Type_Red; type < k_Fish_Type_Count; type++) { CCArray* spriteFrames = CCArray::create(); for (int i = 0; i < frameCount; i++) { //获取图片的名字 CCString* filename = CCString::createWithFormat(STATIC_DATA_STRING("fish_frame_name_format"),type,i); //用相应图片的名字将图片取出 CCSpriteFrame* spriteFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(filename->getCString()); //放入数组 spriteFrames->addObject(spriteFrame); } //生产动画类 CCAnimation* fishAnimation = CCAnimation::createWithSpriteFrames(spriteFrames); fishAnimation->setDelayPerUnit(STATIC_DATA_FLOAT("fish_frame_delay")); //给每一个动画起个名字,为了以后将动画取出 CCString* animationName = CCString::createWithFormat(STATIC_DATA_STRING("fish_animation"),type); //将动画类的对象放入系统的缓存中,以键值对的形式 CCAnimationCache::sharedAnimationCache()->addAnimation(fishAnimation, animationName->getCString()); }}
bool GameScene::init(){ bool pRet = false; do { //调用父类的初始化方法,CC_BREAK_IF就是一个容错保护的方法 CC_BREAK_IF(!CCScene::init()); //调用预加载资源的方法 this->preloadResources(); //初始化背景层 _backgroundLayer = BackgroundLayer::create(); //将层添加到场景中 this->addChild(_backgroundLayer); //初始化鱼的层 _fishLayer = FishLayer::create(); //将鱼的层添加到场景中 this->addChild(_fishLayer); pRet = true; } while (0); return pRet;}
现在运行程序鱼就会出现在屏幕上
- Cocos2d-x 捕鱼达人游戏学习教程(4)--实现鱼层类FishLayer
- Cocos2d-x 捕鱼达人游戏学习教程(3)--创建游戏的场景
- Cocos2d-x 捕鱼达人游戏学习教程(1)--静态数据模型的创建
- Cocos2d-x 捕鱼达人游戏学习教程(2)--动态数据模型的创建
- Cocos2d-x 捕鱼达人游戏学习教程(5)--添加炮塔
- Cocos2d-x 捕鱼达人游戏学习教程(6)--添加Weapon类
- Cocos2d-x 捕鱼达人游戏学习教程(7)--添加CannonLayer炮塔层
- Cocos2d-x 捕鱼达人游戏学习教程(8)--添加PanelLayer数据面板层
- 【cocos2d-x IOS游戏开发-捕鱼达人7】游戏场景基础实现
- Cocos2d-x简单游戏<捕鱼达人>代码实现|第五部分:游戏类
- Cocos2d-x教程(29)-3.x版本遮罩层实现捕鱼达人滚动数字表盘
- Cocos2d-x游戏开发之 《捕鱼达人》 总结
- 【cocos2d-x IOS游戏开发-捕鱼达人6】实现开始菜单
- 【cocos2d-x IOS游戏开发-捕鱼达人19】音乐与音效的实现
- Cocos2d-x简单游戏<捕鱼达人>代码实现|第一部分:鱼类
- Cocos2d-x简单游戏<捕鱼达人>代码实现|第二部分:子弹、渔网、大炮类
- Cocos2d-x简单游戏<捕鱼达人>代码实现|第四部分:加载场景类
- Cocos2d-x简单游戏<捕鱼达人>代码实现|第三部分:菜单类
- 网络安全领域专家(更新中...)
- Undeclared identifier:XXX
- poj 2485 (kruskal算法)
- Win7运行命令的打开方法 Win7运行命令大全(45个)
- Android :输入一串字符串,转换成数组(split)....
- Cocos2d-x 捕鱼达人游戏学习教程(4)--实现鱼层类FishLayer
- MESI协议简介
- 20130705
- CF 327E(Axis Walking-状态压缩Dp-lowbit的使用)
- 《Cracking the coding interview》
- 中文URL处理
- 《正确地做事与做正确的事同样重要》
- 前端性能优化:网络存储的静态缓存和非必要内容优化 Web Storage
- Oracle 游标使用全解