本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5)   

博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果,

转载的时候请务必注明出处:http://blog.csdn.net/yangyu20121224/article/details/12067629

好的,从今天开始我们将进入游戏界面的开发了。话不多说,下面就让我们一起来创

建游戏中的场景。

一、类的创建

1、首先我们新建一个加载场景类,取名为“GameScene”,并继承自CCLayer类。

2、添加好了之后,可以在目录中看到“GameScene.h”和“GameScene.cpp”这两个文件。

二、项目编码

1、在刚刚新建的GameScene类中添加代码, GameScene.h头文件。

  1. #ifndef __GAME_SCENE_H__
  2. #define __GAME_SCENE_H__
  3.  
  4. #include "cocos2d.h"
  5.  
  6. class GameLayer :public cocos2d::CCLayer
  7. {
  8. public:
  9. //初始化方法
  10. virtual bool init();
  11.  
  12. //创建场景
  13. static cocos2d::CCScene* scene();
  14.  
  15. CREATE_FUNC(GameLayer);
  16.  
  17. //初始化组件
  18. bool setupViews();
  19. };
  20. #endif

2、GameScene.cpp文件,这段代码有很详细的注释。

  1. #include "GameScene.h"
  2. #include "StaticData.h"
  3.  
  4. USING_NS_CC;
  5.  
  6. //创建游戏场景
  7. CCScene* GameLayer::scene(){
  8. CCScene* scene = CCScene::create();
  9. GameLayer* layer = GameLayer::create();
  10. scene->addChild(layer);
  11. return scene;
  12. }
  13.  
  14. //初始化方法
  15. bool GameLayer::init(){
  16. bool isRet = false;
  17.  
  18. do
  19. {
  20. CC_BREAK_IF(!this->setupViews());
  21.  
  22. isRet = true;
  23. } while (0);
  24.  
  25. return true;
  26. }
  27.  
  28. // 初始化控件和布景
  29. bool GameLayer::setupViews()
  30. {
  31. bool isRet = false;
  32. do
  33. {
  34. CCLOG("games initialization...");
  35.  
  36. //获得窗口尺寸大小
  37. CCSize winSize = CCDirector::sharedDirector()->getWinSize();
  38.  
  39. //创建背景图片精灵
  40. CCSprite* background = CCSprite::create(STATIC_DATA_STRING("game_background"));
  41. //设置精灵位置
  42. background->setPosition(CCPointMake(winSize.width * 0.5, winSize.height * 0.5));
  43. //添加精灵至图层
  44. this->addChild(background);
  45.  
  46. //加入plist文件至缓存
  47. CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(STATIC_DATA_STRING("GameLayer_plist"));
  48. //从缓存读取并创建精灵
  49. CCSprite* game_box01 = CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("game_ui_box_01"));
  50. //设置锚点
  51. game_box01->setAnchorPoint(ccp(0.5,1));
  52. //设置精灵位置
  53. game_box01->setPosition(CCPointMake(winSize.width * 0.5, winSize.height));
  54. //添加精灵至图层
  55. this->addChild(game_box01);
  56.  
  57. //从缓存读取并创建精灵
  58. CCSprite* game_box02 = CCSprite::createWithSpriteFrameName(STATIC_DATA_STRING("game_ui_box_02"));
  59. //设置锚点
  60. game_box02->setAnchorPoint(ccp(0.5,0));
  61. //设置精灵位置
  62. game_box02->setPosition(CCPointMake(winSize.width * 0.5, 0));
  63. //添加精灵至图层
  64. this->addChild(game_box02,3);
  65.  
  66. //创建背景图片精灵
  67. CCSprite* ui_2p = CCSprite::create(STATIC_DATA_STRING("game_ui_2p"));
  68. //设置精灵位置
  69. ui_2p->setPosition(CCPointMake(winSize.width * 0.5, 41));
  70. //添加精灵至图层
  71. this->addChild(ui_2p,2);
  72.  
  73. isRet=true;
  74. } while (0);
  75. return isRet;
  76. }

3、别忘了在static_data.plist文件中添加图片的路径。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3. <plist version="1.0">
  4. <dict>
  5. <key>default_gold</key>
  6. <string>200</string>
  7. <key>title</key>
  8. <string>title.png</string>
  9. <key>background</key>
  10. <string>background.png</string>
  11. <key>StartScene_Texture</key>
  12. <string>StartScene.plist</string>
  13. <key>start_normal</key>
  14. <string>ui_button_box02_02.png</string>
  15. <key>start_selected</key>
  16. <string>ui_button_box02_01.png</string>
  17. <key>scene_normal</key>
  18. <string>ui_button_box01_02.png</string>
  19. <key>scene_selected</key>
  20. <string>ui_button_box01_01.png</string>
  21. <key>Button_Texture</key>
  22. <string>Button.plist</string>
  23. <key>start</key>
  24. <string>ui_2p_010.png</string>
  25. <key>scene</key>
  26. <string>button_other_014.png</string>
  27.  
  28. <key>loading_title</key>
  29. <string>loading_title.png</string>
  30. <key>loading_1_1</key>
  31. <string>loading_1_1.png</string>
  32. <key>loading_1_2</key>
  33. <string>loading_1_2.png</string>
  34. <key>loading_2_1</key>
  35. <string>loading_2_1.png</string>
  36. <key>loading_2_2</key>
  37. <string>loading_2_2.png</string>
  38.  
  39. <key>game_background</key>
  40. <string>game_background.png</string>
  41. <key>cannon_plist</key>
  42. <string>cannon.plist</string>
  43. <key>cannon</key>
  44. <string>cannon.png</string>
  45. <key>cannon10_plist</key>
  46. <string>cannon10.plist</string>
  47. <key>cannon10</key>
  48. <string>cannon10.png</string>
  49. <key>increase_button</key>
  50. <string>increase_button.png</string>
  51. <key>reduce_button</key>
  52. <string>reduce_button.png</string>
  53. <key>GameLayer_plist</key>
  54. <string>GameLayer.plist</string>
  55. <key>game_ui_2p</key>
  56. <string>game_ui_2p.png</string>
  57. <key>game_ui_box_01</key>
  58. <string>ui_box_01.png</string>
  59. <key>game_ui_box_02</key>
  60. <string>ui_box_02.png</string>
  61. </dict>
  62. </plist>

4、这里还有一个地方要说明,因为博主在加载资源页面跳转到游戏主页面之后出现点小问题,这个小问题也困扰了

博主好几天了,一直没有解决。所以为了不影响写博客的进度,这里我把StartScene.cpp文件中的start_callback()函

数里面的代码改为。

  1. //点击“开始游戏”按钮的回调
  2. void StartLayer::start_callback(CCObject* pSender){
  3. CCLOG( "start game");
  4.  
  5. CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.0f, GameLayer::scene()));
  6. }

改完之后就直接进入游戏主界面了。

5、游戏场景效果图。

对于Cocos2d-X开发来说,博主也算是一个新手,难免都会遇到一些让人头疼的问题。所以这也是为什么博主要跟

大家强调的,一定要以实战为主,只有在实战中才能真正的学习新的知识以及无法预知的困难。这里,我简单的跟大

家描述一下问题的情况,如果也遇到过类似情况的朋友,可以跟博主一起讨论学习:

点击“开始按钮”,进入加载资源页面之后,等到资源加载完毕,按照正常的逻辑应该是会进入到游戏主页面。但

是,进入游戏页面之后,只是短暂的两秒钟后又退回到了资源加载的页面。根据打印的Log日志来看,应该是有什么

对象为空,但是我又没发现这样的对象,所以出现这样的问题很是郁闷,希望广大的网友可以帮忙解决,谢谢了!

源码下载地址

【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)的更多相关文章

  1. Swift游戏实战-跑酷熊猫 09 移除场景之外的平台

    上一节,我们写出了一个疯狂产生平台的东西.所谓上帝欲使其灭亡,必先使其疯狂.所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台.btw如果哪天你觉得自己的老板行为乖张,难以理喻. ...

  2. 【Cocos2d-X游戏实战开发】捕鱼达人之开发前准备工作(一)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5) 博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注明出处 ...

  3. 【Cocos2d-X游戏实战开发】捕鱼达人之单例对象的设计(二)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5)    博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注 ...

  4. 原生Js贪吃蛇游戏实战开发笔记

    前言 本课程是通过JavaScript结合WebAPI DOM实现的一版网页游戏---贪吃蛇的开发全过程,采用面向以象的思想设计开发.通过这个小游戏的开发, 不仅可以掌握JS的语法的应用,还可以学会D ...

  5. cocos2dx游戏开发——捕鱼达人mini版学习笔记(二)——MainMenu的搭建

    一.创建文件~ MainMenuScene.h   MainMenuScene.cpp   MainMenuLayer.h   MainMenuLayer.cpp 那个场景的搭建就不多说了,那个我的打 ...

  6. cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建

    一.创建文件· FishAchor.h还有FishAchor.cpp. 主要就是创建每种鱼的类,方便以后的取用~,很多是重复性的操作,然后我们是mini版,暂时也就加入大概6钟鱼就好= =,然后我们现 ...

  7. js原生捕鱼达人(一)

    捕鱼达人的游戏大家都很熟悉吧,接下来的两三天,我会将整个游戏的原生js写法详细的写出来,整个游戏应用了面向对象的写法:创建构造函数,在构造函数上面添加对象的属性,然后在构造函数的原型上添加方法,当然这 ...

  8. Swift游戏实战-跑酷熊猫 14 熊猫打滚

    这节内容我们来实现熊猫打滚.思路是这样的,当熊猫起跳时记录他的Y坐标,落到平台上的时候再记录它的Y坐标.两个坐标之间的差要是大于一定数值就判断它从高处落下要进行打滚缓冲.至此跑酷熊猫已经像一个游戏的样 ...

  9. Swift游戏实战-跑酷熊猫 13 二段跳的实现

    这节内容我们来实现熊猫的二段跳. 要点: 二段跳的逻辑: 逻辑一,第一次点击屏幕,status就会变成jump. 逻辑二,第二次点击屏幕,status就会变成jump2. 逻辑三,当status变成j ...

随机推荐

  1. java_IO流小结

    字符流和字节流的主要区别: 1.字节流读取的时候,读到一个字节就返回一个字节:  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时.先去查指定的编码表,将 ...

  2. 一台机器同时运行多个appium实例

    测试需要同时在多个android设备上运行,就需要启动多个appium 第一台是运行微信: DesiredCapabilities capabilities = new DesiredCapabili ...

  3. python数据类型—列表(增改删查,统计,取值,排序)

    列表是最常用的数据类型之一,通过列表可以对数据实现方便的存储,修改等操作. 先声明一个空列表: >>> names = [] >>> names [] 可以存多个值 ...

  4. hdu1978How many ways (记忆化搜索+DFS)

    Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标 ...

  5. android_launcher的源码详细分析

    转载请注明出处:http://blog.csdn.net/fzh0803/archive/2011/03/26/6279995.aspx 去年做了launcher相关的工作,看了很长时间.很多人都在修 ...

  6. QT实现透明效果的按钮

    QPushButton { color: rgb(0,88,152) background-color: rgba(97%,80%,9%,50%)}

  7. 程序员的绘图利器 — Gnuplot

      介绍 Gnuplot is a command-line program that can generate two- and three-dimensional plots. It is fre ...

  8. 注册AxtiveX控件

    Win8.1或者Win7下 首先在“管理员的身份”运行cmd 然后输入:regsvr32 D:\***\*.ocx

  9. asp.net中的主题

    用了更方便,在.net网站上,右键,选择添加主题,然后命一个名子,如果,有四个主题, 只需要在web.config的page节里加上styleSheetTheme="Red",就会 ...

  10. ashx ajax 与 自定义javascript函数

    1.getUserPower为自定义javascript函数 获取权限  (1).ashx 处理程序的相对地址(必须是相对地址)  (2).au 权限名称  (3).classname 类名  (4) ...