关于CCControlSwitch设置在弹窗上后的触摸优先级问题

Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案 在跑酷游戏(天天酷跑)或者射击游戏(打飞机)中都有背景循环移动的机制。网上也有很多的实现方法,我这里先直接用代码反映出来: 首先申明的是我这个是做的横版向左移动: /* HelloWorldScene.h */ #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d. 阅读详情

在最近的工程中,由于游戏中设置场景的东西很少,所以决定没必要写成一个场景,并且写成场景后有切换场景时出现的释放资源问题,最终决定用模态弹窗来写。同样,我们先看看最终效果:


前面亮的就是弹出框,后面的就是模态化的背景。

关于模态的做法以及屏蔽下层按钮的做法,建议大家先去看泰然网的这篇文章,里面讲得非常详细并且附带源码:http://www.ityran.com/archives/4854


这里我们主要讲关于CCControlSwitch的问题,也就是图片中这样的按钮的问题。

按照以前弹出框的做法,弹出框上的按钮成功响应并且下层菜单被屏蔽,但是我发现CCControlSwitch按钮竟然也无法被响应,因为之前我们的“设置”是写成一个场景的,在场景中,同样的CCControlSwitch是能够被响应的,所以肯定不是他本身的问题,也就是说,它不能被响应的原因是被屏蔽掉了,因为在调试的时候我也试过调用CCControlSwitch的回调函数,发现没有响应,所以我确定它的确被屏蔽掉了,现在我们来看一下源码“

// 我把设置位置和设置Tag什么的都注释掉,大家只需要关心重点即可
void HSet::initSetMenu()
{
	// 这里手动设置触摸优先级,默认菜单是-128,只要比-128大的值(-127),都可以屏蔽下层菜单的触摸,
	// 这里设置为-128类似于addChild()函数中的zOrder,虽然值一样,但是之后添加的都将覆盖之前的。
	CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);
	// 设置透明度,需要继承CCLayerColor而不是CCLayer
	this->setOpacity(150);
	CCSize visibleSize = PublicMethod::getVisibleSize();
	CCPoint origin = PublicMethod::getOrigin();
	// 这是弹出对话框
	CCSprite* setDialog = CCSprite::create("/Set/NB_SetDialog.png");
	//setDialog->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

	// 音乐和音效的图标
	CCSprite* music_Icon = CCSprite::create("/Set/NB_Music_Icon.png");
	CCSprite* effect_Icon = CCSprite::create("/Set/NB_Effect_Icon.png");
	//music_Icon->setPosition(ccp(music_Icon->getContentSize().width, setDialog->getContentSize().height/2));
	//effect_Icon->setPosition(ccp(effect_Icon->getContentSize().width, setDialog->getContentSize().height/2 - effect_Icon->getContentSize().height - SET_MENU_ITEM_OFFSET));
	setDialog->addChild(music_Icon, 0);
	setDialog->addChild(effect_Icon, 0);

	// “用户协议”按钮和“开发人员”按钮
	CCMenuItemImage* userAgreementButton = CCMenuItemImage::create("/Set/NB_UserAgreement_Normal.png", "/Set/NB_UserAgreement_Select.png", this, NULL);
	CCMenuItemImage* producerButton = CCMenuItemImage::create("/Set/NB_Producer_Normal.png", "/Set/NB_Producer_Select.png", this, NULL);
	CCMenuItemImage *setBackButton = CCMenuItemImage::create("/Shop/NB_CardBack_Normal.png", "/Shop/NB_CardBack_Select.png", this, menu_selector(HSet::backIsPressed));
	//userAgreementButton->setTag(set_itemUserAgreementTag);
	//producerButton->setTag(set_itemProducerTag);
	//setBackButton->setTag(set_itemBackTag);
	//userAgreementButton->setPosition(ccp(userAgreementButton->getContentSize().width/2 + SET_MENU_ITEM_OFFSET, 0));
	//producerButton->setPosition(ccp(producerButton->getContentSize().width/2 + SET_MENU_ITEM_OFFSET, -producerButton->getContentSize().height - SET_MENU_ITEM_OFFSET/2));
	//setBackButton->setPosition(ccp(setDialog->getContentSize().width/2 - setBackButton->getContentSize().width + SET_BACK_OFFSET_X, setDialog->getContentSize().height/2 - setBackButton->getContentSize().height + SET_BACK_OFFSET_Y));
	CCMenu* set_menu = CCMenu::create(producerButton, userAgreementButton, setBackButton, NULL);
	//set_menu->setPosition(ccp(setDialog->getContentSize().width/2, setDialog->getContentSize().height/2));
	setDialog->addChild(set_menu, 0, set_menuTag);

	// 设置音乐和音效的开关按钮,这里是重点
	// 我在开关按钮下面添加了一个白底,不重要但是这样比较好看。
	CCSprite* musicSwitcherBoard = CCSprite::create("/Set/NB_Switch_Board.png");
	//musicSwitcherBoard->setPosition(ccp(music_Icon->getContentSize().width/2 + musicSwitcherBoard->getContentSize().width, music_Icon->getPositionY()));
	//musicSwitcherBoard->setTag(musicSwitcherBoardTag);
	setDialog->addChild(musicSwitcherBoard, 0);
	// 这里我们就在添加音乐的开关按钮
	CCControlSwitch *musicSwitcher = CCControlSwitch::create(
		CCSprite::create("/Set/NB_Switch_Mask.png"), CCSprite::create("/Set/NB_Switch_On.png"),
		CCSprite::create("/Set/NB_Switch_Off.png"),	CCSprite::create("/Set/NB_Set_Cursor.png"));
	//musicSwitcher->setPosition(ccp(musicSwitcherBoard->getContentSize().width/2, musicSwitcherBoard->getContentSize().height/2));
	//musicSwitcher->setTag(musicSwitcherTag);
	musicSwitcherBoard->addChild(musicSwitcher,0);

	// 这里添加音效的开关按钮,和音乐一样,我就不写了
	// ..............................................
	
	// 再把整个对话框添加上去
	this->addChild(setDialog, 0, setDialogTag); 
}

这样我们的初版弹出设定框就写好了,效果就和之前那个图一样,但是会发现,CCControlSwitch不能响应。于是经过各种跟踪代码调试等方法我找到了问题的所在,也就是上面所说的被屏蔽的问题。即:CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);这句代码搞的鬼。

大体来讲就是因为CCControlSwitch是继承自CCControl,CCControl又是继承自CCLayer,而CCMenuItem是继承自CCNode,两个的触摸级别本来就不是一样的,大家可以分别获取一下它们的触摸级别,CCControlSwitch在设置之前是1,而CCMenuItem是-128,所以要分开设置。单步调试的话还有更细节的东西,这里我就不细讲了,直接给出解决方案:

在musicSwitcher创建后再手动设置其优先级,同样是-128

musicSwitcher->setTouchPriority(-128);
这样CCControlSwitch就能够被正常响应,但之后还会报一个错误,我的弹出框是从主界面弹出的,在我点击返回以后,再点击主界面的任何一个地方,都会报一个CCNode的错误,出现这种错误就是因为弹出层返回时没有销毁CCControlSwitch,虽然在我的代码里当设定选单返回后会调用removeFromParent();这样一句函数,但依然是不够的,我们还需要调用tem_musicSwitcher->removeFromParentAndCleanup(true);这样一句函数来手动销毁CCControlSwitch。

OK,这样我们就完成了一个带CCControlSwitch的弹出设定框,大家还可以给弹出设定框写一些特效来丰富它,至于特效怎么写,就留在下一次博客写吧。


PostgreSQL+Citus分布式集群实战:从零搭建到性能调优 本文详细介绍了如何从零开始搭建并优化PostgreSQL+Citus分布式数据库集群。内容涵盖集群规划、源码编译安装、Citus扩展部署、节点配置、分布式表创建以及核心性能调优策略,为应对海量数据增长提供了完整的部署指南和实战解决方案。 阅读详情

相关推荐

AI视频生成技术研究报告:现状、挑战与展望

AI 视频生成技术概述:介绍 AI 视频生成技术的基本概念,回顾其发展历程,从早期依赖图像拼接的简单生成方式,到如今融合多种先进技术的复杂模型应用,梳理技术演进的关键节点和重要突破。同时,分析该技术在当前阶段的特点,包括生成视频的质量、速度、灵活性等方面,以及与传统视频制作方式的差异,阐述 AI 视频生成技术如何改变视频创作的流程和模式。技术实现路径分析。

daqsdfas的博客 4588

Cursor傻瓜式安装CC-Switch

macOS:首次启动在「隐私与安全性」允许打开Windows 便携版:Agent 配好 PATH 后,你直接双击即可Windows 安装版(.msi):Agent 帮你下载,你手动双击安装。

2301_81264527的博客 2281

Yelp评论爬虫实战:用BeautifulSoup稳定提取单商户结构化数据

网页爬虫是获取公开网络数据的基础技术,其核心在于理解HTTP协议、HTML结构与反爬机制的协同关系。在本地生活服务数据分析场景中,Yelp作为高价值口碑平台,虽关闭官方评论API,但其单商户页仍通过内嵌JSON预置初始评论数据——这是一种兼顾SEO与首屏性能的设计模式,具备结构清晰、无需JS执行、特征暴露少等工程优势。掌握BeautifulSoup精准定位script标签+正则提取JSON+html.unescape清洗文本的方法,可构建低门槛、高稳定性、易调试的数据采集通道,适用于运营趋势分析、竞对口碑监

weixin_30616969的博客 418

Cursor安装配置与接入DeepSeek完整教程

Cursor能力说明🧠Tab 代码补全不像传统补全,Cursor 能预测你接下来要写什么,按 Tab 直接接受💬内联对话 (Ctrl+K)选中代码直接让 AI 修改、解释、优化📂全项目理解 (Chat)在侧边栏对话,AI 能理解整个项目的文件结构、调用关系🔍Agent 模式AI 可以自主搜索文件、读取代码、执行终端命令、创建/修改文件📎上下文引用通过@File@Folder@Docs@Web精确指定 AI 看到的上下文🖼视觉识别支持截图粘贴,AI 能"看到"你的界面并生成代码。

2401_83438792的博客 1266

c++通过自然语言处理技术分析语音信号音高

其中,缓冲区大小为2048,最小基频为80Hz,最大基频为1000Hz。通常情况下,音高在85Hz到255Hz之间,因此可以根据实际情况修改最小和最大基频值。C++中可以使用数字信号处理库或语音处理库,比如MATLAB、Praat、YIN算法等等来进行音高分析。对于语音信号的音高分析,可以使用基频提取技术。基频是指一个声音周期的重复率,也就是一个声音波形中最长的周期。通常情况下,人的声音基频范围是85Hz到255Hz。这段代码使用了YIN算法来计算语音信号的基频,得出的结果即为音高。

SYC20110120的博客 1729

超声波清洗机拆解实录:从电路板到换能器,一文看懂内部构造(附高清图)

本文详细拆解了超声波清洗机的内部构造,从电路板设计到换能器工作原理,揭示了其核心技术。通过高清图片和详细分析,展示了功率放大电路、高频变压器及压电换能器等关键部件,为电子爱好者和维修技术人员提供了实用的故障诊断和元件二次利用指南。

grape的博客 1189

Claude Code、CCSwitch、Cherry Studio、OpenClaw、Cursor、Antigravity使用介绍

Claude Code、CCSwitch、Cherry Studio、OpenClaw、Cursor、Antigravity使用介绍

yinai_fan的博客 5382

3️⃣ Coze工作流基础教学(2025年全新版本)

Coze 工作流作为扣子平台的重磅工具,利用可视化节点,如大语言模型、插件、条件判断等,把复杂任务巧妙拆解成多步骤流程。它不仅支持自动化编排,还能实现跨系统协同,有效提升处理效率与输出稳定性。在那些对准确性或格式有严格要求的场景中,比如报告生成、旅行规划,Coze 工作流更是发挥着关键作用。

李同学Lino的博客 5862

CC-switch 一键统一 Claude Code 配置:CLI、VSCode、Cursor 全平台共用模型

如果你只是偶尔使用 Claude Code,单独配置 CLI 也能满足基本需求。但如果你经常在终端、VSCode 和 Cursor 之间切换,CC-switch 的价值就很明显了:它可以把模型、密钥、代理和上下文参数统一到一套配置里,减少重复设置,也降低多端配置不一致带来的排查成本。先安装或迁移到 Claude Code 原生版。再使用 CC-switch 统一管理模型和密钥配置。最后在 CLI、VSCode、Cursor 中验证配置是否同步生效。

m0_61123994的博客 903

YOLO训练/写作脚本目录一览 | 涉及标签格式转换、数据扩充、热力图、感受野、精度曲线、数量统计等近百个脚本文件

在大家购买专栏后,便可获得全部的脚本文件。在获取到文件后,只需按照将程序放在个人项目中即可一键运行。

Limiiiing的博客 2377

智能预测性维护AI系统实战效率提升:AI应用架构师的技巧分享

在工业领域,预测性维护(Predictive Maintenance, PdM)是降低停机损失、优化维护成本的关键手段。然而,现有系统往往面临三大效率瓶颈数据处理延迟:工业设备产生的海量实时数据(如传感器、PLC)需传输至云端处理,导致预警滞后;模型推理效率:复杂深度学习模型(如ResNet、Transformer)在边缘设备上推理时间长,无法满足实时要求;落地集成困难:与企业现有ERP、MES、SCADA系统对接繁琐,导致“模型好用但业务不用”的尴尬。本文从架构、数据、模型、落地架构设计。

AI天才研究院 746

ccSwitch 集成 Claude Code 和 Cursor 安装指南

以火山引擎和cursor使用为例。

牙痛吃烤肉的博客 569

杰理蓝牙SPP用户接口详细文档

本文档详细介绍了基于JL701n芯片的蓝牙SPP用户接口实现。主要内容包括:1) 文件结构分析,包含必要的头文件和调试配置;2) 核心数据结构,如全局变量和TWS功能ID定义;3) 五大功能模块实现:数据发送、状态管理、数据接收、TWS支持和初始化清理;4) API接口说明,包括公共接口函数和回调函数;5) 使用教程,涵盖基本流程和高级应用示例。该接口支持虚拟串口连接,实现蓝牙设备间数据传输,特别针对TWS场景进行了优化,提供连接状态管理、数据收发等功能。文档还包含错误处理、重试机制等实用建议,适合蓝牙SP

qq_42014563的博客 1180

Cocos2D-X 2.2.3 UI系统深度解析:从核心原理到实战优化

游戏UI开发的核心在于理解渲染、事件与内存管理的基本原理。现代游戏引擎的UI框架,无论设计得多么高级与便捷,其底层逻辑往往根植于节点树、坐标系统与事件分发这些基础概念。以Cocos2D-X 2.2.3的经典UI系统为例,其架构清晰地体现了“一切皆节点”的设计哲学,通过CCNode、CCMenu、CCControl等核心类,将视觉元素的组织、触摸事件的响应与控件状态的管理融为一体。掌握这套相对原始但直接的API,不仅能帮助开发者高效维护大量现存的**遗留代码库**,更能深刻理解高级UI编辑器背后的运行机制与调

weixin_30340617的博客 352

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

日常好用的 CC 进阶技巧,轻松提升开发与办公效率

本文介绍了ClaudeCode的进阶使用技巧:1)通过@指令直接读取文件内容,提升开发效率;2)使用/compact和/clear命令解决上下文窗口限制问题;3)三层claude.md配置体系(全局/项目/子文件夹)实现个性化设置;4)Skill技能扩展机制,支持安装专用插件实现自动化工作流。这些功能可帮助开发者更高效地使用ClaudeCode进行编程和文档处理。

一个爱折腾技术的普通人,分享踩过的坑、学到的干货。 1941

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

CC-Switch深度解析与Mac安装全指南:一键搞定AI编程工具配置切换

在AI编程工具爆发的时代,Claude Code、Codex、Gemini CLI等终端智能体已成为开发者的效率利器,但频繁切换不同供应商API配置时,手动修改环境变量、编辑JSON文件的操作繁琐又易出错。CC-Switch作为一款开源跨平台工具,以可视化界面彻底解决了这一痛点,让AI编程工具配置切换像点击开关一样简单。本文将从核心解析、Mac安装、配置实操到高级技巧,全方位带你玩转CC-Switch。

独立思考,明辨是非 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

deepseek+codex+cc Switch配置

现在 AI 平台还是蛮多的,最近看 Codex 对写代码帮助蛮大的,但 GPT 的 token 实在有限,然后就想着接入 DeepSeek v4 Flash,而且最近 v4 RPO 还在打折,可以尝试一下。CC 主要是做路由配置,也可以配置 Claude 等平台。

qq_45924889的博客 2749

【2026全新 Claude Code + VScode + CCswitch + 接入deepseek-v4-pro 套餐】从环境配置到实战演练:Claude Code彻底开箱指南!

本文是一份针对Windows用户的Claude Code零基础实战教程。文章首先强调必须使用WSL、Git Bash或PowerShell等现代终端工具,避免使用cmd命令提示符。推荐安装Windows Terminal作为基础开发环境。教程详细介绍了在VSCode中配置Claude Code开发环境的步骤,包括创建项目文件夹、安装Node.js(版本≥20.0.0)和Git工具,并提供了相关下载链接和环境变量配置指南。最后指导读者在VSCode终端中完成Claude Code的正式安装流程。全文配有

枫亭湖区的博客 3000

Switch2Cursor完整使用手册:彻底告别编辑器切换烦恼

还在为在不同编辑器之间来回切换而烦恼吗?Switch2Cursor插件正是为你解决这一痛点的完美工具。作为一款专为JetBrains IDE用户设计的插件,它能够让你在功能强大的IDE和轻量高效的Cursor编辑器之间实现真正的一键切换。 ## 开发痛点分析:为什么你需要Switch2Cursor 在开发过程中,你是否经常遇到这些困扰? **上下文切换成本高**:每次在不同编辑器间切换,都需

gitblog_00215的博客 958

Cursor + Claude Code

官网下载cursor,我这里用的是免费版。

qq_44886213的博客 785

claude code及其cursor、vscode插件安装

本文介绍了Claude代码助手工具的完整安装配置流程:1)通过npm安装Claude核心组件;2)使用CC Switch工具配置国内大模型API接入;3)在VSCode或Cursor编辑器中安装插件并禁用登录验证;4)最终实现编辑器内或命令行终端两种使用方式。整个过程包含详细的安装命令、界面截图和关键配置选项说明,帮助用户快速搭建本地AI编程助手环境。

Talk is cheap,show me the code! 1353

Cursor MCP终极指南(MCP教程、Cursor教程)★★★★★

看到这里你可能有一个问题,在 23 年 OpenAI 发布 GPT function calling 的时候,不是也是可以实现类似的功能吗?我们之前博客介绍的 AI Agent,不就是用来集成不同的服务吗?为什么又出现了 MCP。function calling、AI Agent、MCP 这三者之间有什么区别?本篇文章写的比较仓促,如果有错误再所难免,欢迎各位大佬指正。最后本篇文章可以转载,但是请注明出处,会在 X/Twitter,小红书, 微信公众号 同步发布,欢迎各位大佬关注一波。

Dontla的博客 8464

CC-Switch使用指南

Claude Code、Codex、Gemini CLI、OpenCode 和 OpenClaw 的全方位管理工具

forcedRegCsdn的博客 3万+

Claude Code + CC Switch 在 Windows 11 下安装使用教程

Claude Code 是 Anthropic 推出的终端式 AI 编程助手,可以直接在命令行里读取项目、修改代码、运行命令、解释报错、生成脚本和辅助重构。CC Switch 是一个跨平台桌面工具,主要用于管理 Claude Code、Codex、Gemini CLI、OpenCode、OpenClaw 等 AI CLI 工具的模型供应商、API Key、MCP、Skills 等配置。注意:本文只讲正规安装和配置流程。

weixin_61411335的博客 1291

设置 弹窗优先级

LayerTouchPriority = -129 --弹窗层的优先级<大于最大优先级>--设置弹窗层的优先级<handle,是否多点触摸,优先级,是否吞噬下层touch><began方法里必须返回true>self:registerScriptTouchHandler(function(eventType) if eventType == "began" ...

weixin_30765319的博客 1956

有关按钮的触摸优先级和layer的触摸事件冲突问题

自己在做到有关按钮的点击事件和layer的touch事件问题上也是让自己头疼了好一阵,也尝试过几种方式 (1)// _eventDispatcher->addEventListenerWithFixedPriority(listner, -128);这个方式不建议采用,你如果这样注册了你稍不留神 可能就会出现问题 (2)_eventDispatcher->addEventListenerWit

yuchu123456的博客 2万+
上一篇: 支持PhysicsEditor生成的关于box2d的pilst文件的解析文件 ,支持cocos2d-x-2.1.5 亲测通过
下一篇: Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案
Handz_cpp
博客等级 码龄14年 6粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值