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

新的一年,节目组继续勤俭节约

引言

Cocos中通过重写源码实现循环PageView

大家好,有小伙伴私信我:

问得好,下次还要

有没有办法实现循环的PageView列表的方法呢

本文将介绍一下Cocos中通过重写源码实现循环PageView

本文源工程可在文末阅读原文获取,小伙伴们自行前往。

1.什么是PageView

PageView 是一种页面视图容器.

我们接着来看看Cocos中的PageView

2.Cocos的PageView

PageView组件。

官方

我们仔细看下编辑器PageView主要有以下可视选项:

  • InertiaBrake,是否开启滚动惯性和开启惯性后、在用户停止触摸后滚动多快停止,0表示永不停止,1表示立刻停止。

  • ElasticBounce Duration,是否允许滚动内容超过边界,并在停止触摸后回弹、回弹持续的时间,0 表示将立即反弹。

  • ContentIndicator,可滚动展示内容的节点、页面视图指示器组件。

  • Direction,页面视图滚动类型,包括水平和垂直。

  • PageEvents,滚动视图的事件回调函数。

下面一起来看看循环PageView的实现原理

3.循环PageView的实现原理

我们直接来看效果:

  • 在最后一页向后翻页时回到第一页。

重头再来

  • 在第一页向前翻页时跳到最后一页。

直接结束

下面一起来看看如何通过重写源码实现循环PageView

4.实现循环PageView

1.环境

引擎版本:Cocos Creator 3.8.1

编程语言:TypeScript

2.资源准备

本次效果节目组直接使用官方提供的组件,效果虽然不好看,但是靠谱

还是比较贴心的

结构大概如下。

简洁但不简单

仔细翻了一下,官方组件没有支持循环滚动,我们来稍稍修改一下。

翻不过去了

3.编写代码

首先我们先找到官方的PageView源码。

笔者的目录在
C:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\cocos\ui

想看就看

小伙伴们可以通过CocosDashBoard,跳转到引擎目录后再寻找。

一步定位

通过源码可以看到PageView组件继承ScrollView组件。

妙啊

我们直接找到实现翻页的核心源码(为了方便大家阅读,加了一点点注释)。

/**
 * 自动滚动到页面的方法。
 * 如果存在弹性回弹效果,将启动弹性回弹并根据边界的情况调整当前页面索引。
 * 如果没有弹性回弹效果,根据触摸滑动的方向和速度来判断是否切换到相邻页面,并在合适的情况下执行页面切换。
 * 最终会根据计算得到的目标页面索引,使用 scro
  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
源码KIPageView,UITableView 很强大,可是只能竖向滚动;UICollectionView 可以解决各种布局难题,但是稍显复杂,对于一些简单的需求,有点杀鸡用牛刀的感觉。 在 iOS6 以前,还没有 UICollectionView,为了实现横向滚动的 UITableView,只有自己动手写组件。为了达到和 UITableView 差不多的效果,就得先弄清其内部实现机制是怎么回事。 在渲染 View 的时候,是很耗系统资源的,如果创建大量的 View, 系统运行将变得异常缓慢,甚至导致内存耗尽。但是,在实际应用中,我们难免会遇到大量的数据需要显示,如果每显示一个数据,我们都创建一个 View,那应用程序的体验将相当糟糕。所以 Apple 为 iOS 开发者提供了 UITableView,Google 为 Android 开发者提供了 ListView。 简单来讲,UITableView 采用复用机制,其只会显示其可见区域内的 UITableViewCell。我们在滑动的过程中,当超出 UITableView 可见区域的 Cell,将会从 UITableView 中移除,并加入回收池中以作复用。当 UITableView 需要显示新的 Cell,会先从回收池中查找是否有相应的 Cell 可以重用(通过 dequeueReusableCellWithIdentifier:)。如果有,则直接将其重新显示;如果没有,则创建新的 Cell。这样一来,就可以避免因创建过多的 View,导致内存耗尽的尴尬情况。 了解了其内部的运行原理,我们也可以实现一个自己的 UITableView。 很常见的一个应用场景——显示图片:如果显示一张图片,我们用一个 UIImageView 足矣,如果要显示多张图片,并且可以左右滚动,最简单的办法是用一个 UIScrollView 包含多个 UIImageView, 但是这样带来的后果则是,如果图片数据量较大,那这个程序根本没有办法正常使用。如果我们还需要实现无限循环滚动,那这个解决方案肯定是不行的。所以这时候,就得我们自己实现一个 UITableView。 最开始,我写了一个组件叫 KIFlowView实现了上面讲的需求,但是都是 iOS5 时代的产物了,难免过于陈旧。在后续的工作中也发现,类似的需求其实挺多的,比如左右滑动的 View,如网易新闻客户端,可以左右滑动,在不同的新闻栏目之间进行切换;有时候我们也需要实现一些 Tab,如果 Tab 的项目比较多,也需要考虑复用的问题,所以决定重新写一个增强组件,作为其替代品,所以就产生了 KIPageView。 测试环境:Xcode 6.2,iOS 6.0 以上
Cocos2d-x是一个开源的跨平台游戏引擎,它可以帮助开发者轻松地创建2D和3D游戏,并且支持多种平台,如iOS、Android、Windows和Web等。以下是使用Cocos2d-x实现跑酷游戏的一些源码方案: 1. 游戏场景设计:使用Cocos2d-x的场景管理器来创建游戏场景,并设置游戏背景、角色和障碍物等元素。可以使用Tiled Map Editor等工具来绘制游戏地图,并将其导入到Cocos2d-x中。 2. 角色控制:利用Cocos2d-x的动画系统,加载角色的动画帧序列,使其具备奔跑、跳跃、下滑等动作。通过监听用户的触摸或按键事件,实现角色的移动控制。 3. 游戏碰撞检测:为障碍物、道具等游戏元素添加物理碰撞组件,并使用Cocos2d-x的碰撞检测功能,判断角色与障碍物是否发生碰撞。如果发生碰撞,可以触发游戏失败的逻辑。 4. 分数计算:在游戏中设定一定的难度和规则,当角色成功跳过某个障碍物或获得道具时,增加相应的分数。通过计数器来统计分数,并实时更新到游戏界面上。 5. 游戏音效:利用Cocos2d-x的音频模块,添加游戏所需的音效和背景音乐。可以在角色跳跃、碰撞等事件发生时,触发相应的声音效果,增加游戏的可玩性。 通过以上几个方面的设计,使用Cocos2d-x实现一个跑酷游戏源码就可以完成了。当然,还可以根据个人的游戏需求进行更多的功能扩展和优化,使游戏更加丰富和有趣。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亿元程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值