游戏开发36课 cocoscreator scrollview优化
在cocoscreator内,ScrollView控件封装的挺完美的了,不过对于一些对性能要求比较高的场景,会存在问题,以top100排行榜排行榜举例子
1、应用卡顿甚至崩溃
按照官方用例使用ScrollView,插入100个玩家的item,理所当然的需要new 100次item。根据设备不同,这一过程可能持续数秒甚至导致程序崩溃
2、多余的内存占用
用户永远只看得到其中10个以下的item,其余的90个item将会被mask遮挡在外面,但是每个item依然会产生性能消耗。
一、优化思路分析
假设一个ScrollView内,用户同时最多可以看到8个item,那么理论上,我们只需要建立8个Item,当触发滑动切换Item展示的时候,将移动到界面外item的数据设置成新Item的数据。
如此一来,既不用担心同一时间new 100个对象会导致卡顿和崩溃,因为我们最多只new 8个item,也不用担心这除了这8个item会有额外的性能消耗了。
item重复利用
二、代码实现思路
1、确定scroll内最大item数量
// 这个scorllview的长度 ,除以 单个item的长度,得出可以容纳的item数量
// 向下取证,再+2个item,为真实的再大展示数量
// 因为可能存在情况,content在中部显示,底部、顶部两个item各显示一半
2、自己计算item的大小和位置
3、监听scrollEvents事件
至此scrollEvents的处理代码已经说明完毕,
上面的内容比较多,还是针对一些比较重要的点说明下
a、scrollEvent事件内,根据记录前后两次坐标差值,判断正在上滑还是下滑
b、如果下滑,并且content坐标为0,说明已经滑倒了顶部,
如果上滑,并且content坐标 大于最底部坐标,说明已经滑倒了底部,
此时只要inputData还有数据,则取出数据插入item
c、插入item的时候,
如果顶部插入,则拿最底部的item放到最顶部
如果底部插入,则拿最顶部的item放到最底部
三、你有足够的理由使用这个方案
我推荐你使用我的方案去实现scrollview的性能优化,理由如下
1、核心逻辑,只会在滑动的时候触发,甚至我们可以再加上条件if (this.__scrollView.isScrolling(),让核心逻辑只在用户手动拖动scorllview的时候触发,这样scrollview回弹的时候不会浪费性能去计算核心逻辑
我当初打算做scrollview优化的时候,看过源码之后还是决定按自己思路写,因为首先基本所有scrollview的优化组件是通过监听update事件完成的,update事件是每时每刻都执行的,其性能可能比优化前更差。而且组件代码动辄上1、2千行,维护成本实在过于庞大。我希望能够以简单、可读性高的代码,去解决一些技术难点。
2、由于layout的存在,我们减少了一些核心代码的编写,比如item坐标的维护,content大小的维护,对于代码维护是十分有帮助的,并且由于layout是引擎自带组件,我们可以信任它的稳定性。
3、由于在触顶和触底的时候,插入item的同时,会刷新content的坐标,
原本在触顶或触底导致不能继续滑动,但是在刷新坐标后,会多出一个itemDistance的滑动距离,所以不会造成scorllview触发边界回弹的现象,
而scrollEvents因为是毫秒级的,所以整个滑动是顺畅的
4、上述方案设计出的脚本使用及其简单,只需要将脚本放置于scrollview的节点之上,并且绑定item的prefab
相关文章:
ESLlint重大更新后,使用旧版ESLint搭配Prettier的配置方式
概要 就在前几天,ESLint迎来了一次重大更新,9.0.0版本,根据官方文档介绍,使用新版的先决条件是Node.js版本必须是18.18.0、20.9.0,或者是>21.1.0的版本,新版ESLint将不再直接支持以下旧版配置(非扁平化…...
一道关于顺序栈的笔试题:判断一个包含(和)的字符串是否有效
若有一个包括 ( 和 ) 的字符串string ,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件: A.左括号必须用相同类型的右括号闭合。 B.左括号必须以正确的顺序闭合。 C.每个右括号都有一个对应的相同类型的左括号。 思路图:参考代码: b…...
React 《入门案例》
一、案例二、创建项目 npm init vite@latest # 选择react # 删除不必要的css,文件等 # 安装依赖classnames、sass、uuid、dayjs、lodash npm i -S classnames # 处理className属性 npm i -S uuid #生成uuid npm i -S dayjs # 日期处理 npm i -S lodash # 操作数组 npm i -D…...
MemFire案例-政务应急物联网实时监测预警项目
客户背景 党的十八大以来,中央多次就应急管理工作做出重要指示:要求坚持以防为主、防抗救相结合,全面提升综合防灾能力;坚持生命至上、安全第一,完善安全生产责任制,坚决遏制重特大安全事故。 面对新形势…...
【AIGC调研系列】Bunny-Llama-3-8B-V与其他多模态大模型相比的优劣
Bunny-Llama-3-8B-V作为基于Llama-3的多模态大模型,其优势主要体现在以下几个方面: 性能超越其他模型:根据我搜索到的资料,Bunny-Llama-3-8B-V在多个主流Benchmark上表现良好,超越了LLaVA-7B、LLaVA-13B、Mini-Gemini…...
什么是Java中的代理模式?
Java中的代理模式(Proxy Pattern)是一种设计模式,用于在不改变原始对象(也称为主题,Subject)的代码的情况下,为原始对象提供代理对象,以控制对原始对象的访问。代理模式可以在不改变…...
游戏开发36课 cocoscreator scrollview优化
在cocoscreator内,ScrollView控件封装的挺完美的了,不过对于一些对性能要求比较高的场景,会存在问题,以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView,插入100个玩家的item,理…...
屏幕开发学习 -- 迪文串口屏
一 前言 最近学习了一款基于图形化开发的屏幕,在摸索一周后,基本熟悉了这款产品的一个开发过程,今天给大家分享一下迪文串口屏的学习过程,有不足之处,还请见谅😁,包含了环境搭建和功能DEMO 二 …...
微机-------CPU与外设之间的数据传送方式
目录 一、无条件方式二、查询方式三、中断方式四、DMA方式一、无条件方式 外设要求:简单、数据变化缓慢。 外设被认为始终处于就绪状态。始终准备好数据或者始终准备好接收数据。 IN AL,数据端口 数据端口的地址通过CPU的地址总线送到地址译码器进行译码,同时该指令进行的是…...
从源码上解决rosdep update失败问题
(一)卸载官方的rosdep、rosdistro 卸载rosdistro # python2 sudo apt-get purge python-rosdistro# python3 sudo apt-get purge python3-rosdistro卸载rosdep # python2 sudo apt-get purge python-rosdep# python3 sudo apt-get purge python3-rosd…...
常用的shell命令
常用的shell命令 1、ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls -lh 显示文件的…...
新手入门SLAM必备资料
新手入门SLAM必备资料 文章目录 新手入门SLAM必备资料一、SLAM学习书籍1.必读经典2.有很多期,跟着会议一起出的文集3.入门书籍,简单实现及代码4.SLAM入门教材吐血推荐,对深入理解SLAM实质非常有帮助5.作者Joan Sola关于Graph-SLAM的教程,包含位姿变换、传感器模型、图优化以…...
如何选择和使用腾讯云服务器的方法新手教程
本文将介绍如何选择和使用腾讯云服务器的方法新手教程。云服务器能帮助快速构建更稳定、安全的应用,降低开发运维的难度和整体IT成本。腾讯云CVM云服务器提供多种类型的实例、操作系统和软件包。各实例中的 CPU、内存、硬盘和带宽可以灵活调整,以满足应用…...
亚马逊云科技re:Invent:Serverless是所有构想的核心
12月2日,2022亚马逊云科技re:Invent全球大会上,Amazon.com副总裁兼首席技术官Werner Vogels博士向开发者们展示了另一种可能。在一系列Serverless工具的帮助下,一些代码可以少写,因为未来你可能再也不需要写它们了。这恐怕是自云原…...
数据链路层(必备知识)
文章目录1、数据链路层的作用2、认识以太网<1>以太网帧格式<2>认识MAC地址<3>认识MTU<4>查看硬件地址和MTU3、ARP协议<1>什么是ARP协议<2>ARP数据报格式<3>ARP协议的工作机制4、其他重要协议或技术<1> DNS<2>NAT技术1、…...
【Spring系列】- Spring循环依赖
Spring循环依赖 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 一个有梦有戏的人 怒放吧德德 🌝分享学习心得,欢迎指正,大…...
Python学习基础笔记二十一——迭代器
列表,我们使用for循环来取值,我们把每个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个去取其他位置的值。那么我们为什么可以使用for循环来取值,for循环内部是怎么工作的呢&am…...
【云原生之Docker实战】使用docker部署IT资产管理系统GLPI
【云原生之Docker实战】使用docker部署IT资产管理系统GLPI 一、GLPI介绍1.GLPI简介2.GLPI功能二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载GLPI镜像四、编辑docker-compose.yaml文件五、部署GLPI系统1.创建数据目录2.使用docker compose创建容器应用3.查看…...
【SSM框架 二】Spring
文章目录二、Spring1、简介2、IOC理论思想3、Hello Spring4、IOC创建对象的方式4.1 无参构造构造器注入4.2 有参构造器注入5、Spring的配置5.1 别名5.2 Bean的配置5.3 import6、DI依赖注入6.1 构造方法注入6.2 set方法注入6.3 扩展注入6.4、Bean的作用域7、Bean的自动装配7.1 正…...
基于java+ssm+vue+mysql的社区流浪猫狗救助网站
项目介绍 随着迅速的发展,宠物饲养也较以前发生很大的变化,社区流浪猫狗救助网站系统以其独有的优势脱颖而出。“社区流浪猫狗救助网站”是以JAVA程序设计语言课为基础的设计出适合社区流浪猫狗救助网站,其开发过程主要包括后台数据库的建立…...
推特营销引流入门指南
一、关注 当您关注另一个Twitter用户时,您进行订阅,即可立即阅读其内容分享。因此,请评估您关注的人,尤其是刚开始时。跟踪新用户的一种简单方法是找到他们的个人资料,然后单击“关注”按钮。 Twitter对于那些疯狂点…...
Seata概述基础
分布式事务原因: 单体架构的spring事务不能跨机器,不能跨数据源 分布式事务的概念: 一个业务流程,在分布式系统(微服务)中,每个业务模块都是一个分支,保证每个业务分支一起成功&am…...
Python学习基础笔记二十二——生成器
一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。每一次获取这个可迭代对…...
python -- PyQt5(designer)中文详细教程(四)事件和信号
事件 signals and slots也 被其他⼈翻译成信号和槽机制。 所有的应用都是事件驱动的。事件大部分都是由用户的行为产⽣的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调⽤应⽤的exec_()⽅法时,应⽤会进⼊…...
你绝对想象不到的端对端通信的几种方式
一、前言 今天要和大家说的是我们常用的一些端对端的通信方式,这里我们会以python和php语言为主,举例说明客户端、浏览器端和服务器端通信,部分代码可能展示不全,不过我会放在文末链接供大家下载测试,下面我们先来让大…...
序列化--Serial
序列化:将数据结构或对象转换成二进制串的过程。 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。 Parcelable 与 Serializeable 的区别 SerializableParcelable通过IO对硬盘操作,速度较慢直接在内存操作&#x…...
BDD - SpecFlow ExternalData Plugin 导入外部测试数据
BDD - SpecFlow ExternalData Plugin 导入外部测试数据引言SpecFlow ExternalData 插件支持的数据源Tags实践创建一个 Class Libary Project添加 NuGet Packages添加测试数据源文件CSV 文件Excel 文件添加 Feature 文件实现 Step Definition执行Scenario 导入测试数据源Scenari…...
[Power Query] 日期和时间处理
Power Query查询编辑器为日期和时间数据提供了强大而快捷的处理方式 例1: 从日期中提取年、月份、日、季度、周、天等信息 数据源 步骤1:将数据源导入到Power BI Desktop,单击【转换数据】选项,进入Power Query查询编辑器界面 步骤2:选中"日期&qu…...
设计模式之抽象工厂模式
利用反射技术简单梳理抽象工厂模式 工厂模式实现 通常我们在实际工作中,经常遇到需要访问数据库的场景。 而常见的数据库又多种多样,怎么样针对不同的数据库来建立不同的数据库连接呢? 我们可以看下用抽象工厂模式加上反射技术来如何实现。…...
JavaWeb_第5章_会话技术_Cookie+Session
JavaWeb_第5章_会话技术_CookieSession 文章目录JavaWeb_第5章_会话技术_CookieSession1,会话跟踪技术的概述2,Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3,Session3.1…...
跟着实例学Go语言(一)
本教程全面涵盖了Go语言基础的各个方面。一共80个例子,每个例子对应一个语言特性点,非常适合新人快速上手。 教程代码示例来自go by example,文字部分来自本人自己的理解。 本文是教程系列的第一部分,共计20个例子、约1万字。 目…...
数据库基础 - 数据类型、关键字、cmd中操作数据库的命令
cmd中操作数据库的命令 mysql -hlocalhost -用户名 -密码 show database;查询数据库中的小数据库 show 数据库名;查询某一个小数据库 show 表名;查询表的结构 exit 退出数据类型 数值类型 int :整形 double:双精度&…...
2022SDNU-ACM结训赛题解
首先感谢一下各位出题人的精心准备、验题人的辛勤付出、以及选手的积极参加 题解 Problem A 柳予欣的归来【数学】 出题人: bhq 没想到一血是被打完山大的牛客比赛后来结训赛玩的wyx拿走的! 题目描述: 计算(∑0<d<pd−1)m(\sum_{0…...
《人类简史》笔记三—— 历史从无正义
目录 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的? 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 古时候: 上等人 平民和奴隶 现在:…...
Python实现基于用户的协同过滤推荐算法构建电影推荐系统
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于用户的协同过滤推荐(User-based CF)的原理假设:跟你喜好相似的人…...
阿里巴巴专场——第322场周赛题解
目录 模拟法:6253.回环句 排序后模拟:6254. 划分技能点相等的团队 BFS:6255. 两个城市间路径的最小分数 BFS:6256. 将节点分成尽可能多的组 模拟法:6253.回环句 这道题直接按照题目的意思暴力模拟即可:…...
【机器学习】支持向量回归
有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 在阅读本篇之前建议先学习: 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】软间隔与核函数 支持向量回归 支持向量回归(support vector regression…...
Linux安装mysql
1、 查看是否已经安装 Mysql rpm -qa | grep mysql 如果你查看出来有东西,可以使用下面命令将其删除 rpm -e 文件名 2 、下载官方 Mysql 包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 如果安装有提示:Cannot…...
JeecgBoot搭建(低代码)
环境安装 后端:JDK: 1.8 (小于11)、Maven: 3.5、MySql: 5.7、Redis: 3.2 前端:Node Js: 14.18 / 16、Npm: 5.6.0、Yarn: 1.21.1 、Pnpm 工具: IDEA、Navicat、Git、TortoiseGit拉取代码 后端:git clone https://gitee.com/jeecg/…...
【java】3-获取线程引用与线程的属性
1.获取线程的引用 在创建一个线程之后,我们很有必要去获取当前线程实例的引用,以便能够观察到线程的一些属性,或是对于当前线程进行一系列的操作 调用Thread类的静态方法currentThread,我们便能拿到当前线程的引用 Thread.curr…...
2022-12-04一周学习
这周基本上还是在对前端学习的更多一点,主要是之前没有重视vue3的学习,现在在补上来,学习了vue3的一些知识,前端的权限管理,设置路由守卫,pinia,还学习了redis的一些基本操作,之前只是照搬了别人…...
CG-34 浊度传感器 简单说明
产品概述 浊度传感器是一种智能监测水中悬浮物对光线透过时所发生的阻碍程度的仪器。允许在水中的测量点进行无人值守的操作。采用自清洗设计,可清除水中附着物以及气泡聚集而影响测量结果。具有优异的抗污染能力,即使恶劣的环境长期在线监测,…...
跟着实例学Go语言(二)
本教程全面涵盖了Go语言基础的各个方面。一共80个例子,每个例子对应一个语言特性点,非常适合新人快速上手。 教程代码示例来自go by example,文字部分来自本人自己的理解。 本文是教程系列的第二部分,共计20个例子、约1.2万字。 …...
linux+window+macos下的JDK安装
1. Linux中安装JDK (1)下载Linux版本的jdk压缩包 (2)解压 tar -zxvf 压缩包名 例如: tar -zxvf jdk-8u251-linux-x64.tar.gz(3)在系统配置文件配置java 编辑profile配置文件 vim /etc/prof…...
DiffuSEEG:一种基于stable diffusion 的SEEG数据补全方法
目录一. 立体脑电图(SEEG)1.1 SEEG概念1.2 SEEG作用1.3 SEEG的适用场景1.4 操作方法一. 立体脑电图(SEEG) 1.1 SEEG概念 立体脑电图(SEEG):是一种借助外科微创的方法将电极植入到大脑不同的部…...
kubernetes—Service介绍
Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资…...
AlphaFold2源码解析(7)--模型之Evoformer
AlphaFold2源码解析(7)–模型之Evoformer 这篇文章我们主要药讲解AlphaFold2的Evoformer的代码细节。 Evoformer Stack 该网络有一个双塔结构,在MSA堆栈中具有轴向的自我注意;在Pair堆栈中具有三角形的乘法更新和三角形的自我注意;以及外积…...
docker 安装 redis 6.0.8 cluster 实战 (3主3从) 动态扩容
这里将上篇博客搭建的3主3从 扩容为 4主4从 1. 新建两个node节点 docker run -d \ --net host \ --privileged \ --name redis-node-7 \ --log-opt max-size100m \ --log-opt max-file3 \ -v /root/docker/redis-node-7/data:/data \ redis:6.0.8 \ --cluster-enabled yes \ -…...
20221204
You are so much more than how you look. 你比你的外表更有魅力 Never give up until the fight is over. 永远不要放弃,要一直战斗到最后一秒。 whats done cannot be undone 覆水难收 If I was going somewhere, I was running。 如果我要去哪儿ÿ…...
CN_数据链路层流量控制@可靠的传输机制@ARP协议
文章目录流量控制技术(协议)停止-等待流量控制滑动窗口流量控制发送窗口接收窗口基本原理可靠的传输机制确认机制ACK超时重传机制RTOARQ处理差错自动重传请求ARQ协议🎈ARQ具体协议单帧ARQ协议停止-等待协议SW-ARQ例连续ARQ协议后退N帧协议(GBN)GBN多帧滑动窗口累计确…...
程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…...
安装ubuntu20.04, CUDA11.4, cnDNN, tensorflow, pytorch
ubuntu22.04默认python为3.11 ubuntu20.04默认python为3.8 第一步,分区安装系统 efi引导区, 逻辑分区,512M root: 主分区,512M swap: 逻辑分区,64G home:逻辑分区,320G /:逻辑分区, 130G, CUDA是安装…...
shell脚本受限执行
shell 中运行的脚本或脚本的个代码断会禁用一些正常 shell 中可以执行的命令.这是限制脚本用户的权限和最小化运行脚本导致的破坏的安全措施.受限的内容包括:使用 cd 命令更改工作目录. 更改环境变量$PATH, $SHELL, $BASH_ENV,或$ENV 的值. 读或更改 shell 环境选项…...
HTTP 速查手册
一、通用身份验证 # 服务端返回401,并告知验证类型为Basic GET 401 Unauthorized WWW-Authenticate: Basic realm"description"# 浏览器输入验证信息后,请求头中携带验证信息 Authorization: Basic xxxxxxxxxx二、Cookie # 服务端返回set-co…...
【计算机视觉】 摄像机标定
摄像机标定 齐次坐标 齐次坐标,将欧氏空间的无穷远点,与投影空间中有实际意义的消失点,建立起映射关系。 把齐次坐标转化为笛卡尔坐标的方法:是前面n-1个坐标分量分别除以最后一个分量即可 一些解释和性质: 比较好的…...
【Redis】Redis安装步骤和特性以及支持的10种数据类型(Redis专栏启动)
📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 …...
Day8: 5道C++内存管理高频题整理
1、 什么是内存泄漏?如何避免它? 内存泄漏是指在程序中已分配的内存未被正确释放,导致该部分内存在程序运行期间一直占用而无法被再次使用的现象。这会逐渐消耗系统的内存资源,可能导致程序运行缓慢甚至崩溃。在C中,内…...
嵌入式中全栈工程师是怎么样的?
这两天有小伙伴问我,如何才能做到嵌入式全栈?我用visio软件画了一张图,为大家讲解。 此图为博主认为的嵌入式全栈,从硬件到软件全套技术栈,我们“从下往上”讲解。 1、首先是需要有原理图库,可以自己画,也可以从别人那里拷贝。有了原理图库,就开始画原理图。画原理图需…...
ubuntu22 部署fastDFS单节点和集群,整合Spring Boot(刚部署成功)
ubuntu22 部署fastDFS单节点和集群 一、先准备1、所需依赖安装2、下载安装包 二、安装FastDFS单节点1、libfastcommon安装1.1、创建软连接 2、安装fastDFS2.1、fastDFS目录简单介绍2.2、创建软连接 3、配置和启动Tracker服务3.1、修改Tracker配置文件3.2、启动Tracker 4、配置和…...
Unity ECS
一:前言 ECS与OOP不同,ECS是组合编程,而OOP的理念是继承 E表示Entity,每个Entity都是一个有唯一id的实体。C表示Component,内部只有属性,例如位置、速度、生命值等。S表示System,驱动实体的行为…...
三维重建一种实现算法
三维重建通常分为基于图像,深度学习,nerf的三维重建方法,本文介绍一种基于slam位姿的用open3d实现的三维重建实现方式。 硬件配置是一个rgbd相机加2d雷达,加广角相机同时装在同一个小车上,每个相机经过内外参相机标定&…...
OpenCV实现霍夫变换
返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV 如何实现边缘检测器 下一篇 :OpenCV 实现霍夫圆变换 目标 在本教程中,您将学习如何: 使用 OpenCV 函数 HoughLines()和 HoughLinesP()检测图像中的线条。…...