JavaFX中移动Group内部元素时如何避免Group自身发生位移
问题根因
你观察到的「Group随内部圆形移动而偏移」的现象,本质是JavaFX缩放变换的默认枢轴规则导致的:setScaleX/setScaleY方法默认使用节点自身layoutBounds的中心点作为缩放枢轴。当你移动Group内部的圆形时,Group的整体内容边界(layoutBounds)会随之变化,对应的缩放枢轴坐标也会动态更新,最终表现为整个Group的所有子元素(包括方块)都发生偏移。该现象仅在设置了非1倍缩放时才会显现,和你判断的触发条件一致。
解决方案
最简单的修复方式是固定Group的缩放枢轴点,避免枢轴随Group内容变化:在你设置缩放的代码段后,新增两行设置固定枢轴的代码即可:
/*This line causes the problem*/group.setScaleX(1.5); /*This line causes the problem*/group.setScaleY(1.5); // 新增:固定缩放枢轴为Group本地坐标原点,不会随内部元素位置变化 group.setPivotX(0); group.setPivotY(0);
修改后Group的缩放中心会固定在初始原点,移动圆形时只会修改Group的内容边界,不会改变缩放枢轴的位置,方块也就不会发生额外位移。
如果你的场景不允许修改枢轴点,也可以采用替代方案:将需要缩放的静态元素和动态元素拆分到不同的Group,仅给静态元素组设置固定缩放,动态圆形单独放在无缩放的Group内,也能实现方块固定的效果。
内容的提问来源于stack exchange,提问作者Dragger123
相关产品推荐
相关产品推荐

