(层)Laye:与球员打交道响应事件Node子类。

不同的场景,层通常包括直接在屏幕上呈现的内容。而且能够接受用户的输入事件。包括触摸,加速度计和键盘输入等。

我们须要在层中加入精灵,文本标签或者其它游戏元素,并设置游戏元素的属性,比方位置,方向和大小;设置游戏元素的动作等。通常,层中的对象功能类似,耦合较紧,与层中游戏内容相关的逻辑代码也编写在层中,在组织好层后。仅仅须要把层依照顺序加入到场景中就能够显示出来了。要向场景加入层,我们能够使用addChild方法。

能够通过以下的三个类设置层的属性:

CCLayerColor:能够改变背景颜色、设置大小

CCLayerGradient:设置有渐变效果的背景

CCLayerMultplex:能够包括好几个layer,可是仅仅显示一个layer,能够实现多个Layer之间的切换

首先须要理解一些主要的概念

三基色:大多数的颜色能够通过红、绿、蓝三色依照不同的比例合成产生。相同绝大多数单色光也能够分解成红绿蓝三种色光

在Cocos2d-x中使用ccc4(R, G, B, 透明度)的三个參数表示(RGB)三基色

ccc4(255, 0, 0, 255)表示红色,最后一个參数中的255表示透明度为255,表示不透明

ccc4(0, 255, 0, 255)表示绿色

ccc4(0, 0, 255, 255)表示蓝色

通过前面三个參数的不同组合能够表示不同的颜色,如ccc4(255, 255, 255, 255)表示白色,ccc4(0, 0, 0, 255)表示黑色等等,还有好的组合,能够依据上图可知

建立一个名称为Layer的场景。在Layer.h中加入以下的代码

#ifndef _Layer_H_
#define _Layer_H_
//防止代码重包括 #include "cocos2d.h"
USING_NS_CC; class Layer : public CCLayer
{
public: //创建一个场景
static CCScene* scene(); //初始化层
bool init(); CREATE_FUNC(Layer);
}; #endif

在Layer.cpp中加入以下的代码

#include "Layer.h"
#include "HelloWorldScene.h" CCScene* Layer::scene()
{
//创建一个场景
CCScene* s = CCScene::create(); //创建一个layer
Layer* layer = Layer::create(); //将layer加到场景中
s->addChild(layer); return s;
} bool Layer::init()
{
return true;
}

最后调用创建的Layer场景:打开AppDelegate.cpp文件。在AppDelegate.cpp中加入头文件"Layer.h",而且将boolAppDelegate::applicationDidFinishLaunching() 中的

// create a scene. it's an autorelease object
//CCScene *pScene = Sprite::scene();

改动成

  // create a scene. it's an autorelease object
CCScene *pScene = Layer::scene();

改动背景的颜色:

方法1、在Layer.cpp下的bool Layer::init()函数里面加入以下的代码

 //初始化父类层
CCLayer::init(); //设置背景颜色为红色
CCLayerColor* layer = CCLayerColor::create(ccc4(255, 0, 0, 255)); //将红色背景层加到层中
addChild(layer); return true

程序运行结果:

方法2、将Layer.h中的

class Layer : public CCLayer

改动成

class Layer : public CCLayerColor

在Layer.cpp下的bool  Layer::init()函数中加入以下的代码

 //初始化父类层
CCLayerColor::initWithColor(ccc4(255, 255, 0, 255)); return true;

程序的运行结果:(和方法1的结果一样)

将窗体的背景颜色设置成红色和绿色

将Layer.cpp下的bool Layer::init()函数中的代码改为

 //初始化父类层,设置窗体背景的颜色为红色
CCLayerColor::initWithColor(ccc4(255, 0, 0, 255)); //得到窗体的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //设置窗体背景的颜色为绿色
CCLayerColor* layer = CCLayerColor::create(ccc4(0, 255, 0, 255), winSize.width/2, winSize.height/2); addChild(layer); return true;

运行结果:

设置窗体中颜色的渐变效果:

将Layer.cpp下的bool Layer::init()函数中的代码改为

  //初始化父类层。设置窗体背景的颜色为红色
CCLayerColor::initWithColor(ccc4(255, 0, 0, 255)); //设置渐变效果重绿色渐变到蓝色
CCLayerGradient* layer = CCLayerGradient::create(ccc4(0, 255, 0, 255), ccc4(0, 0, 255, 255));
addChild(layer); return true;

运行结果

设置窗体中颜色的渐变效果而且实现透明度渐变:

将Layer.cpp下的bool Layer::init()函数中的代码改为

 //初始化父类层,设置窗体背景的颜色为红色
CCLayerColor::initWithColor(ccc4(255, 0, 0, 255)); //设置渐变效果重绿色渐变到蓝色,透明度渐变
CCLayerGradient* layer = CCLayerGradient::create(ccc4(0, 255, 0, 0), ccc4(0, 0, 255, 255));;
addChild(layer); return true;

程序运行结果:

改动渐变的方向:通过改动函数的參数改动渐变的方向

将Layer.cpp下的bool Layer::init()函数中的代码改为

 //初始化父类层,设置窗体背景的颜色为红色
CCLayerColor::initWithColor(ccc4(255, 0, 0, 255)); //设置渐变效果重绿色渐变到蓝色,透明度渐变ccp(0,1)从下往上渐变
CCLayerGradient* layer = CCLayerGradient::create(ccc4(255, 255, 0, 255), ccc4(0, 0, 255, 255), ccp(0,1));;
addChild(layer); return true;

运行结果:

改动渐变的方向:使用setVector()函数改动渐变的方向

将Layer.cpp下的bool Layer::init()函数中的代码改为

 //初始化父类层,设置窗体背景的颜色为红色
CCLayerColor::initWithColor(ccc4(255, 0, 0, 255)); //设置渐变效果重绿色渐变到蓝色
CCLayerGradient* layer = CCLayerGradient::create(ccc4(255, 255, 0, 255), ccc4(0, 0, 255, 255));;
addChild(layer); //改动渐变的方向,将渐变的方向改为从下往上
layer->setVector(ccp(0,1));
return true;

运行结果:

通过单击鼠标切换背景颜色

将Layer.h中的代码改成

#ifndef _Layer_H_
#define _Layer_H_
//防止代码重包括 #include "cocos2d.h"
USING_NS_CC; class Layer : public CCLayerColor
{
public: //创建一个场景
static CCScene* scene(); //初始化场景
bool init(); //实现多层切换的CCLayerMultiplex对象
CCLayerMultiplex* multi; //响应鼠标的点击事件
bool ccTouchBegan(CCTouch*, CCEvent*); //create函数
CREATE_FUNC(Layer);
}; #endif

将Layer.cpp中的代码改成

#include "Layer.h"
#include "HelloWorldScene.h" CCScene* Layer::scene()
{
//创建一个场景
CCScene* s = CCScene::create(); //创建一个layer
Layer* layer = Layer::create(); //将layer加到场景中
s->addChild(layer); //返回场景
return s;
} bool Layer::init()
{
//初始化父类层。设置窗体背景的颜色为红色
CCLayerColor::initWithColor(ccc4(255, 0, 0, 255)); //设置窗体的背景颜色为绿色
CCLayerColor* layer1 = CCLayerColor::create(ccc4(0, 255, 0, 255)); //设置窗体的背景颜色为红色
CCLayerColor* layer2 = CCLayerColor::create(ccc4(255, 0, 0, 255)); //多层
multi = CCLayerMultiplex::create(layer1, layer2, NULL);
//multi->switchTo(1);
addChild(multi); //用鼠标切换多层
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne); return true;
} //处理鼠标点击事件
bool Layer::ccTouchBegan(CCTouch*, CCEvent*)
{
static int index = 0;
multi->switchTo(index = 1 - index); return true;
}

运行结果:单击鼠标后能够切换程序的背景颜色

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Cocos2d-X中间应用的更多相关文章

  1. 小尝试一下 cocos2d

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

  2. 采用cocos2d-x lua 制作数字滚动效果样例

    require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...

  3. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  4. iPhone开发与cocos2d 经验谈

    转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...

  5. cocos2d学习记录

    视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...

  6. Android下Cocos2d创建HelloWorld工程

    最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...

  7. 学生信息管理系统(cocos2d引擎)——数据结构课程设计

    老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite*  spBG = CCSprite::create("&qu ...

  8. cocos2d触碰例子代码

    // // TestLayer.h // MiniTD // // Created by OnePiece on 12-7-30. // Copyright 2012年 __MyCompanyName ...

  9. 如何优化cocos2d程序的内存使用和程序大小

    在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...

  10. Atitit 游戏的通常流程 attilax 总结 基于cocos2d api

    Atitit 游戏的通常流程 attilax 总结 基于cocos2d api 加载音效1 加载页面1 添加精灵1 设置随机位置2 移动2 垃圾gc2 点击evt2 爆炸效果3 定时生成精灵3 加载音 ...

随机推荐

  1. 将鼠标移到文本弹出一些字幕CSS达到,不及格JS达到

    使用css实施内容流行,否js代码,下面的代码,可直接使用复制, 需要背景图到下面的地址下载,谢谢! 住址:http://download.csdn.net/detail/zurich1979/722 ...

  2. 2010多校第一题 hdu3440House Man 差分约束系统

    给我们n座房子,房子的高度各不相同, 从最低的房子开始, 每次跳到更高的房子, 跳n-1次最能跳到最高的房子了,但是每次跳跃的距离不能超过d 将这些房子在一维的方向上重新摆放(但是保持输入时的相对位置 ...

  3. 原创教程“ActionScript3.0游戏中的图像编程”開始连载啦!

            经过近两年的不懈努力,笔者的原创教程"ActionScript3游戏中的图像编程"最终在今日划上了完美的句号!这其中记录着笔者多年来在游戏制作,尤其是其中图像处理方 ...

  4. JS脚本加载与执行对性能的影响

    高性能JavaScript-JS脚本加载与执行对性能的影响 在web产品优化准则中,很重要的一条是针对js脚本的加载和执行方式的优化.本篇文章简单描述一下其中的优化准则. 1. 脚本加载优化 1.1 ...

  5. 重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口

    原文:重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口 [源码下载] 重新想象 Windows 8 Store Apps (26) ...

  6. AC自己主动机

    AC自己主动机 AC自己主动机是KMP和Trie的结合,主要处理多模板串匹配问题.以下推荐一个博客,有助于学习AC自己主动机. NOTONLYSUCCESS  这里另一个Kuangbin开的比赛,大家 ...

  7. List、Map和Set实现类

    List.Map和Set实现类 1.List实现类 (1)ArrayList (2)Vector 2.Map实现类 (1)HashMap (2)Hashtable 3.Set实现类 (1)HashSe ...

  8. mybatis至mysql插入一个逗号包含值误差

    mybatis至mysql插入形如"11,22,33"当误差.我使用了错误的原因是美元符号镶嵌sql.正确的做法是使用#  有时间去看看mybatis的$和#差异. 版权声明:本文 ...

  9. 一个小的日常实践——高速Fibonacci数算法

    上得厅堂.下得厨房.写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

  10. HDFS建筑与shell操作

    一个.hadoop1.1.0演示 hadoop它适合于大容量数据存储和分布式计算平台 hadoop核心由hdfs和mapreduce组成 hdfs这是一个主从结构,仅有一个.是namenode:从节点 ...