cocos2dx-CCTableView或CCScrollView之滑动翻页实现

CocosCreator之翻页容器(PageView)和滚动容器(ScrollView)的滚动滑动事件处理(一) 前言:有的时候,我们需要一个既能翻页又能上下滑动、列表里的item还可以点击的界面,这时候就会遇到能滚动列表和滑动翻页的矛盾,以下为简单的处理方法。 一、在pageView里面的页面里面添加ScrollView: 为了方便区分,图中白色的背景是pageView的,说粉不粉说红又不红的颜色,是翻页容器page_1的背景色,蓝色的是ScrollView的背景色,列表里面的item的背景色为白色(下边... 阅读详情

scrollview //CScrollViewTest.cpp

//CScrollViewTest.h


//CCLayer *m_pLayer;

//CCScrollView *m_pScrollView;

//CCPoint m_touchPoint;

//bool m_isMoving;

//void adjustScrollView();

CScrollViewTest::CScrollViewTest()
:m_isMoving(false)
{
	  m_pLayer= CCLayer::create();
	  char helpstr[30] = {0};
	  for (int i = 1; i <= 4; ++ i)//页背景
	  {
		   memset(helpstr, 0, sizeof(helpstr));
		   sprintf(helpstr,"bg_%02d.png",i);
		   CCSprite *pSprite = CCSprite::create(helpstr);
		   pSprite->setPosition(ccp(visibleSize.width * (i-0.5f), visibleSize.height / 2));
		   m_pLayer->addChild(pSprite);
	  }
	  m_pScrollView = CCScrollView::create(CCSizeMake(1024, 640), m_pLayer);
	  m_pScrollView->setPosition(CCPointZero);
	  m_pScrollView->setContentOffset(CCPointZero);
	  m_pScrollView->setDelegate(this);
	  m_pScrollView->setDirection(kCCScrollViewDirectionHorizontal);
	  m_pLayer->setContentSize(CCSizeMake(1024*2, 640));
	 
	  this->addChild(m_pScrollView);
}

bool CScrollViewTest::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
 m_touchPoint = pTouch->getLocation();
 return true;
}

void CScrollViewTest::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
 if (!m_isMoving) {
  m_isMoving = true;
 }
}

void CScrollViewTest::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
 if(m_isMoving){
  adjustScrollView();
  return;}
}

void CScrollViewTest::ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
{
   if(m_isMoving) adjustScrollView();
}

void CScrollViewTest::adjustScrollView()
{
	 // 关闭CCScrollView中的自调整
	     m_pScrollView->unscheduleAllSelectors();
	
	  INT32 i32pageNum =  4;//翻页数
	
	  int x = m_pScrollView->getContentOffset().x;
	
	  BOOL bOffline = FALSE;
	  if( x <= (-1)*( (i32pageNum-1)*600+300) )
	   bOffline = TRUE;
	
	
	 int offset = (int) x % (int)600;
	 // 调整位置
	 CCPoint adjustPos;
	 // 调整动画时间
	 float adjustAnimDelay;
	
	 if (offset < -600*0.5 && !bOffline ) {
	  // 计算下一页位置,时间
	  adjustPos = ccpSub(m_pScrollView->getContentOffset(), ccp(600 + offset, 0));
	  adjustAnimDelay = (float) (600 + offset) / 800;
	 }
	 else {
	  // 计算当前页位置,时间
	  adjustPos = ccpSub(m_pScrollView->getContentOffset(), ccp(offset, 0));
	  // 这里要取绝对值,否则在第一页往左翻动的时,保证adjustAnimDelay为正数
	  adjustAnimDelay = (float) abs(offset) / 800;
	 }
	
	 // 调整位置
	 m_pScrollView->setContentOffsetInDuration(adjustPos, adjustAnimDelay);
}

tableview // CTableViewTest.cpp  //CCPoint m_TouchBeginPos;

CTableViewTest::CTableViewTest(void)
{

	this->setTouchEnabled(TRUE);
	m_pTableView = CCTableView::create(this, CCSizeMake(1024, 640));
	m_pTableView->setDirection(kCCScrollViewDirectionHorizontal);
	m_pTableView->setPosition(ccp(CCPointZero));
	m_pTableView->setDelegate(this);
	this->addChild(m_pTableView);
	m_pTableView->reloadData();
}

bool CTableViewTest::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
	m_TouchBeginPos = pTouch->getLocation();
	return true;
}

void CTableViewTest::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
	CCPoint EndPos =  pTouch->getLocation();

	if( EndPos.x == m_TouchBeginPos.x )
		return;

	m_pTableView->unscheduleAllSelectors();

	INT32 i32PagNum =  2;

	int x = m_pTableView->getContentOffset().x;

	bool bOffline = false;
	if( x <= (-1)*( (i32PagNum-1)*600+300) )
		bOffline = TRUE;

	int offset = (int) x % 600;

	// 调整位置   
	CCPoint adjustPos;
	// 调整动画时间   
	float adjustAnimDelay;

	if (offset <= -300 && !bOffline ) { 
		// 计算下一页位置,时间
		adjustPos = ccpSub(m_pTableView->getContentOffset(), ccp(600 + offset, 0));  
		adjustAnimDelay = (float) (600 + offset) / 1000;
	}  
	else {  
		// 计算当前页位置,时间   
		adjustPos = ccpSub(m_pTableView->getContentOffset(), ccp(offset, 0));  
		// 这里要取绝对值,否则在第一页往左翻动的时,保证adjustAnimDelay为正数   
		adjustAnimDelay = (float) abs(offset) / 1000; 
	}   
	// 调整位置
	m_pTableView->setContentOffsetInDuration(adjustPos, adjustAnimDelay);  

}



 

CocosCreator 之翻页容器(PageView)和滚动容器(ScrollView)的触摸冲突处理 在开发的时候,我们需要一个既能翻页又能上下滑动的界面,这时候就会遇到翻页容器和滚动容器触摸冲突的情况。以下是博主这里的解决方法。可以在上图中红不红、粉不粉的区域左右滑动。查了一下,是因为两者的触摸冲突了。区域(上图白色区域)滑动,在不做任何处理前,在。 阅读详情

相关推荐

【100个Cocos实例】通过重写源码实现循环PageView

PageView 是一种页面视图容器.我们接着来看看Cocos中的PageView本文源工程可通过私信获取。在哪里可以看到如此清晰的思路,快跟上我的节奏!关注我,和我一起了解游戏行业最新动态,学习游戏开发技巧。我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。AD:笔者线上的小游戏《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》大家可以自行点击搜索体验。实不相瞒,想要个赞和在看!请把该文章分享给你觉得有需要的其他小伙伴。100个Cocos实例。

lsw_Cs的博客 1763

怎么在安卓布局里设置滚动字体_cocos creator项目实战【滚动的数字】教程

待完善,实现多位数的滚动效果)x的ccc引擎的label组件已经自带简单的数字滚动效果,准备自定义字体配合label,详情可查看官方的吃星星案例,下面主要讲自己代码实现的滚动效果自己代码实现的滚动效果1、 准备0~9的素材2、 滚动的数字,数字需要连接起来,可是我们只能显示一个数字范围,所以我们要把其他的数字裁剪掉3、 9—>0的时候,我们需要9-->0,所以需要2个0~9相连接4、 ...

weixin_39851048的博客 236

cocos2d-x 2.x 版本实现一个翻页控件

cocos2d-x 没有翻页控件,

au2008127104的专栏 2011

cocos2dx基础篇(16)——滚动视图CCScrollView

【唠叨】 本节要讲讲滚动视图CCScrollView,相信玩过手游的同学们应该对它不会陌生吧。例如:愤怒的小鸟的游戏场景里大大的地图,手机的屏幕肯定无法完全显示的,所以需要通过触摸滚动才能显示大地图的其他区域;排行榜中上下滑动来查看其他玩家的排名;以及手机上主界面左右滑动来切换界面等等。如下图为屏幕滚动,切换手机的界面。【致谢】http://bl...

weixin_34007020的博客 612

LabVIEW通过ActiveX控件实现与三菱FX5U PLC的高效数据交互

本文详细介绍了如何利用LabVIEW的ActiveX控件,通过三菱官方MX Component工具包实现与FX5U PLC的高效数据交互。文章从环境配置、控件插入到实战代码解析,系统讲解了连接建立、数据读写及资源释放的全流程,并提供了关键的避坑指南,帮助工程师快速构建稳定可靠的上位机通讯系统。

weixin_29197051的博客 373

mysql笔记:23. 在Mac上安装与卸载MySQL

MySQL对Mac电脑的适配十分强大,再加上Mac本身就是Unix操作系统演化而来的,所以在Mac上安装MySQL的方式有多种。常见的方法有如下三种:DMG、brew、TAR。介绍这些方法前,我们先了解下MySQL安装文件的下载。

斌斌(Java) 2249

[cocos2dx]让CCScrollView支持分页

做过 IOS 开发的朋友, 肯定知道 UIScrollView 有一个 isPaged 属性. 当设置其为 true 的时候, 滑动会自动分页. 即, 每次滑动之后, 会停止在整页的位置. 当开始介入 cocos2dx 开发的时候, 却发现跟 UIScrollView 接口十分相似的 CCScrollView 却没有这个分页属性. 于是手动实现了一个.     博客: http:/

超级方的专栏 893

数字蓝牙功放

数字蓝牙功放(TPA3110+BK8000L),基于D类数字功放芯片TPA3116蓝牙功放,HIFI级带滤波15Wx2蓝牙数字功放,支持有线和蓝牙两种音源输入

runweipa的博客 1419

基于cocoStudio的UIListView的可以左右滑动翻页的ListView

//WidgetSlideListView.h class WidgetEaseInListView : public cocos2d::gui::UIListView { public: static WidgetEaseInListView* create(cocos2d::gui::UIListView* pAnthor=NULL); void doEaseIn(bool ...

weixin_30342209的博客 193

Vercel静态站被墙别慌!手把手教你用Cloudflare免费CDN+域名解析搞定DNS污染

本文详细介绍了如何利用Cloudflare免费CDN和域名解析解决Vercel静态网站遭遇DNS污染的问题。通过诊断DNS污染、设计Cloudflare解决方案架构、实战配置步骤以及高级调优技巧,帮助用户快速恢复站点访问并提升防护能力。

weixin_27442001的博客 677

GEE案例教程:融合Sentinel-1 SAR数据、Sentinel-2光学影像和WorldPop人口数据,构建完整的洪水监测与影响评估工作流

本文介绍了一个专为巴基斯坦哈扎拉分区设计的洪水监测系统,该系统整合了Sentinel-1 SAR数据、Sentinel-2光学影像和WorldPop人口数据等多源遥感数据。系统通过VV极化SAR数据的水体提取算法(阈值-13dB)实现洪水范围监测,结合10米分辨率的光学影像进行可视化验证,并利用100米分辨率人口数据评估受灾人口。系统提供完整的技术实现,包括研究区加载、遥感数据处理、日期选择界面和洪水变化检测等功能模块,为灾害应急响应提供科学依据。

此星光明博客 191

Cocos2d-x使用PageView和ScrollView实现游戏首界面

需求及分析 竖屏游戏,首界面有多页需要左右滑动翻页,每页需要上下滑动显示内容,且两个方向的滑动不能相互干扰。(参考效果:《部落冲突:皇室战争》) 左右滑动翻页选择PageView组件,上下滑动选择ScrollView界面。主要问题在于两者之间滑动不能相互干扰。 ScrollView是嵌套在Pa...

chenyexun4686727的博客 452

C#上位机+YOLOv8实战:摄像头/视频流实时目标检测(工业级优化+完整可运行源码)

纯C#实现,无Python依赖,适配工业工控机部署;工业级优化:解决帧率、内存、鲁棒性三大核心问题;代码完整可复用,支持摄像头/视频流/RTSP多源检测;避坑指南覆盖开发中90%的常见问题,降低落地成本。相较于传统方案,该方案兼顾实时性与易用性,成本仅为商用视觉库的1/10,可快速落地到工业质检、安防、物流等场景。后续可拓展方向包括:自定义数据集训练、GPU加速推理、工业通信(PLC/串口)对接等。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 733

COCOS滚动层显示图片

在init里面写上 m_RulePlaySprite = cocos2d::extension::ScrollView:: create(Size(890, 440));//显示的宽度和高度 m_RulePlaySprite->setAnchorPoint(Point(0, 0)); m_RulePlaySprite->setPosition(190, 60);//显示

记录一些事情 421

RAG面试内容整理-7. 多轮问答与上下文拼接策略

在对话式的RAG应用中,多轮问答需要处理上下文相关性问题:用户的提问往往依赖于之前的对话内容。为正确理解用户每一轮的问题,系统需要保留和传递对话历史信息。

不务正业的猿 377

在STM32F103RBT6微控制器上利用USB虚拟Com端口技术,高效实现ADC数据传输:详细操作步骤与示例代码解析

以上就是在STM32F103RBT6上使用USB虚拟Com端口实现ADC数据传输的全部内容。虽然过程中有很多步骤和细节需要注意,但只要按照步骤来,理解每一段代码的作用,就完全可以掌握这个过程。在实际应用中,我们可能需要根据实际需要修改一些代码,如调整ADC的参数,改变数据的处理方式等。但是,只要理解了这个过程,我们就可以很灵活地进行修改。希望这篇文章对你有所帮助。如果你有任何疑问,欢迎在评论区留言,我会尽我所能进行解答。

qq_38334677的博客 1168

android翻页效果listview,采用cocos2d-x lua 的listview 实现pageview的翻页效果之上下翻页效果...

--翻页滚动效果local function fnScrollViewScrolling( sender,eventType)-- bodyif eventType == 10 thenlocal bposX = sender:getPercentage()*100_bPosX = bposXendif not _bPosX thenreturnendprint("-------bposX=",_...

weixin_42629522的博客 665

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Cocos Creator实现滑动到下一页

【代码】Cocos Creator实现滑动到下一页。

weixin_63883707的博客 537

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【CocosCreator入门】CocosCreator组件 | PageView(页面视图)组件

Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中的PageView组件是一种用于实现分页视图效果的重要组件。它可以让我们在游戏中实现各种分页视图效果,例如引导页、轮播图等。

看世界,也找自己 4696

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

用Cocos Creator 模拟书本翻页效果

1.简介 本文主要探讨了如何使用CocosCreator来模拟书本翻页效果,分别介绍了通过使用贝塞尔曲线和verlet积分算法来模拟书页底边在翻页过程中的弯曲形变,最后通过自定义assembler传入更多的顶点来将原本的书页纹理渲染成弯曲后的样子以达到模拟翻页的效果。 由于篇幅限制,本文没有包含相关数学公式的具体推导过程,有兴趣的同学可以自行上网搜索。 Demo引擎版本:2.3.1 Demo地址: 首先展示一下最终实现的效果: 2.问题分析 书页在翻动的过程中会产生一定的弯曲形变,这就意味着在每一帧中,我

weixin_43365995的博客 2411

cocos2dx ListView 无限循环页

经过几天的修改, 终于把 cocos2dx 的listview 改成了 无限循环方法, 之前看到一个朋友用 动态创建和删除的方法实现, 正所谓条条大路通罗马, 我的方法是提前确定“页面长度”和“子项长度“, 得出容器长度, 然后提前创建出所有”子容器“(个数加一为了划屏效果), 然后在下划时上端整个超过后, 把其补充到尾端, 反之逻辑相反即可,  将”子容器“所指指针重新排序即可。

highhigh_hi的博客 2377

Cocos2dx:实现游戏关卡ScrollView方式(二)

今天我们实现关卡的选择是使用ScrollView这个类。当然还有一些其他的方法,比如使用page view也可以,见上文。先说下整体的思路,ScrollView这个类是继承自CCLayer的,本身的触摸事件有些bug,所以网上一般将这个层的touch事件处理为false,而使用它的父节点来处理触摸事件,我们也是采用这个做法。先定义一个LevelScene类,将ScrollView加入进来,然后再定

Alostz 4022

cocos creator使用scrollView实现循环滚动效果

当前仅适用于自低向上滚动,自上向下也简单,判断items[items.length-1]的位置即可eachToY=-1 ,同时,自左向右等也一样,将相对应的Y改成x就可以了。暂时没这需求,不写这么多了 关键性代码,如下,在组件onload时记录下scrollView绑定的content的y值放在this.lastContentPosY中 update: function (dt) { ...

tjlog的专栏 7677

cocos2dx TableView 在手机上滑动很慢和优化(点按钮不能滑动和跳到指定位置等)

修改CCScrollview.cpp中的 BOUNCE_BACK_FACTOR #define BOUNCE_BACK_FACTOR 0.05f

CV战士的日常 2307

cocos2d-x - 滚动列表(类似天天酷跑道具菜单)详解(CCScrollView的使用)

今天要写一个滚动列表功能,类似下面这样。(图片资源都是自己从天天酷跑里面抠的,仅用于学习方便) 首先,这样一个列表就和iOS里面的UITableView没什么两样,当然,Android中肯定也存在类似的控件。 在cocos2d-x引擎中参照ios中的UITableView实现了一个叫做CCTableView的类,用于创建列表,对于熟悉ios程序设计的人来说,这个内容应该是很好理

Colin丶 8800
上一篇: cocos2dx-CCTableView滚动列表 之CCMenuItemToggle 多选实现
下一篇: html之简单网页制作一
DesDestroy
博客等级 码龄14年 84粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值