当前位置: 首页 > news >正文

【2014-01-21】cocos2dx:转盘吸附效果

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2014-01-21| 标题:cocos2dx:转盘吸附效果分类:编程 / C && C++ / cocos2dx |标签:cocos2dx·吸附效果


cocos2dx:转盘吸附效果

    • 转盘吸附效果的大致实现
      • 首先是两个转盘的旋转函数:
      • 然后重写Layer的触摸:
      • 备注:

最近项目中用到了cocos2dx来开发一个基于陀螺仪的demo,忙了半个星期,一边学习一边开发,总算搞了出来。这里备份下开发中学习到的一些cocos2dx知识。

转盘吸附效果的大致实现

demo中用到了一个圆形的转盘,并且要求转盘转动时会吸附。这里备份下大致的代码实现:

首先是两个转盘的旋转函数:

voidXX::switchCircleA(floatangle){floatold=circleSprite->getRotation();if(fabsf(old-angle)<5){return;}floatspeed=360/0.3f;floattimeNeed=fabsf(old-angle)/speed;circleSprite->stopAllActions();CCRotateTo*rotateTo=CCRotateTo::create(timeNeed,angle);circleSprite->runAction(rotateTo);}voidXX::switchCircleB(){intangle=circleSprite->getRotation();if(angle<0){angle=angle+360;}if(angle%90>45){angle=(angle/90+1)*90;}else{angle=(angle/90)*90;}intspriteIdx=angle/90;switch(spriteIdx){case0:case4:{//funA()break;}case1:{//funB()break;}case2:{//funC()break;}case3:{//funD()break;}break;default:}circleSprite->stopAllActions();CCRotateTo*rotateTo=CCRotateTo::create(0.5f,angle);CCEaseBackOut*ease=CCEaseBackOut::create(rotateTo);circleSprite->runAction(ease);}

然后重写Layer的触摸:

//使能触摸begin:this->setTouchEnabled(true);//endvoidXX::ccTouchesBegan(CCSet*pTouches,CCEvent*pEvent){if(pTouches->count()!=1){return;}CCTouch*curTouch=(CCTouch*)(pTouches->anyObject());cocos2d::CCPoint currTouchPoint=curTouch->getLocation();//计算起始触摸偏移角度initOffsetAngle//计算起始转盘已经旋转的角度initAngleCCPoint center=XXXX;initOffsetAngle=ccpToAngle(ccpSub(currTouchPoint,center));initOffsetAngle=CC_RADIANS_TO_DEGREES(initOffsetAngle);initAngle=circleSel->getRotation();。。}voidXX::ccTouchesMoved(CCSet*pTouches,CCEvent*pEvent){if(pTouches->count()!=1){return;}CCTouch*curTouch=(CCTouch*)(pTouches->anyObject());CCPoint newPoint=curTouch->getLocation();//防止回调过快导致转盘闪动,按一定策略丢弃部分Move回调。。//根据起始触摸偏移角度,转盘起始角度,当前触摸点偏移角度,计算转盘的当前角度angleCCPoint center=XXXX;floatnewAngle=ccpToAngle(ccpSub(newPoint,center));newAngle=CC_RADIANS_TO_DEGREES(newAngle);angle=-newAngle+initOffsetAngle+initAngle;switchCircleA(angle);}voidXX::ccTouchesEnded(CCSet*pTouches,CCEvent*pEvent){switchCircleB();}voidXX::ccTouchesCancelled(CCSet*pTouches,CCEvent*pEvent){switchCircleB();}

备注:

由于时间紧张,作者没有在网上仔细寻找现成代码, 而是自己写了一套,感觉效果还不错,就没有再搜索其他方案。

http://www.jsqmd.com/news/1199357/

相关文章:

  • 5步快速开始:从零部署openEuler阿语官网的完整教程
  • 基于CH224的Type-C PD受电电路设计与实战
  • 黄冈黄金回收避坑指南:6家正规门店实测对比 - 观金堂黄金回收
  • 优先队列式分支限界法:从理论到实战,高效求解TSP问题
  • 劳力士成都官方售后服务体系全解析|官方服务电话及地址权威公示(2026年7月最新) - 劳力士中国服务中心
  • 现代C++17高性能哈希库:XXHash的工程实践与优化指南
  • 50MW分布式VPP接入实战:调度中心要求的1分钟频率如何不卡死API
  • Windows数字许可激活工具CMWTAT的技术解析与应用
  • CUDA版本兼容性解析与开发环境配置指南
  • 微信JSSDK开发实战:从入门到企业级应用
  • Unity桌面环境:安装配置与生产力优化指南
  • NVMe SSD在AI集群中的性能优势与优化实践
  • 北京爱彼回收价格查询与靠谱回收平台实测排行(2026年7月最新) - 尊奢回收二奢平台
  • 2026威海暴雨窗户飘窗渗水漏雨怎么办?专业窗边渗漏根治找宅安选房屋修缮 - 宅安选房屋修缮
  • 国内热门的可定制的圆齿轮流量计有哪些?浙江靠谱品牌推荐 - 仪表人叶工
  • 广州黄金回收门店实测盘点:5家正规无套路商家对比,街坊口碑优选 - 奢侈品回收评测
  • 开源AI模型核心参数解析与部署优化指南
  • 手搓生产级 AI Agent 系统(3):Agent 与工具系统完整集成——从 ReAct 到自主决策
  • Vision Transformer核心原理与工业实践指南
  • C# 将List<long>转换为object[]
  • 沈阳和平区会计代账公司 英才天下 持证财税团队提供代账、工商注册一体服务 - 热点速览
  • 【2014-01-26】cocos2dx学习笔记:CCClippingNode
  • Visio数据流图绘制:从零基础到专业建模的实战指南
  • AI Agent智能体开发:从架构设计到生产部署的完整指南
  • 蓝牙模块选型实战:从协议解析到硬件接口的避坑指南
  • [一]开源ERP:odoo19二次开发问题-原库存模块问题
  • C语言文件大小获取:fseek/ftell与stat方法详解与实践
  • Rider接入豆包与智谱AI的插件开发实战指南
  • oeAware-scenario:华为开源的低开销场景感知工具完整指南
  • KV缓存量化技术:提升大模型长文本生成效率