Cocos2d-x 捕鱼达人游戏学习教程(3)--创建游戏的场景
2013-07-04 20:16
302 查看
本篇代码例子: http://vdisk.weibo.com/s/ICRLw
我们将创建自己的游戏场景,因此要将HelloWorldScene这个类删掉,之后创建自己的游戏场景类GameScene,这个类继承自CCScene,在实现这个之前我们要创建BackgroundLayer、FishLayer、CannonLayer、PanelLayer和MenuLayer5个类都是继承自CCLayer。
BackgroundLayer是背景层的类用来显示游戏的背景
BackgroundLayer.h代码如下:
BackgroundLayer.cpp代码如下:
如果对上面代码中的do{}while(0)语句不理解推荐这篇文章:/article/1640986.html
之后我们为GameScene类加入代码:
GameScene.cpp
我们还要修改AppDelegate.cpp文件,首先,是先将之前的HelloWorldScene类的头文件删掉,换成GameScene的头文件。
之后再做如下修改。
这时运行程序:
我们要实现FishLayer层的类,在实现它之前我们要先创建一个Fish类。
Fish.h代码如下:
Fish.cpp
这样我们的Fish就完成了,我们将在下一篇完成鱼的图层类FishLayer。
我们将创建自己的游戏场景,因此要将HelloWorldScene这个类删掉,之后创建自己的游戏场景类GameScene,这个类继承自CCScene,在实现这个之前我们要创建BackgroundLayer、FishLayer、CannonLayer、PanelLayer和MenuLayer5个类都是继承自CCLayer。
BackgroundLayer是背景层的类用来显示游戏的背景
BackgroundLayer.h代码如下:
#include "cocos2d.h" USING_NS_CC; class BackgroundLayer:public CCLayer { public: CREATE_FUNC(BackgroundLayer); bool init(); };
BackgroundLayer.cpp代码如下:
#include "BackgroundLayer.h" #include "StaticData.h" bool BackgroundLayer::init() { bool pRet = false; do { CC_BREAK_IF(!CCLayer::init()); //得到屏幕的大小包括宽和高 CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //初始化一个精灵用来显示背景图片 CCSprite* background = CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("background")); //设置背景图片的位置 background->setPosition(ccp(winSize.width * 0.5, winSize.height * 0.5)); //将精灵添加到层上 this->addChild(background); pRet = true; } while (0); return pRet; }
如果对上面代码中的do{}while(0)语句不理解推荐这篇文章:/article/1640986.html
之后我们为GameScene类加入代码:
#include "cocos2d.h" #include "BackgroundLayer.h" USING_NS_CC; class GameScene:public CCScene { public: //CREATE_FUNC这个宏定义能够调用create()方法和init()方法,就是初始化的意思 CREATE_FUNC(GameScene); //初始化时在这个方法中赋值 bool init(); //本类的析构方法 ~GameScene(); //载入资源的方法 void preloadResources(); protected: CC_SYNTHESIZE_RETAIN(BackgroundLayer*, _backgroundLayer, BackgroundLayer); };
GameScene.cpp
// 预载入资源,实现StartScene后将其删除 void GameScene::preloadResources() { //将存放资源的plist文件加入到程序的缓存中 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("fishingjoy_resource.plist"); } bool GameScene::init() { bool pRet = false; do { //调用父类的初始化方法,CC_BREAK_IF就是一个容错保护的方法 CC_BREAK_IF(!CCScene::init()); //调用预加载资源的方法 this->preloadResources(); //初始化背景层 _backgroundLayer = BackgroundLayer::create(); //将层添加到场景中 this->addChild(_backgroundLayer); pRet = true; } while (0); return pRet; } GameScene::~GameScene() { }
我们还要修改AppDelegate.cpp文件,首先,是先将之前的HelloWorldScene类的头文件删掉,换成GameScene的头文件。
之后再做如下修改。
bool AppDelegate::applicationDidFinishLaunching() { 。。。。。。 CCScene *pScene = GameScene::create(); // run pDirector->runWithScene(pScene); return true; }
这时运行程序:
我们要实现FishLayer层的类,在实现它之前我们要先创建一个Fish类。
Fish.h代码如下:
#include "cocos2d.h" USING_NS_CC; typedef enum { k_Fish_Type_Red = 0, k_Fish_Type_Yellow, k_Fish_Type_Count }FishType; class Fish:public CCNode { public: //函数重载FishType type = k_Fish_Type_Red 意思就是传一个参数将k_Fish_Type_Red的值给type static Fish* create(FishType type = k_Fish_Type_Red); //同上 bool init(FishType type = k_Fish_Type_Red); //初始化一个只读的精灵 CC_SYNTHESIZE_READONLY(CCSprite*, _fishSprite, FishSprite); //初始化一个int值,用来设置鱼的种类 CC_SYNTHESIZE_READONLY(int, _type, Type); };
Fish.cpp
#include "StaticData.h" enum { //这个枚举用来标记动画的类型 k_Action_Animation = 0, }; //实现create方法 Fish* Fish::create(FishType type) { Fish* fish = new Fish(); fish->init(type); fish->autorelease(); return fish; }
bool Fish::init(FishType type) { //将鱼类型的标记传进来 _type = type; //根据传进来的_type生成一个字符串,这个字符串的用途是从缓存中取之前生成的动画效果 CCString* animationName = CCString::createWithFormat(STATIC_DATA_STRING("fish_animation"),_type); //从程序的缓存中将动画效果取出 CCAnimation* fishAnimation = CCAnimationCache::sharedAnimationCache()->animationByName(animationName->getCString()); //CCAnimate -- 动画,主要是将动画类CCAnimation生成动作CCAction CCAnimate* fishAnimate = CCAnimate::create(fishAnimation); //设置fishAnimate的tag值 fishAnimate->setTag(k_Action_Animation); //初始化一个鱼的精灵 _fishSprite = CCSprite::create(); //将鱼添加到层上 this->addChild(_fishSprite); //让鱼的精灵对象_fishSprite执行动作,CCRepeatForever永远重复执行 _fishSprite->runAction(CCRepeatForever::create(fishAnimate)); return true; }
这样我们的Fish就完成了,我们将在下一篇完成鱼的图层类FishLayer。
相关文章推荐
- Cocos2d-x 捕鱼达人游戏学习教程(2)--动态数据模型的创建
- Cocos2d-x 捕鱼达人游戏学习教程(1)--静态数据模型的创建
- Cocos2d-x 捕鱼达人游戏学习教程(5)--添加炮塔
- 【Cocos2d-html5游戏引擎学习笔记(7)】CCLayer创建及场景跳转
- Cocos2d-x 捕鱼达人游戏学习教程(4)--实现鱼层类FishLayer
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(四)游戏场景:背景与我机的创建、敌机的创建、物理世界构建
- Cocos2d-x 捕鱼达人游戏学习教程(8)--添加PanelLayer数据面板层
- Cocos2d-x 捕鱼达人游戏学习教程(6)--添加Weapon类
- Cocos2d-x 捕鱼达人游戏学习教程(7)--添加CannonLayer炮塔层
- Cocos2d-x学习(十一):用cocos2d-x实现MoonWarriors(游戏场景切换和主菜单实现)
- cocos2d学习笔记第一章 基础场景创建及基本配置
- 守卫者游戏开发教程之cocos2d-iphone2.0第一部分(菜单场景)
- Cocos2D-X学习3:创建一个新的场景
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十课:Cocos2D-X场景切换1-3
- Cocos2d-x创建和转换场景学习笔记 分类: cocos2d代码编写 2015-07-27 17:38 8人阅读 评论(0) 收藏
- cocos2d-x 菜鸟学习笔记四(游戏场景与场景切换)
- quick-cocos2d-x游戏开发【2】——项目结构分析、创建新场景
- Cocos2d-x创建和转换场景学习笔记