Phaser3图片缩放异常咨询:设置尺寸后图片被裁切的原因与解决办法
Phaser窗口内图片被裁切的原因及解决方法
问题原因
- Phaser的UI Window组件的整体尺寸与内部可用区域是分离的:你设置的窗口宽高是整体外框尺寸,而添加的100px内边距是从窗口内部扣除的,实际可用来显示内容的区域为「窗口宽-左右内边距总和」「窗口高-上下内边距总和」。如果图片尺寸是按窗口整体宽高设置的,自然会超出可用区域被裁切。
- 窗口默认启用了内容裁剪(
clipContent: true),任何超出内部可用区域的内容都会被自动裁切。
解决方法
适配尺寸计算:
如果要保持窗口整体尺寸为屏幕宽、屏幕高0.3倍,那么图片的最大尺寸应该设为:// 扣除左右各100px内边距 const maxImgWidth = this.scale.width - 200; // 扣除上下各100px内边距 const maxImgHeight = this.scale.height * 0.3 - 200; // 用这个尺寸加载/设置图片 this.add.image(0, 0, 'yourTexture').setDisplaySize(maxImgWidth, maxImgHeight);或者反过来,如果你要图片完整显示且保留内边距,窗口的整体尺寸应该设为:
const windowWidth = this.scale.width + 200; const windowHeight = this.scale.height * 0.3 + 200;直接获取内部可用区域尺寸:
利用Phaser Window提供的方法,直接拿到扣除内边距后的可用尺寸来设置图片:const window = this.add.window(x, y, windowWidth, windowHeight).setPadding(100); // 获取内部可用宽高 const innerWidth = window.getInnerWidth(); const innerHeight = window.getInnerHeight(); // 图片适配内部区域 window.add.image(innerWidth/2, innerHeight/2, 'yourTexture').setDisplaySize(innerWidth, innerHeight);关闭内容裁剪(按需使用):
如果允许图片超出窗口显示,可关闭裁剪:window.setInteractive({ clipContent: false });
内容的提问来源于stack exchange,提问作者Zagnetto
相关产品推荐
相关产品推荐

