龙骨使用自定义SpriteFrame尺寸不一致导致的bug

简介: 龙骨使用自定义SpriteFrame尺寸不一致导致的bug

问题表现

后续过程中反馈了一个问题,局部换肤后,换肤的图片非常大

image.png

问题排查

第一反应是dragonBones节点发生了缩放,排查后发现并没有

对比了前后的ske.json,发现龙骨工程调整了龙骨的长度

image.png

应该是为了减小龙骨的整体体积,加快游戏的加载速度,制作人员使用了更小的图片,这也解释了龙骨整体看起来变小的原因。

同时龙骨的纹理图片tex.json也发生了变化,比如下图中

image.png

比如上图中yu10.png这个纹理在换肤的plist龙骨的tex.json中的width/height是一致的,龙骨调整后,两者就不一致了。

image.png

并且我发现换肤的局部纹理,比龙骨的纹理,到这里基本就确认了就是换肤的散图纹理尺寸不一致导致的这个bug。

如何修复

既然换肤纹理是等比例放大了,那么我只需要知道龙骨在运行时显示的width/height即可,即使替换的纹理皮肤非常大,渲染时也会将其限定在指定的区域,这样分析下去的话,就是我使用了替换纹理的尺寸导致的异常。

image.png

对比发现,在龙骨的导出数据中记录的有这个width/height信息,尝试者修改:

image.png

我参考了引擎之前的实现逻辑,简单粗暴的替换了region,这个是使用默认龙骨纹理的区域信息,因为同一个部件在不同的图集纹理里面xy坐标是不一样的,所以也就导致了上图中的纹理发生了错乱

那么纹理的uv使用替换的皮肤纹理,而顶点的xy则使用龙骨的,最终修改如下:

image.png

修改后就正常了

image.png

总结

这个问题虽然修复了,但是也暴露制作过程中的不规范,换肤就应该尺寸一致

现在是将这个问题修复了,但是并没有校验替换的皮肤纹理是否和region成比例,如果比例不一致,就算发生缩放,也会显示异常,不过如果都出现了不一致的情况,肯定就是制作人员的问题了,这里我就没有再深入优化了。

这个功能本身就是hack了Engine的一些api,所以目前只是照顾到了cacheMode.RELATIME的模式,其他缓存模式下肯定还会有问题,项目暂时限定使用这个模式来规避这个问题,就懒得再深入搞了。



目录
相关文章
|
关系型数据库 Serverless 分布式数据库
1.4亿人都在用|伊对APP x 阿里云PolarDB:这一对,天生配
PolarDB以其出色的性能和稳定性为伊对APP提供了强大的支持
1.4亿人都在用|伊对APP x 阿里云PolarDB:这一对,天生配
|
并行计算 数据处理 开发者
NumPy高效数组操作与性能调优手册
NumPy是Python数据科学的基础库,以其高效的数组操作著称。本文深入探讨了NumPy的数组基础,如创建和操作数组,并介绍了向量化运算、避免Python循环等高效技巧。此外,文章还提出了性能优化策略,包括使用内置函数、并行计算、减少数据类型转换、使用视图及有效管理内存,以帮助开发者在处理大规模数据时充分利用NumPy的性能优势。通过这些策略,可以实现更高效、快速的数据处理。【6月更文挑战第10天】
721 4
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
1059 3
|
缓存 网络协议 网络安全
Dos常用命令及解释大全
前言 DOS是"磁盘操作系统"(Disk Operating System)的缩写。它是一种早期的操作系统,最初在20世纪80年代广泛用于个人计算机。DOS主要用于控制计算机硬件和管理文件系统,提供一组命令行界面(CLI)用于用户与操作系统进行交互。DOS的一个著名版本是微软的MS-DOS,它是IBM PC和兼容机中使用的主要操作系统。随着图形用户界面的兴起,DOS逐渐被更先进的操作系统如Windows所取代。
1475 0
|
机器学习/深度学习 自然语言处理 TensorFlow
深入浅出:理解和实现深度学习中的卷积神经网络(CNN)
在当今的数据驱动世界,深度学习已经成为许多领域的关键技术。本文将深入探讨卷积神经网络(CNN)的原理、结构和应用,旨在帮助读者全面理解这项强大的技术,并提供实际的实现技巧。
621 27
|
机器学习/深度学习 存储 算法
基于CNN+LSTM深度学习网络的时间序列预测matlab仿真,并对比CNN+GRU网络
该文介绍了使用MATLAB2022A进行时间序列预测的算法,结合CNN和RNN(LSTM或GRU)处理数据。CNN提取局部特征,RNN处理序列依赖。LSTM通过门控机制擅长长序列,GRU则更为简洁、高效。程序展示了训练损失、精度随epoch变化的曲线,并对训练及测试数据进行预测,评估预测误差。
|
机器学习/深度学习 人工智能 自动驾驶
世界模型有什么用?
【2月更文挑战第16天】世界模型有什么用?
348 2
世界模型有什么用?
|
数据采集 机器学习/深度学习 数据可视化
matlab数学建模方法与实践 笔记汇总(上)
matlab数学建模方法与实践 笔记汇总
306 0