位置: 编程技术 - 正文

cocos2dx中滚动界面和小滚动条同步的实现(cocos2d动画)

编辑:rootadmin

推荐整理分享cocos2dx中滚动界面和小滚动条同步的实现(cocos2d动画),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos动作,cocos2dx设置窗口大小,cocoscreator来回移动,cocos界面,cocos2dx设置窗口大小,cocoscreator来回移动,cocos2dx-js,cocoscreator来回移动,内容如对您有帮助,希望把文章链接给更多的朋友!

在游戏中,经常会遇到滚动界面,或者滚动列表,在滚动时,为了给用户一个更好的体验,我们会想到在滚动界面的旁边加上一个小小的滚动条,让这个滚动条和滚动界面的同步运动来告诉用户,这个滚动界面还有多少距离到底部等。下面我就来说下我在cocos2dx中具体怎么来实现这一功能。我下面说的是竖着滚动的,所以大小等只针对高。当然横向的原理也是一样的!

首先你要有一个滚动界面控件,也就是ScrollView控件(当然ListView也一样,它是继承前者的)然后有一个表示小小的滚动条的sprite。经过观察别的应用在处理这个问题的时候,我们会发现这个小小的滚动条的大小会随着滚动页面所需要滚动的总大小而变化(下图中H2,有个时候,这个滚动界面是动态的发生变化的,比如qq的好友列表,你往下拉,他的那个列表才会加长,这样你会发现旁边的那个小滚动条的长度在减少),所以第一步,我们要得到小滚动条的长度:即下图h1,其实里面的算法逻辑很简单,很容易得出结论:滚动界面的高 H1(也就是你实际看到的那个表面的滚动界面的高)和用户需要滚动的高H2(这个就是包含滚动界面中不被看到的部分,也就是我们裁剪掉的部分)的比&#; 等于小小滚动条的高h1(这个就是我们要得到的)和滚动界面的高H1。

不是美工,图片做的有点搓,见笑了。

其中 那个实框表示能给用户看到的滚动区域,下面的虚框是滚动界面的总大小,我们需要得到的是 小滚动条的大小h1 = H1 * H1 / H2(注意为了更精确,请使用float类型)

cocos2dx中滚动界面和小滚动条同步的实现(cocos2d动画)

到此,解决了我们的第一个问题:小滚动条的长度问题。

接下来就是小滚动条的滚动位移的问题:

分析:首先要得到一个小滚动条的滚动因子,其实很简单,根据之前要实现滚动界面和小滚动条的同步,那么滚动界面滚动到底(即全部滚完)的时间和小滚动条滚动到底的时间是一样的,我们用s1来表示小滚动条滚动的距离,用s2来表示滚动界面滚动的距离,那么显然,每一次滚动的距离,即有这么一个关系 s1 / s2 = (H1 - h1) / (H2 - H1); 我们用 float moveFactor = (H1 - h1) / (H2 - H1) 来记录这个滚动因子。那么小滚动条移动的距离,永远是大滚动界面移动的距离的 moveFactor 倍,即 s1 = s2 *moveFactor 。这样我们只需要在大滚动界面的滚动事件里面得到他的滚动距离s2,那么我就就可以对小滚动条做出滚动距离的变化了。

实现:因为无论是ScrollView还是ListView他们的滑动不需要我们处理,这里我们只要在滚动界面滑动的时候,让小滚动条也跟着滚动就行了,查看ScrollView的类,发现有以下监听事件:

显而易见,我们需要的是SCROLLING事件,于是注册监听事件(不要告诉我你不会,不会可以看引擎自带的test项目工程),在回调函数里面来实现小滚动条的移动。

touchTarget : 当然就是注册滚动事件的ScrollView 或者listview, m_spHuaDongTiao:当然就是小滑动条精灵了,m_pos1 和m_pos2是一对float用来处理每一次调用此回调函数时,大滚动界面滚动的距离:即进入此函数,得到当前滚动界面内容器(注意请用这个函数:->getInnerContainer())的位置,然后减去上一次的位置,即是改变&#;,那么小滑动条的改变&#;就是此&#;的moveFactor倍了。然后再更新一下m_pos1。最后设置一下小滑动条的位移就搞定了。这样,就彻底实现了 两者之间的同步问题。写得比较混乱,但是我相信聪明的你,肯定看的懂的!

cocos2dx中Action的Tag设置问题 cocos2dx中Action的Tag要在runAction之后再设置,否则不管用。例如:action:setTag(1)sprite:runAction(action)这个时候使用sprite:getActionByTag(1)获取到的为nil而如果这样

cocos2dx的坑 ---- autorelease不release CCNode创建后调用autorelease,就算之后你再也不需要这个节点,该节点也有可能不会自动释放,这个问题用memleak是查看不到的触发情况:1.创建了一个CCNode或

COCOS2DX学习之Box2D物理引擎-物体和相互作用 1、创建一个静态物体创建一个静态物体应该很简单,在头文件生命一下要创建新物体的函数,然后在cpp文件中实现它即可。具体的时候先过程,首先要

标签: cocos2d动画

本文链接地址:https://www.jiuchutong.com/biancheng/368963.html 转载请保留说明!

上一篇:cocos2dx菜单重叠按钮实现按层优先选择及透明过滤(cocos creator 优化 drawcall 合并)

下一篇:cocos2dx中Action的Tag设置问题(cocos2dx schedule)

  • 个体工商户是否跨省经营
  • 报税残疾人保障费怎么算
  • 生产企业出口货物劳务免抵退税申报明细表
  • 消费税的计算方法有什么
  • 机票抵扣进项税怎么填申报表
  • 同级财政拨款的管理要求有哪些
  • 银行回单可以做收入吗
  • 自行研发无形资产暂时性差异
  • 注销了出口退税怎么办
  • 建筑企业会计科目分类及明细表
  • 应收款确认坏账分录
  • 企业变更地址需要哪些资料
  • 水利建设工程
  • 房地产开发企业销售自行开发的房地产项目
  • 回拨工费经费怎么做会计分录?
  • 管理费用中的五项费用
  • 个人投资借款长期不还要缴纳个人所得税吗?
  • 母公司拨款给子公司的账务处理
  • 免税行业企业
  • 购买汽车分期付款利息怎么算
  • 申请商标发生的费用应该如何入账?
  • 利息保障倍数能反映企业偿债能力吗
  • 651错误是怎么回事
  • 以前年度原材料调出怎么做会计分录
  • rmb转
  • thinkphp怎么部署
  • PHP:curl_multi_setopt()的用法_cURL函数
  • 生产性生物资产和消耗性生物资产有什么区别
  • 图书发行流程
  • controller 层
  • 猿人知乎
  • 企业办理税务
  • Vue3通透教程【十四】TS复杂类型详解(一)
  • Android 10.0 framework中关于Activitity的生命周期的源码讲解
  • 工程施工科目下的招待费,汇算清缴
  • echarts快速上手
  • shift命令 向左移动参数
  • columninfo
  • @enable
  • 发票内容服务费可以吗?没有明细
  • 帝国cms使用手册
  • 财务的原始凭证
  • 入库库存商品
  • 小规模纳税人做工资没交社保
  • 在建工程什么情况下算竣工
  • 政府扶持资金使用要求
  • 会计记错账有什么后果
  • 长期股权投资的账务处理
  • 转让金融商品应交增值税可以抵扣吗
  • 进口关税,增值税是进口设备重置成本中的从属费用
  • 当月发票是否需要当月支付
  • 纳税期限与申报期限的区别
  • 提前预支工资怎么打条子
  • 生产车间包括什么
  • 注册资本未到位注销公司处理
  • 摊销费用用什么凭证
  • 销售产品收取的价款
  • 应付利润科目
  • 认购股份的形式主要有
  • 预收账款借方和贷方表示什么
  • 其他应付款社保借方余额怎么处理
  • 购买土地会计分录及摊销分录
  • MySQL5.6下windows msi安装详细介绍
  • mysql oracle和sqlserver分页查询实例解析
  • 该卡已在其他账户中存在什么意思
  • 酷炫技术:使用ssh登录管理windows系统
  • linux.iso在哪里
  • gdiwindow是什么
  • 在windows的命令提示符下,命令名在实际输入时规定
  • 定时清理注册表会怎么样
  • xp显示文件后缀怎么设置
  • win8网络连接受限怎么处理
  • win7win10双硬盘双系统
  • win7ghost纯净版美化版
  • rmxp4droid for 天敏电视盒子
  • javascript调用c语言
  • jquery 判断对象是否为空
  • 发货确认收入还是以开票确认收入
  • 什么是坚持依法治国的重点任务和主体工程
  • 对于批发企业和零售连锁企业的质量验收,错误的是( )
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设