cocos2dx+lua学习笔记:UIScrollView的使用

news2025/7/17 14:18:05
前言
本篇在讲什么

本篇简单介绍Lua篇cocos2dx中UIScrollView的相关内容
仅介绍简单的应用,仅供参考

本篇适合什么

适合初学Cocos2dX的小白
适合想要在Cocos2dx-lua中使用UIScrollView的人

本篇需要什么

Lua语法有简单认知
Cocos2dx-Lua有简单认知
Cocos2dx-Lua 3.15的开发环境

本篇的特色

具有全流程的图文教学
重实践,轻理论,快速上手
提供全流程的源码内容


★提高阅读体验★

👉 ♠ 一级标题 👈

👉 ♥ 二级标题 👈

👉 ♣ 三级标题 👈

👉 ♦ 四级标题 👈


目录

  • ♠ 简介
    • ♥ 滚动原理
  • ♠ 应用
    • ♥ 横向滚动列表
  • ♠ 附加功能
    • ♥ 隐藏滚轴
    • ♥ 回弹
    • ♥ 惯性
    • ♥ 自动滚动
    • ♥ 跳转位置
  • ♠ 推送
  • ♠ 结语


♠ 简介

UIScrollView是继承自Layer的容器,本质是可供开发者做水平或垂直方向的滚动容器


♥ 滚动原理

滚动原理很简单,从c++代码内可以看到,UIScrollView组件在初始化的时候创建了一个名为_innerContainer的Layout组件,所有的子控件均挂载在该组件下

void ScrollView::initRenderer()
{
    Layout::initRenderer();
    _innerContainer = Layout::create();
    _innerContainer->setColor(Color3B(255,255,255));
    _innerContainer->setOpacity(255);
    _innerContainer->setCascadeColorEnabled(true);
    _innerContainer->setCascadeOpacityEnabled(true);
    addProtectedChild(_innerContainer, 1, 1);
}

然后在点击事件内会根据点击前后的位置差来设置_innerContainer的位置,进而达到滚动的效果


♠ 应用

以下我们将通过几个简单的代码示例,来展示UIScrollView的功能


♥ 横向滚动列表

我们通过以下代码创建一个横向滚动列表,效果如下所示

local sv            = ccui.ScrollView:create()
local size          = cc.size(1280, 720)

sv:setContentSize(size)
sv:setAnchorPoint(0.5, 0.5)
sv:setDirection(cc.SCROLLVIEW_DIRECTION_HORIZONTAL)

for i=1,10 do
    local sp = cc.Sprite:create("dlrb.png")
    sv:addChild(sp)
    sp:setPosition(cc.p(i*350, size.height/2))
end

sv:setInnerContainerSize({width = 4000, height = size.height})
sv:setPosition(640,360)

self:addChild(sv)

在这里插入图片描述

要点1:通过ccui.ScrollView:create()来创建一个滚动列表的实例

要点2:通过setContentSize来设置滚动显示区域

要点3:通过setDirection来设置滚动方向,参数有两个

  • cc.SCROLLVIEW_DIRECTION_HORIZONTAL :水平滚动参数

  • cc.SCROLLVIEW_DIRECTION_VERTICAL :垂直滚动参数

要点4:通过setInnerContainerSize来设置滚动容器的范围,就是可滑动的范围,不设置滚不了


♠ 附加功能

我们已经可以创建最基础的滚动列表了,基类中还提供了很多额外的效果,例如回弹,自动滚动等,下面介绍几个常用的功能


♥ 隐藏滚轴

位于右侧和下方的滚动轴,默认是显示的,通过下面接口隐藏

sv:setScrollBarEnabled(false)

在这里插入图片描述


♥ 回弹

在滚动边界增加回弹效果

sv:setBounceEnabled(true)

在这里插入图片描述


♥ 惯性

在滑动很快的时候,松手,列表会按照惯性滑动一定距离,默认true,不想要可以设置成false

sv:setInertiaScrollEnabled(true)

在这里插入图片描述


♥ 自动滚动

官方提供了可以自动滚动的接口,包括不限于滚动到最左侧、最右侧、最上、最下、固定进度等

virtual void scrollToBottom(float timeInSec, bool attenuated);

virtual void scrollToTop(float timeInSec, bool attenuated);

virtual void scrollToLeft(float timeInSec, bool attenuated);

virtual void scrollToRight(float timeInSec, bool attenuated);

virtual void scrollToTopLeft(float timeInSec, bool attenuated);

virtual void scrollToTopRight(float timeInSec, bool attenuated);

virtual void scrollToBottomLeft(float timeInSec, bool attenuated);

virtual void scrollToBottomRight(float timeInSec, bool attenuated);

virtual void scrollToPercentVertical(float percent, float timeInSec, bool attenuated);

virtual void scrollToPercentHorizontal(float percent, float timeInSec, bool attenuated);

virtual void scrollToPercentBothDirection(const Vec2& percent, float timeInSec, bool attenuated);

下面为自动在2s内滚到最右侧,参数attenuated表示力道逐渐衰减

sv:scrollToRight(2, true)

在这里插入图片描述


♥ 跳转位置

官方提供了可以直接跳转到某个位置,包括不限于跳转到最左侧、最右侧、最上、最下、固定进度等

virtual void jumpToBottom();

virtual void jumpToTop();

virtual void jumpToLeft();

virtual void jumpToRight();

virtual void jumpToTopLeft();

virtual void jumpToTopRight();

virtual void jumpToBottomLeft();

virtual void jumpToBottomRight();

virtual void jumpToPercentVertical(float percent);

virtual void jumpToPercentHorizontal(float percent);

virtual void jumpToPercentBothDirection(const Vec2& percent);

下面代码,滚轴会跳转到最右侧

sv:jumpToRight()

在这里插入图片描述


♠ 推送

  • Github
https://github.com/KingSun5

♠ 结语

还有不少其他额外功能,如果感兴趣,自己去扒拉一下吧,若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

👉 本文属于原创文章,转载请评论留言,并在转载文章头部著名作者出处👈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaSE】复习(基础)

文章目录基础1.1. public class 和 class1.2. 字面量1.3. 变量的引出1.4. javadoc的使用1.5. 转义字符1.6. 逻辑运算1.7. 用户键盘输入1.8. switch1.9. for循环1.10.方法的调用1.11.break return1.12.方法重载(overload)1.13.成员变量中的实例变量1.14.方…

计算机网络你都懂了吗

文章目录一、计算机网络的定义简单定义通用定义二、计算机网络通信过程三、什么是网络协议(Protocol)四、网络协议组成及功能一、计算机网络的定义 简单定义 计算机网络是一些相互连接的、自治的计算机系统的集合。 通用定义 将处于不同位置并具有独…

ChatGPT?听说Biying把它下架了

ChatGPT被玩疯了,开始放飞自我 ChatGPT版微软必应上线不到10天…就被网友玩坏了 先说这个词,放飞自我,什么东西才会放飞自我? 人放飞自我,人?你确定是人? 所以让我们来把上面的句子改写一下。…

怎样激发读者好奇心?短视频营销之场景化

目录 激发读者好奇心?四个小技巧帮你搞定 1.省略法 2.欲言又止法: 3.问句法:就是用疑问的形式引起别人的好奇。 4.反差法 选择合适的主题。 利用场景化效果 使用滤镜。 如何提高用户的留存率。 1、设置一个有趣的话题。 2、用好道具。 3、多用竖屏。 什…

适合python游戏开发的库你知道几个?

python游戏开发的库 01 PyGame 官网: https://www.pygame.org/docs/ 概述: Pygame 是一组专为编写视频游戏而设计的 Python 模块。 它在优秀的 SDL 库之上添加了功能。这允许您使用 python 语言创建功能齐全的游戏和多媒体程序。Pygame具有高度的可…

即将报名,如何选择软考考试科目?

软考全称为计算机技术与软件专业技术资格(水平)考试 是职业资格、专业技术资格考试,也是职称考试。 计算机软件资格考试设置了27个专业资格,涵盖5个专业领域, 3个级别层次(初级、中级、高级) …

ubuntu20.04安装conda

1)conda与miniconda 任何语言的包、依赖和环境管理---Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C, FORTRAN。Conda 是一个运行在 Windows、macOS 和 Linux 上的开源包管理系统和环境管理系统。Conda 可以快速安装、运行和更新包及其依赖项。Conda 可以轻松地在本地计…

关于高并发场景和进程线程协程的一些总结

1、IO复用和线程池哪个好?应用场景? IO复用就是一个线程处理多个客户端连接。如果自己实现的话,就是要不断轮询每个客户端连接,看看有没有事件发生(数据到达),即使可以用非阻塞的read函数&…

基于java+sql+servlet的金融借贷管理系统mysql数据源

基于javasqlservlet的金融借贷管理系统 一套基于基于JavaWeb实现的金融借贷系统 或 P2P金融管理系统 或 小额贷款系统,详细介绍了金融借贷系统的实现,包括:1.项目介绍2.环境搭建3.系统功能4.技术实现5.项目运行6.功能演示以通俗易懂的方式&a…

浏览器自动化框架沦为攻击者的工具

5月27日消息,安全公司Team Cymru的研究人员表示,越来越多的威胁参与者正在使用免费的浏览器自动化框架作为其攻击活动的一部分。 研究人员表示,该框架的技术准入门槛故意保持在较低水平,以创建一个由内容开发者和贡献者组成的活跃…

算法训练营 day55 动态规划 买卖股票问题系列3

算法训练营 day55 动态规划 买卖股票问题系列3 最佳买卖股票时机含冷冻期 309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode) 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下…

JavaScript高级 Proxy Reflect

1. Proxy 1. 监听对象的变化 有一个对象,我们希望监听这个对象中的属性被设置或获取的过程 我们可以通过 Object.defineProperty 来实现 const obj {name: "why",age: 18,height: 1.88 }// 需求: 监听对象属性的所有操作 // 监听属性的操作 // 1.针对…

MySQL中的一些非常实用的函数、语法

前言我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。1.group_concat在我们平常的工作中,使用group by进行分组的场景,是非常多的。比如想统计出用户表中&#x…

Qt图片定时滚动

目录参考结构PicturePlay.promain.cpppictureplay.hpictureplay.cpppictureplay.ui效果参考 Qt图片浏览器 QT制作一个图片播放器 Qt中自适应的labelpixmap充满窗口后,无法缩小只能放大 可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来或者打开文件…

LDO 芯片烫手,问题出在哪里?

设计失误的一个电路,该电路是数字电路的电源,为图方便对12V直接通过线性电源芯片降压到5V: 图1:线性电源降压12V转5V 几块电路板打样好后,测试均发现AMS1117-5.0芯片烫手,负载电流100mA多,也满…

vim命令快捷键

1.概述vim在linux系统下代码补全、编译及错误跳转等方便编程的功能丰富,被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。vim 是一个…

从零开始的机械臂yolov5抓取gazebo仿真(环境搭建篇中)

yolov5运行环境搭建 本篇主要讲如何搭建yolov5运行环境,以及一些需要注意避坑的重要知识点。anaconda与显卡驱动先装后装是没有什么影响的,关键在于,不能将显卡驱动以及cuda装在虚拟环境中。这里介绍一下博主的电脑环境为i7九代ubuntu18.04r…

移动办公时代,数智化平台如何赋能企业管理升级?

在传统的办公模式下,企业组织办公不仅时效低,周期长、成本高,且各办公系统相互独立。随着社会经济的发展,人们的工作生活变得多样化,对于办公的需求也越来越多,存在明显弊端的传统办公模式已不能满足企业对…

基于Mirai框架的Chatgpt_qq机器人搭建

参考项目:https://github.com/lss233/chatgpt-mirai-qq-bot by:雪月三十 采用docker方式搭建 方便快捷 不建议放在云服务器上 本地要有代理才行(也可以自行配置代理) 以下操作均是在有代理的情况下进行的 克隆项目 git clone ht…

狐狸优化算法(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…