[]Laya集成Matter.js库layaSprite水平翻转无法显示的bug

layaair版本:1.7.19.1beta
项目类型:全部(目前测试的有JS和TS)
环境:Win7 x64
问题描述: laya集成matters.js,
1、创建一个sprite,水平翻转sprite(scalex=-1)
2、创建matter.js刚体body,并且设置layaSprite为步骤1的sprite
发现sprite无法显示。如果步骤1的sprite不翻转,则正常显示。
 
相关实例代码如下:
var ball_sprite = new Laya.Sprite();
ball_sprite.loadImage("common1/btn_new.png");
Laya.stage.addChild(ball_sprite);
ball_sprite.scale(-1, 1, true); // !!! 如果屏蔽此行代码,球能正常显示 
var ballOptions = {
layaSprite:ball_sprite,
                render:
                {
                    sprite:
                    {
                        // texture: 'common1/btn_new.png',
                        xOffset: 127,
                        yOffset: 46,
                    }
                }
            };
 
circle = Bodies.circle(300, 230, 26, ballOptions)
 
跟踪发现,在计算球的transform时数据不对,继续跟踪,最终发现问题根源在于LayaRender.body()处理的一bug导致,具体见附件截图。在LayaRenders.js文件的Line269
sprite.rotation = (body.angle - sprite.initialAngle) * 180 / Math.PI;
这里因sprite.initialAngle为空导致rotation为空,进而导致后续计算的sprite变换矩阵异常。
 
修复办法:
sprite.rotation = (body.angle - (sprite.initialAngle || 0)) * 180 / Math.PI;
 
说明:本帖只是针对这个问题的跟进发现,实现目标还有其它办法,不在本帖讨论范围之内。
====================
期待官方的反馈,谢谢!
 
无标题.png
已邀请:

Aar0n

赞同来自:

先不看问题,首先表扬一下,看到此贴真的是喜出望外,社区bug帖的一股清流。描述,排版,问题解决的流程,简单明了。丝毫不用额外花费精力去想要表达什么。然后,感谢反馈并附上具体问题以及方法,我们会去查看这块。
while(true){棒!};

cwugs

赞同来自:

今天727,问题依然还是存在
 
 

srr5220

赞同来自:

碰到类似问题,只想改变sprite缩放,设置了scale,sprite就不显示了。

要回复问题请先

商务合作
商务合作