***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

继续慢慢学习。cocos2d-x

这次来说说两个类,Scene和Layer。即场景类和图层类。

曾经学cocos2d-x的时候听过,这个引擎就跟拍电影一样,有导演(Director),有大背景(Scene),还有背景上的小修饰物(Layer),还有人物(Sprite)。

大体关系就是酱紫啦~

再上一张图,没图我说个X(屏蔽不良语言)

--------------------------------------------------偶是切割线。加个小凝视----------------------------------------------------------------------

这里有一张cocos2d-x全部类的一张关系图表。是用Xmin做的,我看着非常赞。

能够戳这个网址去下载。须要1积分。gamecocos2dx制作的。里面另一些凝视,挺不错:

http://download.csdn.net/detail/gamecocos2dx/7281687

假设不想下载Xmind,能够看PNG格式的图,在我的下载页,可是有一些凝视无法显示:

http://download.csdn.net/detail/lx417147512/7657073

学习cocos2d-x还是要多看看API,

假设。网络同意,能够看看中文API:http://cn.cocos2d-x.org/doc/cocos2d-x-3.0/index.html

当然,不妨看英文版的:http://www.cocos2d-x.org/reference/native-cpp/V3.2/index.html

最最起码,人家是最新版本号的=。=

假设。网络不同意,也有离线版本号API。仅仅有英文的,是3.0的:

http://download.csdn.net/detail/lx417147512/7656953

用法:解压以后,搜索里面index.html文件。打开就可以   ~(*^__^*) ~

--------------------------------------------------偶是切割线,加个小凝视----------------------------------------------------------------------

OK,言归正传。

今天,来学习一下Scene和Layer(额。。。这是第二次说了o(╯□╰)o)

Scene,它在API中解释是:

Scene是一个抽象的概念,它仅作为Node的子类,

Scene和Node差点儿同样,不同的是Scene的默认的锚点在屏幕中心。

{PS:What 是 锚点?   能够看这个http://jingyan.baidu.com/article/a501d80cf003deec630f5e14.html

简单来说,锚点就相当于我们要把一张画订在墙上,我们仅仅用一个钉子,钉子的位置就是锚点}

另一些,无用的巴拉巴拉巴拉~(无视掉这句话也行)

也可看这张继承图:

恩,这个图显示除了父类和子类关系。

如今,来试一试把。光说不练假把式。

我用的VS2012,新建一个类(我这新建类。仅仅能建立在WIN32中,不能在类图下,仅仅能通过加入新建项加在Classes中。XX死了。希望有大牛有什么好方法能指导一下。感激不尽!)

打开一个新建的项目,

加入WelcomScene类(.h和.cpp)

这样增加的类是空白的类,里面内容须要我们自己去填写。

先编辑头文件(我是将HelloWorldScene.h的复制了过去,将用到类名的地方全改成了自己的WelcomeScene)

#include "cocos2d.h"

class WelcomeScene : public cocos2d::Layer
{
public:
// 创建场景函数
static cocos2d::Scene* createScene();
// 是一个宏定义
CREATE_FUNC(WelcomeScene);
};

这里 CREATE_FUNC是一个宏定义。等同于:

static WelcomeScene* create(){
WelcomeScene* pRet = new WelcomeScene();
if(pRet && pRet->init()){
pRet->autorelease(); //自己主动释放资源
}else{
delete pRet;
pRet = NULL;
}
return pRet;
}

恩,接下来定义.cpp文件:

#include "WelcomeScene.h"

USING_NS_CC;

// 创建场景函数
Scene* WelcomeScene::createScene()
{
auto scene = Scene::create();
return scene;
}

包括WelcomeScene头文件。

USING_NS_CC是应用cocos2d的命名空间,

就是有些不须要写cocos2d::了。

然后 如今就能够看看我们的作品啦~。~

跳转到  AppDelegate.cpp  中

bool AppDelegate::applicationDidFinishLaunching()函数

倒数第三行创建一个场景改成:

auto scene = WelcomeScene::createScene();

(对了,不要忘了在AppDelegate中加 WelcomeScene的头文件)

然后点击执行~。~

当~当~当当!   一片漆黑!

没错,这就对了!

上面我们也说到了我们仅仅是建立了一个场景,可是场景上空无一物啊!

所以。接下来就是Layer的事情啦~

Layer在API中说明:

Layer是Node类的子类。它实现了触屏代理协议。

也就是说,实现触屏的这些东东,就是在Layer上咯。

继续上图,无图不说话呀~。~

这个比Scene震撼了点吧。。嘿嘿

总之,Layer就是一个图层。最上面的图也说明了:

Scene由两部分组成Layer和Menu,就是界面和菜单。

接下来,在我们项目中实现一下肿么弄~。~

在WelcomeScene.h 中加入函数:

 virtual bool init();  

然后,对应在.cpp中编辑这个函数:

bool WelcomeScene::init()
{
// 推断能否初始化,若不能则直接返回,退出。
if ( !Layer::init() )
{
return false;
}
//获取屏幕的长宽
Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin(); // 创建一个精灵,载入一个图片
auto sprite = Sprite::create("backg.png");
sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(sprite, 0); return true;
}

PS:

①此处加入的图片是自己找的,最好要找一个PNG格式的。

将图片存在项目文件夹下的Resource文件夹下。回到VS2012右键点击Resource。选择加入现有项,把图片加入进来就OK了(貌似,直接把图片加入到Resource文件夹下就能够直接调用了。)

②这里的addChild,就是将这个精灵放在这个图层中。第一个參数是放哪个精灵,第二个參数就是第几层,比如添1的能把填0的覆盖掉。假设同一层。就是同为0。后增加的会覆盖掉前面的。

然后将createScene函数改动为:

// 创建场景函数
Scene* WelcomeScene::createScene()
{
auto scene = Scene::create();
auto layer = WelcomeScene::create();
scene->addChild(layer);
return scene;
}

表示,在创建场景时候,我们要加入一个图层。而加入这个图层要调用WelcomeScene中的create函数,就是我们之前编辑的函数。

这样。执行一下。我们的东东就出来咯~。~

我的这个,显示的大小略有问题,没有调整。

额。

。。这不是关键,关键是它出来了即可啦。

接下来。看一看HelloWorldScene的一些其它东东:

加一个文字。

加一个button。

这些就好弄咯。

加入东西。就是三步:

1.加入

2.设置增加的位置,假设有回调函数,要写出来函数名称

3.增加到场景中

恩,就到这里了。( ⊙o⊙ )。 12点半了(半夜)。。。。

赶紧睡觉去了⊙﹏⊙b

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

cocos2d-x 之Scene和Layer的更多相关文章

  1. XCode5添加新建类模板(Cocos2dx Template Class for Scene or Layer)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=505 因为常用cocos2dx开 ...

  2. 14、Cocos2dx 3.0三,找一个小游戏开发Scene and Layer:游戏梦想

    发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30474393 Scene :场景 了解了Director ...

  3. cocos2d基本类介绍 director/scene/layer/sprite

    [核心类]     导演Director.场景Scene.布景层Layer.精灵Sprite的概念请移步:     导演控制场景,场景控制图层,图层控制精灵,精灵控制动作.     相互之间的关系框架 ...

  4. cocos2dx[3.2](7) 核心类Director/Scene/Layer/Sprite

    [核心类] 导演Director.场景Scene.布景层Layer.精灵Sprite的概念请移步: cocos2dx基础篇(2) 第一个程序 导演控制场景,场景控制图层,图层控制精灵,精灵控制动作. ...

  5. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...

  6. ios游戏开发--cocos2d学习(2)

    在第一节中简单介绍了2d项目模板HelloWorld的基础代码,并做了一点小小的改变,像触摸接收.旋转.移动和颜色转变序列CCSequence的使用等等,2d本身封装好了很多方便使用的动作,只需要调用 ...

  7. ios游戏开发--cocos2d学习(1)

    学习cocos2d需要一定的编程基础,最好了解objective-c的语法.至于下载和安装的过程网上有很多,这里不多介绍,直接进入项目的学习. 创建一个cocos2d项目,直接运行,效果如图: 左下角 ...

  8. 创建一个cocos2d-x工程添加一个自定义Scene并显示

    #include "cocos2d.h" class RunScene :public cocos2d::CCLayer { public: virtual bool init() ...

  9. [cocos2d]场景切换以及切换进度显示

    本文主要分两个部分叙述,第一是场景切换,第二是场景切换的进度显示. 一.场景切换 参考learn-iphone-and-ipad-cocos2d-game-development 第五章内容 coco ...

随机推荐

  1. SSIS: 使用Lookup 和 Cache transformation 进行数据匹配简单介绍

    本文将讲解Cache transformation的使用方式,并且用Lookup transformation进行匹配. 背景 如下图,我们的产品目标表中有些有尺寸信息有些没有.我们需要用Cache组 ...

  2. 我用过的linux命令--安装Hadoop

    1. hadoop软件传送给虚拟机 还是利用WinSCP把hadoop软件安装包,放到linux的Downloads文件夹中. 2. 选择安装目录 把hadoop安装包copy到这个安装目录中,这里我 ...

  3. 简单十步让你全面理解SQL

    很多程序员认为SQL是一头难以驯服的野兽.它是为数不多的声明性语言之一,也因为这样,其展示了完全不同于其他的表现形式.命令式语言. 面向对象语言甚至函数式编程语言(虽然有些人觉得SQL 还是有些类似功 ...

  4. HDU2018-母牛的故事

    描述: 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? 代码: 第n年的牛,等于第n-1年的牛(已有的)+第n-3年 ...

  5. 什么是RAW?

    RAWRAW是一个PHP网站开发系统,使用简单.快捷,核心功能是通过模版组合网站,模版可以自由开发,使开发者不再受传统开发的那种头晕限制,只需要通过填写表单即可完成网站的开发.此外,开发者还可以通过开 ...

  6. C#实现阻止关闭显示器和系统待机

    原文http://www.cnblogs.com/TianFang/archive/2012/10/12/2721883.html 最近写了一个下载程序,发现有一个问题:挂机下载的时候,下载任务会因为 ...

  7. 试用阿里云RDS的MySQL压缩存储引擎TokuDB

    以前就用过自己搭建MySQL服务器的两种存储引擎MyISAM和InnoDB(也用过一点Memory方式),在今年初转向阿里云关系型数据库服务RDS的时候,看到可调参数中有一个TokuDB,不过不太了解 ...

  8. 基于Visual C++2013拆解世界五百强面试题--题9-找出所有的排列方式

    给出一个函数来输出一个字符串的所有排列 按照排列组合的知识我们知道 N个字符排列组合个数有n!种, 那么可知f(n) = n*f(n-1), 如果{1,2}的组合有两种,12,21, 那么{123}的 ...

  9. live555学习经验链接一

    live555学习经验链接:http://xingyunbaijunwei.blog.163.com/blog/#m=0&t=1&c=fks_084071082087086069082 ...

  10. Android项目导入时,出现的Could not write file 。。。。。。.classpath错误解决办法

    导入到Eclipse中后选择了相应的API后,红叉的项目错误没有了. 工程列表也无任何错误了.但出现了这样的提示框错误 说明的是.classpath这个环境文件不能写.随后,查看工程文件主目录下的.c ...