cocos2d-x中CCLayer捕捉触摸消息和坐标转换以及窗口剪裁

[YIUI付费插件] 超级循环列表yiuisuperscroll 本文介绍基于YIUI框架实现循环列表(LoopListView2)的完整流程:在Scroll Rect上挂载LoopListView2并配置预制体,为Item添加Click同步事件;通过ServerListPanelComponent与ServerInfoItemComponent配合,使用YIUISuperScrollListRenderer和YIUISuperScrollListOnClick实现数据渲染与点击响应,支持动态刷新列表、选中状态管理及服务器信息绑定,高效构建可交互的滚动列表界面。 阅读详情

时间:2012.3.5

平台:xcode4.0,cocos2d-x

测试坐标和触摸消息

先了解下基本概念(不足请指正):

坐标转换主要就4个函数:

        CCPointconvertToNodeSpace(const CCPoint& worldPoint);

        CCPointconvertToWorldSpace(const CCPoint& nodePoint);

        CCPointconvertToNodeSpaceAR(const CCPoint& worldPoint);

        CCPointconvertToWorldSpaceAR(const CCPoint& nodePoint);

cocos2d-x默认情况下:

世界坐标:屏幕上原点基于(0,0)的笛卡尔坐标系(此时原点为屏幕左下角),

         坐标x向右增长,y向上增长. x,y都是大于等于0.

 

对象窗口内的坐标:窗口原点基于(0,0)的笛卡尔坐标系(此时原点为窗口左下角),

                  坐标x向右增长,y向上增长. x,y都是大于等于0.

 

基于锚点的窗口内的坐标:窗口原点基于锚点(x,y)的笛卡尔坐标系(此时原点为锚点),

                   坐标x向右增长,y向上增长。 x,y可以为负数或者正数以及0。

 

CCPointconvertToNodeSpace(const CCPoint& worldPoint): 这个函数把世界坐标转换为对象窗口内的坐标。

 

CCPointconvertToWorldSpace(const CCPoint& nodePoint): 这个函数把对象窗口内的坐标转换为世界坐标。

 

CCPointconvertToNodeSpaceAR(const CCPoint& worldPoint):这个函数把世界坐标转换为基于锚点的窗口内的坐标。

 

CCPointconvertToWorldSpaceAR(const CCPoint& nodePoint):这个函数把基于锚点的对象窗口内的坐标转换为世界坐标。


首先是坐标和触摸:

先上图:(用label跟踪鼠标,截图中鼠标没有显示)


更改父layer(即scrollLayer)后的偏移位置 (20,20)后如下:



//
//  NRScrollView.h
//  cocosHello
//
//  Created by mac on 12-3-5.
//  Copyright 2012年 __MyCompanyName__. All rights reserved.
//

#ifndef NRScrollLayer_H
#define NRScrollLayer_H
#include "cocos2d.h"
#include "stdio.h"
using namespace cocos2d;

class NRScrollLayer:public CCLayer {
private:
    CCLabelTTF *labelInfo;
    CCLayerColor *contentLayer;
public:
    virtual bool init();
 
public:
    // default implements are used to call script callback if exist
	virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
	virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
	virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
	virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);
    
    LAYER_NODE_FUNC(NRScrollLayer);
};

#endif//NRScrollLayer_H

//
//  NRScrollLayer.cpp
//  cocosHello
//
//  Created by mac on 12-3-5.
//  Copyright 2012年 __MyCompanyName__. All rights reserved.
//
#include "NRScrollLayer.h"
using namespace cocos2d;

bool NRScrollLayer::init()
{
    CCSize scrollLayerSize = this->getContentSize();
    contentLayer = CCLayerColor::layerWithColorWidthHeight(ccc4(120,0,0,120), 
                                                           scrollLayerSize.width,scrollLayerSize.height);    
    contentLayer->setIsRelativeAnchorPoint(true);
    contentLayer->setAnchorPoint(ccp(0.5,0.5));
    contentLayer->setPosition(ccp(scrollLayerSize.width/2.0,scrollLayerSize.height/2.0));
    printf("ContentLayer:width=%.0f,height=%.0f\n",scrollLayerSize.width,scrollLayerSize.height);
    labelInfo= CCLabelTTF::labelWithString("click and move", "Arial", 28);
    labelInfo->setScaleY(0.5);
    labelInfo->setScaleX(0.5);
    labelInfo->setAnchorPoint(ccp(0.5,0.5));
    labelInfo->setPosition(ccp(40,40));
    contentLayer->addChild(labelInfo);
    contentLayer->setIsTouchEnabled(true);
    this->addChild(contentLayer);
    this->setIsTouchEnabled(true);
    return true;
}


void NRScrollLayer::ccTouchesBegan( CCSet *pTouches,  CCEvent *pEvent) {  
    CCSetIterator it = pTouches->begin();
	CCTouch* touch = (CCTouch*)(*it);
	CCPoint location = touch->locationInView( touch->view() );//based on uiview, origin based on upper left.
	CCPoint convertedLocation = CCDirector::sharedDirector()->convertToGL(location);//glLocation, origin(0,0) 
    CCPoint convertedToNodeLocation = this->convertToNodeSpace(convertedLocation); //gllocation,origin based on parent's lower left.
    CCPoint convertedToNodeLocationAR = this->convertToNodeSpaceAR(convertedLocation);

    char message[200];
    sprintf(message, "UI:%.0f,%.0f\nGL:%.0f,%.0f\nNL:%.0f,%.0f\nAR:%.0f,%.0f",
            location.x,location.y,convertedLocation.x,convertedLocation.y,
            convertedToNodeLocation.x,convertedToNodeLocation.y,
            convertedToNodeLocationAR.x,convertedToNodeLocationAR.y);
    labelInfo->setString(message);
    labelInfo->setPosition(convertedLocation); 
}

void NRScrollLayer::ccTouchesCancelled(cocos2d::CCSet *pTouches, 
                                       cocos2d::CCEvent *pEvent){
     
}

void NRScrollLayer::ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){
    CCSetIterator it = pTouches->begin();
	CCTouch* touch = (CCTouch*)(*it);
	CCPoint location = touch->locationInView( touch->view() );//based on uiview, origin based on upper left.
	CCPoint convertedLocation = CCDirector::sharedDirector()->convertToGL(location);//glLocation, origin(0,0) 
    CCPoint convertedToNodeLocation = this->convertToNodeSpace(convertedLocation); //gllocation,origin based on parent's lower left.
    CCPoint convertedToNodeLocationAR = this->convertToNodeSpaceAR(convertedLocation);
    
    char message[200];
    sprintf(message, "UI:%.0f,%.0f\nGL:%.0f,%.0f\nNL:%.0f,%.0f\nAR:%.0f,%.0f",
            location.x,location.y,convertedLocation.x,convertedLocation.y,
            convertedToNodeLocation.x,convertedToNodeLocation.y,
            convertedToNodeLocationAR.x,convertedToNodeLocationAR.y);
    labelInfo->setString(message);
    labelInfo->setPosition(convertedLocation);
}

void NRScrollLayer::ccTouchesMoved(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent){
    CCSetIterator it = pTouches->begin();
	CCTouch* touch = (CCTouch*)(*it);
	CCPoint location = touch->locationInView( touch->view() );//based on uiview, origin based on upper left.
	CCPoint convertedLocation = CCDirector::sharedDirector()->convertToGL(location);//glLocation, origin(0,0) 
    CCPoint convertedToNodeLocation = this->convertToNodeSpace(convertedLocation); //gllocation,origin based on parent's lower left.
    CCPoint convertedToNodeLocationAR = this->convertToNodeSpaceAR(convertedLocation);
    
    char message[200];
    sprintf(message, "UI:%.0f,%.0f\nGL:%.0f,%.0f\nNL:%.0f,%.0f\nAR:%.0f,%.0f",
            location.x,location.y,convertedLocation.x,convertedLocation.y,
            convertedToNodeLocation.x,convertedToNodeLocation.y,
            convertedToNodeLocationAR.x,convertedToNodeLocationAR.y);
    labelInfo->setString(message);
    labelInfo->setPosition(convertedLocation);
}

我直接在helloworld的init中添加如下:

NRScrollLayer *scrollLayer = new NRScrollLayer;
    scrollLayer->setContentSize(CCSizeMake(480, 320));
    printf("ScrollLayer:width=%.0f,height=%.0f\n",scrollLayer->getContentSize().width,scrollLayer->getContentSize().height);
    scrollLayer->init();
    scrollLayer->autorelease();
    scrollLayer->setPosition(ccp(20,20));
    this->addChild(scrollLayer,1);
	 


然后剪裁:(调用opengl方法,很简单的介绍下)

在头文件增加 public方法:

virtualvoid visit();

然后cpp文件增加实现:

voidNRScrollLayer::visit(){

   glEnable(GL_SCISSOR_TEST);

    glScissor(40, 20, 400, 280);

    CCLayer::visit();

   glDisable(GL_SCISSOR_TEST);

}

看看效果:



ok,it is over。

Cadence安装 选择刚刚解压的E盘DVD驱动中的setup.exe文件,安装路径推荐D盘,此处会自己给你新建文件夹,我们无需手动建文件夹。但是,新产品有一些BUG(影响使用流畅性),所以我们要对17.4打补丁,补丁包同样去吴川斌的博客下载。下载阿狸狗破戒大师 我这边下载的是版本V3.2.6,同样在吴川斌的博客下载安装包,链接同上。记录一下安装过程,方便以后安装使用Cadence。破解完成后,建议将这两个软件创建快捷方式到桌面。到这里,我们已经可以正常的使用Cadence了。对光盘映像文件解压后双击,可以在我的电脑看到。 阅读详情

相关推荐

USB3.0/3.1信号完整性分析仿真

• 1.了解USB3.0通路的互连关系,解读原理图接口电路和PCB的互连电路。对USB布线的通路及阻抗进行检查和分析。 • 2.使用USB3.0实例文件提取互连线的S参数,选择SSRX+,SSRX-,SSTX+,SSTX-,D+,D-组的互连线,使用PowerSI,Clarity,3DFEM等工具提起关键网络的S参数。提取S参数以后需要分析S参数的互连特征,对S参数的结果开展评价。 • 3.使用SYSTEM SI USB3 Compliance工程向导模型,建立USB仿真实例框架,在框架BOLCK中带入S参

小猪配齐电子设计 1万+

cocos2d-x 取得资源的路径的函数

2012.4.10 平台:vs2010, cocos2d-x, win7 32   CCLog("%s",CCFileUtils::getWriteablePath().c_str()); CCLog("%s", CCFileUtils::fullPathFromRelativePath("")); CCLog("%s",CCFileUtils::fullPathFromRelative

9404

从零搭建企业级AI网关:基于LiteLLM的安全防护体系设计

本文详细介绍了如何从零搭建企业级AI网关,基于LiteLLM构建全面的安全防护体系。内容涵盖分层防御架构、敏感数据处理、合规性配置与审计追踪,以及生产环境部署策略,助力企业安全高效地集成LLM技术,确保数据安全和合规性。

qq_27496129的博客 1291

一步教你在 cocos2d-x 中使用 tinyxml读取Resource中xml文件的信息

时间: 2012.4.10 平台: vs2010, cocos2d-x *.12.* , tinyxml:2.6.2 其中:tinyxml 下载:http://sourceforge.net/projects/tinyxml/files/ tinyxml相关网页: www.sourceforge.net/projects/tinyxml Original code by Lee Thom

6561

044、手持视频抖动严重?OpenCV 光流 + IMU 融合的电子防抖工程方案

本文探讨了基于OpenCV光流和IMU融合的手持视频电子防抖方案。作者从实际工程经验出发,分析了纯光流和纯IMU方案的局限性,指出时间戳对齐和坐标系标定是关键挑战。文章详细介绍了融合滤波器的实现方法,推荐互补滤波替代卡尔曼滤波,并提出了动态调整融合系数的策略。在光流算法优化方面,建议采用网格化FAST特征点和前后向误差检测。最后分享了运动补偿裁剪策略和多线程流水线设计,强调在嵌入式设备上使用NEON指令优化性能。该方案通过精确的时间同步和传感器融合,有效解决了手持拍摄中的高频抖动问题。

ai技术增长的博客 250

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

2025年12月GESP真题及题解(C++一级): 小杨的爱心快递

王老师青少年编程 1648

教你在vs2010下输出cocos2d-x的调试信息

上次在xcode下,使用printf直接在调试窗口可以看到输出的信息,在vs2010中没有看到,于是查看了源代码,找到函数CCLog void CCLog(const char * pszFormat, ...) { char szBuf[MAX_LEN]; va_list ap; va_start(ap, pszFormat); vsnprintf_s(szB

6336

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真

PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。

一只豌豆象的博客 1436

cocos2d-x 如何自定义简单的scrollView/scrollLayer

时间:3-9 平台:xcode4.2 cocos2d-x *.11.* 说明:简单的实现scrollView,没有加速减速功能,没有进度条。 上图: // // CCUIScrollView.h // cocos2dUI // // Created by rorger on 12-3-7. contact me:jhcyd112@163.com // Cop

5386

拼多多笔试真题-多多送快递(C++/Py/Java /Js/Go)

拼多多技术岗笔试 8月2号真题,拼多多笔试第三题【多多送快递】,提供详细思路讲解以及Java、C++、Python、Go、JavaScript多语言代码实现。拼多多笔试真题【多多送快递】多语言题解。

qq_45776114的博客 291

RK3588 部署 YOLO26 目标检测:从环境搭建到 NPU 推理

采集图像(500+ 张,覆盖不同光照和角度)→ 筛选(删除模糊、无目标的图像)→ LabelImg 标注(选择 YOLO 格式)→ 划分 train:val:test = 7:2:1labelImg├── train/├── val/nc: 3类别顺序必须与 LabelImg 标注时一致。YOLO26 在 RK3588 上的部署流程是 PC 端训练 → ONNX 导出(opset=11)→ RKNN 转换(INT8 量化)→ 板端推理。

LXY_LOVE36的博客 418

Tween算法的深入分析

Tween算法:http://www.robertpenner.com/easing/ 这里有文档。 我们来深入解析下Tween算法公式吧,庖丁解牛 开始之前,必须了解下一些知识: 函数关于点或者直线对称方法 来自百度百科。 http://zhidao.baidu.com/question/114652008.html http://zhidao.baidu.com/question/

4074

C++-ONNX:用onnxruntime部署自己的模型【Pytorch导出.onnx】【Tensorflow导出.onnx】【C++用onnxruntime框架部署并推理】

微软联合Facebook等在2017年搞了个深度学习以及机器学习模型的格式标准–ONNX,旨在将所有模型格式统一为一致,更方便地实现模型部署。现在大多数的深度学习框架都支持ONNX模型转出并提供相应的导出接口。ONNXRuntime(Open Neural Network Exchange)是微软推出的一款针对ONNX模型格式的推理框架,用户可以非常便利的用其运行一个onnx模型。ONNXRuntime支持多种运行后端包括CPU,GPU,TensorRT,DML等。

u013250861的博客 5766

Cocos2d-x移植的Tween算法

时间:3/14/2012 平台:xcode 4.2 + cocos2d-x  *.11.0  首先说明,cocos2d-x已经有实现这些算法了,本人只是出于兴趣动手实现下 不知道tween算法的朋友看看这个: 原文链接:http://www.cnblogs.com/cloudgamer/archive/2009/01/06/Tween.html Tween又称为补间动画或中间动画; 上

3156

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

vs2010+win7+cocos2d-1.0.1-x-0.12.0配置 *三步骤*

时间:3/11/2012 平台:vs2010+win7+cocos2d-1.0.1-x-0.12.0 第一步:下载 下载cocos2d-x:        http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download        我放在e盘根目录,解压,解压后目录是:E:\cocos2d-1.0.1-x-0.12.0 第二步:

1925

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

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

# WPF ComboBox 控件详解与使用 —WPF 中的控件(7)--下拉框选项列表控件( ComboBox)

ComboBox`(下拉框选项列表)是 WPF 中最常用的选择类控件之一,它在有限空间内提供下拉选项列表,支持**单选、可编辑输入、数据绑定、自定义项外观**等核心能力,继承自 `System.Windows.Controls.Primitives.Selector`。 本文将从基础属性、核心事件、基础用法、数据绑定、自定义模板、高级定制到最佳实践,逐一带代码注解进行讲解。

yunmaowu0917的博客 152

计算机控制技术及应用

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

从零搭建半导体设备上位机(五):三套 UI 库共存,HandyControl、MaterialDesign、Wu.Wpf 的样式基线

三套 UI 库共存:HandyControl、MaterialDesign、Wu.Wpf 的样式基线 这是「从零搭建半导体设备上位机」系列第5篇。一个 WPF 应用里同时装了 HandyControl、MaterialDesignThemes、Wu.Wpf 三套控件库。这篇讲它们为什么会打架、打架的具体机制是什么,以及怎么建立一套"谁也别想偷偷改我外观"的样式基线。 一个下拉框,白底白字 界面做完

samble的专栏 457

【QT入门到晋级】用开源的自定义控件开发

直接点击mainwindow.ui文件是看不到quc控件的,关键步骤是右键点击mainwindow.ui,右键菜单选择【Qt Designer】,在UI设计器中才能找到“Quc Widget”。注意:以上是前端调用自定义控件的方式,需要编译动态库等操作,相对要麻烦一些。如果有自定义控件的源码.h和.cpp文件,直接加入到现有qt项目中,以后台方式直接调用即可,以下是我分享过一个手搓的自定义控件类【QT自定义2D控件】QGraphics绘制仪表盘_qt仪表盘控件-优快云博客。

ocy的博客 175

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 164

K210+STM32+LVGL:手搓边缘AI智能安防监控网关

在传统的物联网或嵌入式毕设中,“智能安防”往往沦为“温湿度+蜂鸣器”的简单堆砌。由于单片机(如STM32)算力有限,无法在本地运行复杂的视觉AI模型,导致很多项目只能在云端处理图像,带来高延迟和隐私风险。本文将分享一个真正的边缘计算安防网关项目。我们采用“K210视觉协处理 + STM32F407主控 + LVGL高颜值UI”的分布式架构,完美解决了单芯片算力不足的痛点。项目不仅实现了明火与陌生人脸识别,还加入了多源传感器融合、5秒智能防抖、以及硬件与UI的双向闭环控制,是一套工业级标准的开源方案。

185

React 错误边界 Error Boundary

用类组件 ErrorBoundary 隔离渲染错误,讲清能接住/接不住、重置策略与上报。

JudithHuang的博客 295

【元宝搜索开发者征文大赛】用 Vue + Ele把元宝搜索的返回值做成“能点开检查的证据卡片”ment UI

本文提出将“用户信任AI结论”转化为前端组件问题:针对元宝搜索返回的嵌套JSON字符串型Pages,通过解析生成可标注可信度的证据卡片,实现“可信/存疑/过期”三态标记。前端负责证据可视化与用户交互,后端专注检索逻辑,代理层保障密钥安全。通过自定义时效分档、容错解析与可展开卡片设计,构建可验证的AI结论信任链,突破传统“输入框+结果列表”的局限。

weixin_43787161的博客 368

【鸿蒙专题与实战】服务卡片开发:桌面上的「信息窗口」

本文详解鸿蒙服务卡片开发,从独立运行体系、配置文件form_config.json到UI构建与数据刷新机制。通过实现“今日待办”卡片,展示其尺寸声明、静态布局及主动/被动更新策略。强调卡片限制:不可滚动、禁用音视频与网络图片,仅支持onClick跳转。下篇将聚焦音视频开发,持续更新中,欢迎留言互动。

信息安全领域优质创作者|操作系统领域专家 147

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 187

算法与UI拆分中遇到的问题及解决方式

算法与UI界面拆分解耦,算法设计成windows服务来供客户端调用

冰凌的博客 186

从 ArkUI V1 监听泥沼到 V2 精准更新的性能跳跃,重构状态数据流

起初以为只是简单的 API 替换,没想到在一次复杂表单交互中,整个页面出现了严重的掉帧与输入延迟。为了过渡,我试图在一个 V2 的父组件里,塞入一个原本用 V1 编写的子组件。这也是为什么在重构中,我强制团队在涉及数组更新时,必须通过封装好的工具方法来操作。必须精确到需要更新的最底层属性,如果只用在外层对象上,内层的频繁变动依然无法触发 UI 的刷新。变化时,框架能够直接定位到绑定该变量的 UI 节点进行刷新,完全没有多余的遍历。用性能分析工具跑一下,体会一下消除深度代理后,页面渲染性能的直线拉升。

2602_97267507的博客 284
上一篇: xcode 4.2 + cocos2d-x 配置
下一篇: cocos2d-x 如何自定义简单的scrollView/scrollLayer
rorger
博客等级 码龄16年 62粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值