头图

如何在 kitten 里生成动态个数个立方体(水平方向平铺)以及避免闪烁问题

效果如下: 一个立方体:

两个立方体:

三个立方体:

实现思路

关键是求出第一个立方体开始绘制的第一个点的水平方向坐标。

我引入三个变量,分别是立方体的个数,第一个立方体的顶点水平方向坐标和第二个及其之后的顶点水平方向坐标。

我期望将这些立方体尽可能布局在屏幕的正中,因此需要计算第一个立方体的初始顶点的水平坐标。后续的立方体定点坐标,只需在此基础上递增正方体的边长即可。换言之,这些立方体从左到右依次布局。

正方形变长 × 立方体个数的和再除以2,除以2保证第一个顶点在屏幕正中。

然后在循环体里绘制立方体。每绘制一次之后,将立方体定点水平坐标往右增加正方形边长的偏移量,然后将画笔抬至新的 x 坐标。

Kitten 里如何解决动态绘制立方体后出现的闪烁问题

问题:

如果有三个立方体,则第二个和第三个,在响应用户事件重新绘制时,会出现 flicker 即闪烁问题。

如果将初始的立方体个数硬编码为2:

仍然会出现闪烁问题。

如果不加这个延时积木,第二个及其以后的立方体会频繁闪烁。如果加上,降低了闪烁的频率。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTZrOwCT-1675757941682)(null)]

感觉第二个立方体的绘制有延迟,和第一个立方体一样不是立即完成的。难道第一个立方体没有清除掉?

时延加到 0.5秒就比较明显了。每次事件响应,第一个立方体总是立即出现,然后才是第二个立方体刷的一下出来。

我把循环体内的积木展开,发现没有任何闪烁问题,所以问题出现在循环积木本身。

最后的解决方案,将第一个立方体的绘制同其后立方体的绘制拆分开。后者放在循环体内。问题解决:


Jerry Wang的SAP技术专栏
SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使
914 声望
1.6k 粉丝
0 条评论
推荐阅读
线性表的顺序存储和链式存储
在计算机科学中,线性表是一种常见的数据结构,用于存储一组具有顺序关系的元素。线性表中的元素之间存在一对一的前驱和后继关系,每个元素都有唯一的前驱和后继(除了首元素和末元素)。线性表可以通过顺序存储...

JerryWang_汪子熙阅读 94

封面图
TypeScript 与 JavaScript:你应该知道的区别
正在寻找经验丰富的 JavaScript 开发团队来将您的应用创意变为现实?作为一名开发人员,如果您有机会参与 Web 开发项目,您一定了解 JavaScript 的工作原理。JavaScript 上市多年,已成为开发者社区中流行的脚本...

京东云开发者1阅读 531

Python实战:用Selenium爬取网页数据
网络爬虫是Python编程中一个非常有用的技巧,它可以让您自动获取网页上的数据。在本文中,我们将介绍如何使用Selenium库来爬取网页数据,特别是那些需要模拟用户交互的动态网页。

小小张说故事阅读 816

封面图
Office自带 插入数学公式 快捷键
MathType是常用的office数学公式编辑工具,虽然使用简单,但是编写数学公式速度很慢。使用office自带的编写数学公式工具的快捷键就很快,而且这里介绍的快捷键几乎可以解决所有可能遇到的数学公式问题,关键在于...

DuDo阅读 759

前端开发之函数式编程实践 | 京东云技术团队
作者:京东科技 牛志伟函数式编程简介常见应用场景1、ES6中的map、filter、reduce等函数 {代码...} 2、React类组件 -> 函数式组件+hooks、Vue3中的组合式API3、RxJS、Lodash和Ramda等JS库4、中间件/插件,如Re...

京东云开发者1阅读 301

封面图
【牛客小白月赛70】A-F题解【小d和超级泡泡堂】【小d和孤独的区间】【小d的博弈】【小d和送外卖】
🎈 作者:Eriktse🎈 简介:19岁,211计算机在读,现役ACM银牌选手🏆力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)🚀🎈 阅读原文获得更好阅读体验:[链接]

Eriktse阅读 546

你也能成为“黑客”高手——趣谈Linux Shell编程语言
再想想电影黑客帝国中的画面,估计会令很多人都叹为观止,其实挺简单的,只要会使用Linux操作系统就可以很简单地实现电脑屏幕的字符串雨了!是不是很高大上呢!

京东云开发者阅读 419

封面图
914 声望
1.6k 粉丝
宣传栏