最近在研究cocos2dx,由于项目中要用到内容滚动效果(内容超出容器,可以通过滑动屏幕滚动来查看),所以就毫不犹豫的选择了CCScrollView组件。

 
使用中发现CCScrollView的体验不佳:理论上应该是当鼠标滑动离开时,由于惯性效果,内容应该继续向前滑动一段距离。但是CCScrollView却是鼠标离开后,内容就立即停止了,并没有继续向前滑动。
 
通过网络搜索发现,有人说可以用CCTableView替换CCScrollView,因为CCTableView具有惯性滑动的效果。实验中发现确实是这样。
但是仅仅是为了实现滑动而采用CCTableView,感觉是浪费了。
 
于是我仔细对比了下CCTableView和CCScrollView的代码,发现这种惯性滑动效果其实是在CCScrollView中实现的,也就是说CCScrollView具备惯性滑动的功能。
具体实现方法是:当你使用CCScrollView的时候调用一下CCScrollView的updateInset();这个方法即可。
 
可以在HelloWorldScene.cpp的init函数里面添加下面的代码,测试惯性滑动效果。
CCScrollView, ));
scrollView, ));
scrollView->setContainer(sp);
scrollView->updateInset();
 
 
当然个人感觉滑动效果还是不太完美:比如当滑动到底部时应该有阻尼效果,像IOS那样的。
我看了下cocos2d-x-3.2里面的ScrollView是具备阻尼效果的。于是对比了两个文件的代码,找到了一下地方。
 
在 void ScrollView::onTouchMoved(Touch* touch, Event* event) 函数里面有如下内容:
.0f;
if (_direction == Direction::VERTICAL)
{
    dis = moveDistance.y;
    float pos = _container->getPosition().y;
    if (!(minContainerOffset().y <= pos && pos <= maxContainerOffset().y)) {
        moveDistance.y *= BOUNCE_BACK_FACTOR;
    }

}
else if (_direction == Direction::HORIZONTAL)
{
    dis = moveDistance.x;
    float pos = _container->getPosition().x;
    if (!(minContainerOffset().x <= pos && pos <= maxContainerOffset().x)) {
        moveDistance.x *= BOUNCE_BACK_FACTOR;
    }

}
else
{
    dis = sqrtf(moveDistance.x*moveDistance.x + moveDistance.y*moveDistance.y);
   
    float pos = _container->getPosition().y;
    if (!(minContainerOffset().y <= pos && pos <= maxContainerOffset().y)) {
        moveDistance.y *= BOUNCE_BACK_FACTOR;
    }
   
    pos = _container->getPosition().x;
    if (!(minContainerOffset().x <= pos && pos <= maxContainerOffset().x)) {
        moveDistance.x *= BOUNCE_BACK_FACTOR;
    }

}

上面的粗体加斜体部分是实现阻尼效果的。BOUNCE_BACK_FACTOR是个宏在文件里有定义:#define BOUNCE_BACK_FACTOR   0.35f

 
改下CCScrollView对应的函数,就可以实现阻尼效果了。(用cocos2dx 3版本开发的人就不需要改了)
 

CCScrollView的滑动体验的更多相关文章

  1. cocos2d-x中的CCScrollView滑动体验不佳

    在最近的项目中,使用了Cocos2d-x (2.2.0版本)提供的CCScrollView来拖动一个比较大的画面,但是发现滑动体验非常不佳, 手指离开屏幕后,滑动没有惯性,一个不算太大的画面,要滑动好 ...

  2. Cocos2d—X游戏开发之CCScrollView(滑动视图)(十二)

    CCScrollView在Cocos2d-X引擎中主要使用在图片尺寸远大于屏幕尺寸的时候使用. 总体来说,使用起来比较简单. 一个是CCScrollView控件本身,一个是CCScrollViewDe ...

  3. 提升html5的性能体验系列之二列表流畅滑动

    App的顶部一般有titlebar,下面是list.常见的一个需求是要在list滚动时,titlebar不动.这个简单的需求,实现起来其实并不简单. 在普通web上的做法是使用div的滚动条,把lis ...

  4. 提升HTML5的性能体验系列之二 列表流畅滑动

    App的顶部一般有titlebar,下面是list.常见的一个需求是要在list滚动时,titlebar不动.这个简单的需求,实现起来其实并不简单. 在普通web上的做法是使用div的滚动条,把lis ...

  5. [cocos2dx]让CCScrollView支持分页

    [cocos2dx]让CCScrollView支持分页 做过IOS开发的朋友, 肯定知道UIScrollView有一个isPaged属性. 当设置其为true的时候, 滑动会自动分页. 即, 每次滑动 ...

  6. 一步步实现滑动验证码,Java图片处理关键代码

    最近滑动验证码在很多网站逐步流行起来,一方面对用户体验来说,比较新颖,操作简单,另一方面相对图形验证码来说,安全性并没有很大的降低.当然到目前为止,没有绝对的安全验证,只是不断增加攻击者的绕过成本. ...

  7. MUI体验框架

    1.      mui简介 1.1  缘起 1.基于jq的jqmobile,性能低的无法忍受,且UI难看 2.bootstrap这种响应式设计,性能在低端机不足,而且UI风格一看就是网页,不是App的 ...

  8. mui体验理解

    1.      mui简介 1.1  缘起 1.基于jq的jqmobile,性能低的无法忍受,且UI难看 2.bootstrap这种响应式设计,性能在低端机不足,而且UI风格一看就是网页,不是App的 ...

  9. 自定义控件(视图)2期笔记12:View的滑动冲突之 外部拦截法

    1. 外部拦截法: 点击事件通过父容器拦截处理,如果父容器需要就拦截,不需要就不拦截. 这种方法比较符合事件分发机制.外部拦截法需要重写父容器的onInterceptTouchEvent方法,在内部做 ...

随机推荐

  1. kali Linux 上编译并使用RFID核弹——proxmark3

    你还在在Windows下使用proxmark3?弱爆了! 本文作者:i春秋签约作家——冰尘 作为一个标准的日天日地日空气的(单身贵族泰迪)物理黑客Proxmark3这么高大上的东西应该是在键盘敲打声中 ...

  2. [Swift实际操作]七、常见概念-(4)范围CGRect的使用详解

    本文将为你演示区域对象CGRect的使用.你可以将区域对象,看作是点对象和尺寸对象的组合 首先导入需要使用到底界面工具框架 import UIKit 然后初始化一个区域对象,它的原点位于(0,0),宽 ...

  3. NSTimer、performSelector 函数没有被调用的原因

    performSelector 指定的方法没有被调用 Invokes a method of the receiver on the current thread using the default ...

  4. fullpage.js与animate.css搭配使用

    jquery的fullpage.js插件的使用 https://alvarotrigo.com/fullPage/#3rdPage   官网 https://github.com/alvarotrig ...

  5. Matlab 编程

    M文件 1. 脚本文件 Script is a file containing a series of commands Scripts need to be saved to a <file& ...

  6. (转)MySQL中show语法

    MySQL中show语法 1. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称. 2. show databases; -- ...

  7. Win7上装CentOS7 双系统

    今天折腾了半天,终于在Win7上把CentOS装上了,Win7和CentOS双系统共存,可自由切换. 你问我为什么不装在虚拟机上,我只能说我的电脑卡得一B. 装机参考: 1.Window7+CentO ...

  8. SPSS学习系列之SPSS Modeler的帮助文档怎么调出来使用?

    不多说,直接上干货! 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑       同时,大家可以关注我的个人博客:    http://www.cnblogs.com/z ...

  9. Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置

    不多说,直接上干货! 说明 图形界面安装,会自带有Centos6.5自带的OPRNJDK!!! *********************************自带的OPENJDK的卸载****** ...

  10. MYSQL 复制详解

    MySql 复制介绍 MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况 下复制是异步进行的,从库也不需要一直连接到主库来同步数据 MySQL复制的数据 ...