cocos2d-x中CCScrollView纵向展示
最近写CCScrollView遇到很多问题,样式是竖直的类似tableview,在此记录下:
CCLayer* layer;
初始化scrollview内容器层
layer = CCLayer::create();
设置layer
layer->setPosition(ccp(, -));
初始化CCScrollView
scrollView=CCScrollView::create(CCSizeMake(, --));
scrollView->setPosition(ccp(,));
scrollView->setDelegate(this);
this->addChild(scrollView);
scrollView->setContainer(layer);
scrollView->setContentSize(CCSizeMake(, -));
scrollView->setDirection(kCCScrollViewDirectionVertical);
scrollView->setTouchEnabled(false);
校对和调整回滚
bool HandbookManager::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent )
{
CCPoint startPos = pTouch->getLocation(); return true;
} void HandbookManager::ccTouchMoved( CCTouch *pTouch, CCEvent *pEvent )
{
CCPoint currPos = pTouch->getLocation();
CCPoint prevPos = pTouch->getPreviousLocation(); CCLayer * info_listbg = (CCLayer*)scrollView->getContainer(); if(scrollView->boundingBox().containsPoint(currPos))
{
float y = info_listbg->getPositionY();
info_listbg->setPositionY(y+currPos.y-prevPos.y);
}
} void HandbookManager::ccTouchEnded( CCTouch *pTouch, CCEvent *pEvent )
{
CCPoint touchPoint = convertTouchToNodeSpace(pTouch);
touchPoint = ccpAdd(this->getPosition(), touchPoint);
float dx=fabs(pTouch->getStartLocation().x-pTouch->getLocation().x);
float dy=fabs(pTouch->getStartLocation().y-pTouch->getLocation().y); if(dx< && dy<){
this->touchPoint(touchPoint);
} CCSprite * s1 = (CCSprite*)layer->getChildByTag();//取出层上最上精灵元素
CCSprite * s2 = (CCSprite*)layer->getChildByTag(flagTag);//取出层上最下精灵元素元素 p1.y -= - layer->getPositionY();
p2.y -= - layer->getPositionY()+; //firstSpritePosition为层上最上面元素的position
//lastSpritePosition 为层上最下面元素的position float y1 = firstSpritePosition.y;
float y2;
if(lastSpritePosition.y>firstSpritePosition.y-scrollView->boundingBox().size.height)
y2 = lastSpritePosition.y;
else
y2 = firstSpritePosition.y-scrollView->boundingBox().size.height; if(p1.y <= y1){
CCActionInterval * action = CCMoveBy::create((y1-p1.y)/,ccp(,y1-p1.y));
layer->runAction(action);
}
if(p2.y >= y2){ CCActionInterval * action = CCMoveBy::create((p2.y-y2)/,ccp(,y2-p2.y));
layer->runAction(action); }
}
//取得scrollview中点击区域
CCRect HandbookManager::getRect(CCNode * pNode)
{
CCRect rc;
rc.origin = pNode->getPosition();
rc.size = pNode->boundingBox().size;
rc.origin.x -= rc.size.width*0.5 - layer->getPositionX();
rc.origin.y -= rc.size.height*0.5- layer->getPositionY(); rc.origin.x += ;
rc.origin.y += ;
return rc;
}
cocos2d-x中CCScrollView纵向展示的更多相关文章
- 如何在Cocos2D游戏中实现A*寻路算法(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- C#-WinForm-ListView-表格式展示数据、如何将数据库中的数据展示到ListView中、如何对选中的项进行修改
在展示数据库中不知道数量的数据时怎么展示最好呢?--表格 ListView - 表格形式展示数据 ListView 常用属性 HeaderStyle - "详细信息"视图中列标头的 ...
- 在 Windows Azure 网站中进行纵向扩展和横向扩展
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理 Byron Tardif 撰写. 当您开始一个新的 Web 项目,或者刚刚开始开发一般的网站和应用程序时,您可能希望从小处着手. ...
- 如何在cocos2d项目中enable ARC
如何在cocos2d项目中enable ARC 基本思想就是不支持ARC的代码用和支持ARC的分开,通过xcode中设置编译选项,让支持和不支持ARC的代码共存. cocos2d是ios app开发中 ...
- 如何在Cocos2D游戏中实现A*寻路算法(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- Android中软键盘展示、EditText焦点获取及windowSoftInputMode属性探究
2017-08-14 21:44:23 有很多中情况,分别展示. 1.Activity不做任何设置,布局使用LinearLayout 会自动滚动EditText之上的所有View,代码: <?x ...
- 将数据库中的内容展示出来并将某些value值转换成汉字
1.将数据库中的内容展示出来 前台代码未做改变,刚开始未显示的原因是因为 data-field 跟数据库不一样data-field 需要跟数据库中的一样才可以 2.将某些value值转换成汉字 在li ...
- vue项目中数学公式的展示
在这里有个mathjax的插件,可以将dom中的数学公式展示. 第一步安装mathjax npm install mathjax 安装完之后,你会在index.html中发现,已经引用了js文件,并且 ...
- Asp.Net Core Razor页面中使用echarts展示图形
Asp.Net Core Razor页面中使用echarts展示图形 要在Razor页面中使用echarts显示图形,主要问题点在于如何将数据传递给js文件. 1,下载安装echarts库文件 首先引 ...
随机推荐
- Kali Linux 1.0 新手折腾笔记(2013.3.21更新)
rootoorotor昨天折腾了 Kali Linux 1.0,把大概的配置过程记录下来,希望对想接触或使用Kali Linux的同学有所帮助. 请注意: 1.本文为面向新手的教程,没技术含量,没事瞎 ...
- 微信小程序 - 传参的几种方式
1. navigator navigator?第一参数&第二参数 .... 在传递页面的options可以拿到传递过来的参数 <navigator url='start-test/sta ...
- vue 父子通信过程
1.概述 每个 Vue 实例都实现了事件接口,即: 使用 $on(eventName) 监听事件 使用 $emit(eventName, optionalPayload) 触发事件 2.示例一(未传递 ...
- Oracle 使用TRUNCATE TABLE删除所有行
若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速.有效的方法.TRUNCATE TABLE 与不含 WHERE 子句的 DELETE 语句类似.但是,TRUNCATE TABLE ...
- 近期公共祖先(LCA)——离线Tarjan算法+并查集优化
一. 离线Tarjan算法 LCA问题(lowest common ancestors):在一个有根树T中.两个节点和 e&sig=3136f1d5fcf75709d9ac882bd8cfe0 ...
- mysql日期格式转化
select DATE_FORMAT( '20170701', '%Y-%m-%d'); 先挖坑
- 【WPF学习笔记】之如何把数据库里的值读取出来然后显示在页面上:动画系列之(六)(评论处有学习资料及源码)
(应博友们的需要,在文章评论处有源码链接地址,以及WPF学习资料.工具等,希望对大家有所帮助) ...... 承接系列五 上一节讲了,已经把数据保存到数据库并且删除数据,本讲是把已经存在的数据从数据库 ...
- 《Java设计模式》之构建者模式
概述: 构造者模式(Builder Pattern):构造者模式将一个复杂对象的构造过程和它的表现层分离开来.使得相同的构建过程能够创建不同的表示,又称为生成器模式. Bu ...
- bash学习记录
bash: 管理员: 提示符# 普通用户:提示符$ 环境变量 A=3(变量是指内存空间,A指的是内存空间的名称-变量标示符) PS1 \u@\h:\w\$ \u用户名 \h主机名 \w工作目录的 ...
- MySQL 事务1
本人应用的MySQL的版本为:5.6.22