You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Phaser3图片缩放异常咨询:设置尺寸后图片被裁切的原因与解决办法

Phaser窗口内图片被裁切的原因及解决方法

问题原因

  1. Phaser的UI Window组件的整体尺寸与内部可用区域是分离的:你设置的窗口宽高是整体外框尺寸,而添加的100px内边距是从窗口内部扣除的,实际可用来显示内容的区域为「窗口宽-左右内边距总和」「窗口高-上下内边距总和」。如果图片尺寸是按窗口整体宽高设置的,自然会超出可用区域被裁切。
  2. 窗口默认启用了内容裁剪(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:10