cocos2D(六)----CCLayer

cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍 主要介绍了cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍,需要的朋友可以参考下 立即下载

一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象。CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入。其实,cocos2d对图层并没有严格的要求,图层不一定要使用CCLayer类,它也可以是一个简单的CCNode,为什么呢?我们新建一个图层不就是为了能够容纳更多的子节点么,CCNode也可以添加子节点啊。所以,如果你的图层不需要接收触摸和加速计输入,就尽量使用CCNode表示图层,CCLayer因为能够接收触摸和加速计输入会增加不必要的开销。移动、缩放、旋转整个图层,图层上的所有节点也会跟着一起移动、缩放、旋转。


常用设置

1.接收触摸输入

CCLayer默认情况是不接收触摸输入的,需要显示地设置isTouchEnabled为YES

[java]  view plain copy
  1. self.isTouchEnabled = YES;  
设置isTouchEnabled为YES后,就会调用图层相应的方法来处理触摸输入:

这些都是在CCStandardTouchDelegate协议中定义的方法

1> 当单指接触到屏幕时

[java]  view plain copy
  1. - (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;  

2> 当手指在屏幕上移动时

[java]  view plain copy
  1. - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;  

3> 当单指离开屏幕时

[java]  view plain copy
  1. - (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;  

4> 当触摸被取消时

[java]  view plain copy
  1. - (void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;  
很 少会发生触摸被取消的情况,所以大多数情况下可忽略,或用ccTouchesEnded代替,因为ccTouchesCancelled和ccTouchesEnded类似


大部分情况下,我们需要知道触摸发生在什么位置。这里的触摸事件是由UIKit框架接收的,因此需要把触摸位置转换为OpenGL坐标。

比如在手指移动过程中:

[java]  view plain copy
  1. - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {  
  2.     // 获取触摸对象  
  3.     UITouch *touch = [touches anyObject];  
  4.     // 获取触摸在UIView视图上的位置  
  5.     CGPoint uiPoint = [touch locationInView:touch.view];  
  6.     // 转换为OpenGL坐标  
  7.     CGPoint glPoint = [[CCDirector sharedDirector] convertToGL:uiPoint];  
  8. }  


下面利用一个小例子来综合使用上述的方法,假设图层上有个精灵,我手指触摸到哪,这个精灵的位置就在哪

首先在图层初始化的时候添加精灵

[java]  view plain copy
  1. // 图层的init方法  
  2. -(id) init  
  3. {  
  4.     if( (self=[super init])) {  
  5.         // 初始化一个精灵  
  6.         CCSprite *lufy = [CCSprite spriteWithFile:@"lufy.png"];  
  7.         CGSize size = [[CCDirector sharedDirector] winSize];  
  8.         lufy.position =  ccp(size.width * 0.5f, size.height * 0.5f);  
  9.         // 添加精灵,并设置标记  
  10.         [self addChild: lufy z:0 tag:kLufyTag];  
  11.           
  12.         self.isTouchEnabled = YES;  
  13.     }  
  14.     return self;  
  15. }  

接下来是在图层中接收触摸输入

[java]  view plain copy
  1. // 计算触摸在图层中的位置(OpenGL坐标)  
  2. - (CGPoint)locationInLayer:(NSSet *)touches {  
  3.     // 获取触摸对象  
  4.     UITouch *touch = [touches anyObject];  
  5.     // 获取触摸在UIView视图上的位置  
  6.     CGPoint uiPoint = [touch locationInView:touch.view];  
  7.     // 转换为OpenGL坐标  
  8.     CGPoint glPoint = [[CCDirector sharedDirector] convertToGL:uiPoint];  
  9.       
  10.     return glPoint;  
  11. }  
  12.   
  13. // 由于ccTouchesBegan、ccTouchesMoved、ccTouchesEnded中的做法都是一样,所以抽成一个方法  
  14. - (void)dealTouches:(NSSet *)touches {  
  15.     // 计算触摸的位置  
  16.     CGPoint point = [self locationInLayer:touches];  
  17.     // 根据标记获取精灵  
  18.     CCSprite *lufy = (CCSprite *)[self getChildByTag:kLufyTag];  
  19.     // 设置精灵的位置  
  20.     lufy.position = point;  
  21. }  
  22.   
  23. - (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {  
  24.     [self dealTouches:touches];  
  25. }  
  26.   
  27. - (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {  
  28.     [self dealTouches:touches];  
  29. }  
  30.   
  31. - (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
  32.     [self dealTouches:touches];  
  33. }  

图层的触摸输入暂时讲到这里,其他高级的用法在后面会提及


2.接收加速计输入

CCLayer默认情况是不接收加速计输入的,需要显示地设置isAccelerometerEnabled为YES

[java]  view plain copy
  1. self.isAccelerometerEnabled = YES;  
设置isAccelerometerEnabled为YES后,就会调用图层相应的方法来处理加速计输入:

这是在UIAccelerometerDelegate协议中定义的方法

[java]  view plain copy
  1. - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {  
  2.     // typedef double UIAccelerationValue;  
  3.     UIAccelerationValue x =  acceleration.x;  
  4.     UIAccelerationValue y =  acceleration.y;  
  5.     UIAccelerationValue z =  acceleration.z;  
  6.     // x,y,z代表三维中任意方向的加速度  
  7. }  


CCLayerColor

有时候,我们想给整个图层设置一种背景颜色,那么就需要用到CCLayerColor了,CCLayerColor是CCLayer的子类

[java]  view plain copy
  1. // 红色:#ffff0000  
  2. ccColor4B color = ccc4(255, 0, 0, 255);  
  3. // 初始化一个颜色图层  
  4. CCLayerColor *layerColor = [CCLayerColor layerWithColor:color];  
  5. // 添加到场景中  
  6. [scene addChild:layerColor];  
效果图:


CCLayerGradient

CCLayerGradient是CCLayerColor的子类,可以给图层设置渐变色

[java]  view plain copy
  1. // 红色:#ffff0000  
  2. ccColor4B red = ccc4(255, 0, 0, 255);  
  3. // 蓝色:#ff0000ff  
  4. ccColor4B blue = ccc4(0, 0, 255, 255);  
  5. // 初始化一个渐变图层,从红色渐变到蓝色  
  6. CCLayerGradient *layerGradient = [CCLayerGradient layerWithColor:red fadingTo:blue];  
  7. // 添加到场景中  
  8. [scene addChild:layerGradient];  
效果图:


CCLayerMultiplex

CCLayerMultiplex继承自CCLayer,称为"多重图层"。它可以包含多个CCLayer对象,但在任意时刻只可以有一个CCLayer处于活动状态,用switchTo:和switchToAndReleaseMe:方法可以让某个图层处于活动状态,区别在于switchToAndReleaseMe:方法会先释放当前处于活动状态的图层,再让参数中要求的图层处于活动状态

[java]  view plain copy
  1. // 创建2个图层  
  2. CCLayer *layer1 = [CCLayer node];  
  3. CCLayer *layer2 = [CCLayer node];  
  4.   
  5. // 创建一个多重图层,包含了layer1和layer2  
  6.   
  7. CCLayerMultiplex *plex = [CCLayerMultiplex layerWithLayers:layer1, layer2, nil];  
  8.   
  9. // 让layer1处于活动状态(layer2还在内存中)  
  10. [plex switchTo:0];  
  11.   
  12. // 让layer2处于活动状态(layer1还在内存中)  
  13. [plex switchTo:1];  
  14.   
  15. // 释放当前处于活动状态的layer2(layer2从内存中移除),然后让layer1处于活动状态  
  16. [plex switchToAndReleaseMe:0];   

图层之间的切换是没有过渡效果的





原文地址:http://blog.youkuaiyun.com/q199109106q/article/details/8601533

感谢作者~!

Unity 实现动态网格地图生成与交互组件 本文详细介绍了在Unity中实现动态网格地图生成与交互组件的完整方案。从基础网格单元实现到高级交互功能,涵盖网格生成器核心逻辑、事件驱动架构、性能优化技巧以及六边形网格等特殊实现。特别适合游戏开发者学习如何构建战棋、模拟经营类游戏的可交互地图系统,提升开发效率与用户体验。 阅读详情

相关推荐

Fortify SCA 24.4 最新可用版

Fortify Static Code Analyzer(Fortify SCA) 是一款由 Micro Focus(原惠普旗下)开发的 静态应用安全测试(SAST)工具,专注于在软件开发早期通过分析源代码或编译后的二进制文件,识别潜在的安全漏洞、代码缺陷和合规性问题。以下是其核心特点与功能:核心功能 静态代码分析 在不运行程序的情况下,通过语法、语义分析检测代码中的安全漏洞(如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等)和代码质量问题。

棉花糖的博客 3181

CCLayer层

CCLayer层

天马行空的专栏 682

ANSYS 有限元分析 接触分析

目 录一、前沿二、接触单元类三、接触单元关键选项3.1 CONTA174 KeyOption3.2 TARGE170 KeyOption四、接触分析标准步骤4.1 定义实常数4.2 定义接触和目标单元4.3 创建接触和目标单元五、接触分析实例5.1 MPC5.2 标准接触六、尾声七、参考文献 阿阳的 ANSYS 使用指南,本文仅用于个人学习,除此之外,无其他任何用途。 ANSYS 有限元分析 概述 ANSYS 有限元分析 坐标系/工作平面 ANSYS 有限元分析 几何建模 ANSY

Hulunbuir 4万+

六、CCLayer

一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象。CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入。其实,cocos2d对图层并没有严格的要求,图层不一定要使用CCLayer类,它也可以是一个简单的CCNode,为什么呢?我们新建一个图层不就是为了能够容纳更多的子节点么,CCNode也可以添加子节点啊。所

M了个J 8578

EtherCAT丢包问题深度解析:从原理到实战排查指南

在工业自动化与运动控制领域,实时通讯网络的稳定性是系统可靠运行的基石。EtherCAT(以太网控制自动化技术)作为一种高性能工业以太网协议,其核心在于独特的“飞读飞写”机制和纳秒级的分布时钟同步,以实现多设备间的精准协同。然而,物理链路干扰、配置不当或硬件性能瓶颈都可能导致数据帧丢失,破坏时钟同步,进而引发伺服抖动、定位精度下降乃至生产线停机。本文聚焦于EtherCAT丢包这一典型故障,结合SSC(Slave Stack Code Tool)从站协议栈开发与实时系统调优等工程实践,系统阐述其成因、影响及一套

weixin_32050773的博客 341

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心原理在于通过微控制器直接操作硬件外设,实现感知、决策与执行。这项技术的核心价值在于为物联网、智能硬件和机器人等领域提供了低功耗、高可靠性的解决方案。在机器人应用场景中,嵌入式平台常作为主控大脑,驱动舵机、传感器并处理交互逻辑。本文聚焦的Stack-chan项目,正是这一理念的生动实践:它采用流行的ESP32微控制器,并创新性地通过Moddable运行时支持使用JavaScript进行嵌入式开发,极大地降低了机器人编程的门槛。开发者可以基于此平台,轻松实

weixin_28729173的博客 437

CCScene和CCLayer类详解

1 在cocos2d-x引擎中,CCScene中存放的是需要渲染的层、人物角色和菜单等。它们可以作为一个整体,一起渲染,一起销毁,一起被场景切换是用   2在cocos2d-x引擎中,CCScene的类结构很简单,是CCNode的子类,类结构图如下   3 下面来看看CCScene中的主要函数(cocos2dx\layers_scenes_transitions_n

偶尔e网事 3279

论文翻译:Automatic Lesson Plan Generation via Large Language Models with Self-critique Prompting

在本文中,我们利用大型语言模型(LLMs)的理解和生成能力来自动生成定制化的课程计划。这解决了传统计划可能无法充分满足不同教学环境和学生群体的特定需求的常见挑战。我们提出了一个新颖的三阶段过程,包括使用检索增强生成(RAG)逐步生成课程计划的每个关键组成部分,通过LLMs进行自我批评,以及随后的细化。我们使用这种方法为小学2至5年级生成了涵盖80多个主题的数学课程计划。邀请了三位经验丰富的教育工作者制定全面的课程计划评估标准,然后使用这些标准将我们的LLM生成的课程计划与同一主题的实际课程计划进行基准比较。

CSPhD-winston的博客 1101

CCLayerColor 使用记录

我们在游戏开发过程中,经常需要用一种更加直观的方式,去表示那些不是    很直观的东西的大小即位置,我们可以使用CCLayerColor来实现这种需求。    在使用CCLayerColor过程中需要注意一些问题: 1、    很多人在使用CCLayerColor都是通过下面方法创建的,使用这个方法没问题    /** creates a CCLayer with color,

思考的智慧,知识源于思考 1430

R语言机器学习算法实战系列(四)随机森林算法分类器+SHAP值 (Random Forest)

本文介绍了如何使用R语言实现随机森林算法,用于构建乳腺癌分类器。随机森林通过多棵决策树投票判断标签,具有避免偏差和提升模型效果的优势。文章详细讲解了数据下载、R包加载、数据预处理、特征选择、模型构建与评估等步骤。数据集包含569份恶性和良性肿瘤样本的32类指标,通过随机森林模型进行特征选择和分类。最终,文章提供了完整的代码和可视化结果,帮助读者理解并实现随机森林算法。

专注生信领域 3320

实验二 离散控制系统的性能分析(时域/频域)

1.掌握离散闭环系统的动态性能时域参数的分析与计算方法; 2.掌握离散系统稳定性的频域典型参数分析与计算方法。 MATLAB 软件( 2022a); 1.在 Matlab 语言平台上,通过给定的闭环离散系统,深刻理解时域参数的物理意义与计算方法,内容包括如下: 阻尼比参数分析:Z 平面与 S 平面的极点相互转换编程实现;分析 S/Z 两个平面域特殊特性(水平线、垂直线、斜线、圆周等)的极点轨迹相互映射方法;系统阶跃响应参数:上升时间和超调量等。 2. 采用频域分析方法,通过编程计算,进一步理解离散系统的稳定

m0_51738372的博客 2479

cocos2d-js获得其它Layer层对象

cocos2d-js当中有时候一个scene由好几个Layer组成、为了逻辑更为清晰、经常要在不同的Layer处理不同的事情。比如说控制层ControlLayer要控制MainLayer当中添加一个精灵 代码如下: var MainScene = cc.Scene.extend({ onEnter: function () { this._super();

a641832648的博客 3582

中台战略-第五章、中台建设方法论

文章目录第五章、中台建设方法论5.1 中台架构整体策略5.2 业务顶层设计5.3 业务中台设计方法论5.3.1 能力支撑是基础5.3.2 中心自治是承载形式5.3.3 3层模型是骨架5.3.4 5步法是指导思想1. 业务抽象2. 高阶设计3. 组件建模4. 开发交付5. 持续运营5.4 数据中台设计方法论5.4.1 总体规划5.4.2 数据集成5.4.3 模型建设5.4.4 通用研发5.4.5 资产管理5.4.6 数据服务5.5 应用向中台迁移的3中途径和方法5.5.1 方法1:新应用替换旧应用5.5.2

沧海之巅的专栏 1460

【爱上cocos2d-x之六】层CCLayer

CCLayer不仅要作为容器使用,同时也要处理游戏的一些功能。 查看CCLayer的源代码: class CC_DLL CCLayer : public CCNode, public CCTouchDelegate, public CCAccelerometerDelegate, public CCKeypadDelegate 可以看到,CCLayer不仅继承CCNode,还集成了CCTou

三十画生 一个北漂的人 1812

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

六:Cocos2d-x的CCLayer

CCLayerCCLayer的子类:CCLayerColor //可以设置层的颜色和不透明度CCLayerGraient //渐变色 ,从一种颜色到另外一种颜色,还要设置渐变的位置(中间点),渐变色会从某种颜色渐变到另外一种,在渐变位置开始变色(如红色转为绿色)CCLayerMultiplex ...

weixin_34244102的博客 88

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

COCOS2D-X CCScene 与 CCLayer 分离细节

在项目的进行中,特别是过于

PersonFly_小逗 1110

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

cocos2d-x学习之CCLayer

布景 介绍 CCLayer类对应cocos2d-x引擎里的布景。 每个游戏场景中都可以有很多层,每一层负责各自的任务,例如专门负责显示背景、专门负责显示道具和专门负责显示人物角色等。在每个层上面可以放置不同的元素,包括文本、精灵和菜单等。 通过层以及层与层之间的组合关系,我们就能够让游戏显示出各种各样的界面了。 类结构图 主要函数 bool i

693

Cocos2d-x 之图层类(CCLayer)

图层对象的三个功能: 1.接受用户操作,比如触屏、重力加速度计的信息。 2.作为游戏内容元素的容器,用于显示游戏画面、承载精灵类、字体文本对象。 3.填充背景游戏背景颜色。 代码示例: class CC_DLL CCLayer:public CCNode,public CCTouchDelegate,public CCAccelerometerDelegate,publi

fyn6417的专栏 1846

详解Cocos2d CCLayer中Touch使用方法

Cocos2d CCLayer中Touch使用方法是本文要介绍的内容,Cocos2d作为一个开源的2D游戏引擎,最初是用python语言实现,mac app开发流行后,提供了一个Objective-C的版本。采用Cocos2d框架开发iphone游戏,极大提高了开发的速度。简单介绍参见百度百科 ,cocos2d官网。 Cocos2d提供了两种touch处理方式,Standard Touch

Eric's Blog 9727

Cocos2d CCLayer中的touch处理

cocos2d CCLayer的touch响应处理过程。

2211

cocos2D CClayer 6

一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象。CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入。其实,cocos2d对图层并没有严格的要求,图层不一定要使用CCLayer类,它也可以是一个简单的CCNode,为什么呢?我们新建一个图层不就是为了能够容纳更多的子节点么,CCNode也可以添加子节点啊。所

于海明的博客 393

Cocos2dx之CCLayer层

一、层的概念 我们从Cocosd2x框架中可以看出,它分为导演-->场景--->层-->精灵,并且为树状结构;一个导演可以包含多个场景、一个场景可以包含多个层。那当然,一个层可以包含多个精灵,他们相当于一个容器,子容器中设置我们要显示的东西。 二、CClayerColor类 #ifndef __T06CCLayers_H__ #define __T06CCLayers_H__ #in

CCDreamOldBoys的专栏 786

详解Cocos2d 开发关于CCLayer中Touch事件 以及优先级

/** CCTouchDispatcher.  Singleton that handles all the touch events.  The dispatcher dispatches events to the registered TouchHandlers.  There are 2 different type of touch handlers:    - Standard

我用CV我自豪。 1480

cocos2d-x 中CCScene CCLayer CCSprite CCNode

游戏中4者的关系 Scenes scene(即 CCScene类)是app 工作流上独立块。scene也叫做 screents 或者“stages”. 一个app可能拥有多个scenes, 但在任何时候只能有一个是激活状态的。举个例子,某个游戏可能拥有如下scenes: Intro, Menu菜单, Level 1, Cutscene 1, Level 2, Winning

porsche880828的专栏 1万+
上一篇: cocos2D(五)---- CCNode
下一篇: cocos2D(七)---- CCScene
「已注销」
博客等级 码龄12年 28粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值