直接上代码,根据cocos2d-x 扩展库中的代码改编的。
创新互联作为成都网站建设公司,专注成都网站建设、网站设计,有关成都企业网站定制方案、改版、费用等问题,行业涉及成都封阳台等多个领域,已为上千家企业服务,得到了客户的尊重与认可。
- //
- // MScrollView.h
- // Test ScrollView
- //
- // Created by Za aa on 13-4-25.
- //
- //
- #ifndef _MScrollView_h
- #define _MScrollView_h
- #include "cocos2d.h"
- usingnamespace
- //触摸误差
- constint
- //设置图片修正时的移动速度
- constfloat
- classpublic
- public
- virtualbool
- //复写绘图函数,每帧调用,添加了区域剔除
- void
- //CREATE_FUNC(MScrollView);
- //自定义--------
- //从多个精灵创建
- staticfloat
- //修改剔除区域
- voidfloatfloat
- //修改响应区域
- void
- //根据间距初始化子层精灵
- boolfloat
- //修正动画的函数
- void
- //拖动精灵,跟随手指移动改变位置
- voidfloat
- //滚动到某一页的函数
- voidfloat
- //页面滚动动画,moveto 动画
- voidfloat
- //updata,用于如果拖动就停止moveto 动作
- voidfloat
- // 添加一个回调函数,用于停止动画
- void
- //重写触屏相关函数----
- virtualvoid
- virtualbool
- virtualvoid
- virtualvoid
- virtualvoid
- private
- //是否按下后移动
- bool
- //按下的点
- //抬起点
- //当前的触电
- //子层容器,用于滚动显示
- //保存所有精灵
- //总页数
- int
- //当前页数
- int
- //偏移动画的时间
- float
- //显示区域
- // CCRect m_view;
- //显示区域,区域外的将被剪切
- //接收事件的区域
- //点击后的回调函数
- #endif
- //
- // MScrollView.cpp
- // Test ScrollView
- //
- // Created by Za aa on 13-4-25.
- //
- //
- #include "MScrollView.h"
- //清空数组
- float
- new
- if
- //创建array,用于保存所有sprite
- //-----------------------------------------------
- //将省略的sprite添加进m_spriteArray 和 mscrollview中
- //----------------------------------------------
- //定义一个params变量,实际是一个指针,用于定位可变行参变量
- va_list
- //执行本宏后,params指向第一个可变信参,p_w_picpathSprite为最后一个确定行参
- //定义一个ccsprite 接收参数
- whiletrue
- if
- //添加进数组和层-----
- //去下一个值
- else
- break
- //清空
- //排列ccprite
- ////////////添加完成////////
- return
- else
- delete
- return
- bool
- //////////////////////////////
- // 1. super init first
- // if ( !CCLayerColor::init() )
- if
- returnfalse
- //开启触屏响应
- thistrue
- //添加显示容器
- this
- //修改响应区域,默认是全屏
- //修改显示区域,默认为全屏
- this
- //修改剪切区域,默认为全屏
- //默认回调函数为空
- returntrue
- void
- if
- return
- if
- this
- this
- //默认情况下,剪裁是禁用的
- //启用剪裁测试
- floatthis//当前layer缩放的倍数
- //获取缩放倍率
- thisthis
- //默认不设置Scissor的大小是整个视图的大小
- //子节点处理
- if
- int
- for
- if
- else
- break
- this
- for
- else
- this
- //禁用剪裁测试
- if
- this
- //
- voidfloatfloat
- //TODO: 载显示容器中排列精灵
- boolfloat
- //用于判读是否有元素
- ifreturnfalse
- ///////////修改各个元素的位置
- //初始化当前页
- //初始化总页数
- float
- float
- //获取一个中心点
- this
- this
- float
- forint
- //TODO: 滚动修正
- void
- int
- //判断移动的方向
- float
- if
- // 向左移动
- "zuo "
- else
- //向→移动
- "you"
- if
- "_page is : %d"
- " page is : %d"
- " curpage is : %d"
- //TODO: 拖动精灵,跟随手指移动改变位置
- voidfloat
- thisthis
- //TODO: 滚动到某一页的动画
- voidfloat
- ifreturn
- //获得当前页的精灵
- this
- //多移动一小段距离让sprite载正中间
- float
- //获取要到达的点
- this
- //计算移动到点的时间
- float
- float
- //滚动到指定点
- //页面滚动动画,moveto 动画
- voidfloat
- //如果是拖动就停止这个动作
- if
- this
- return
- ///////////////
- //创建移动动画
- //////////////
- //添加一个回调函数
- this
- //运行moveto动画
- //开启拖动判读
- this
- //updata,用于如果拖动就停止moveto 动作
- voidfloat
- if
- this
- return
- // // 添加一个回调函数,用于停止动画
- void
- // this->unschedule(schedule_selector(MoveToAnimation));
- this
- //消息注册
- void
- thisfalse
- bool
- ifthisreturnfalse
- //记录按下的点
- ifreturnfalse
- true
- "CCtouchBegan"
- //
- returntrue
- void
- "ccTouchMoved"
- ifthisreturn
- if
- false
- return
- //如果不是按下后移动
- if
- false
- else
- // CCLog("ccTouchMoved,x is %f::y is %f",x,y);
- void
- ifthisreturn
- iffalsereturn
- //判定是点击还是滑动,如果是点击执行点击函数,如果是滑动执行调整动画
- float
- if
- //触发点击事件
- "touchclick"
- else
- // 滑动纠正
- //触发滑动动画
- void
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。