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

PIXIJS中设置为mask的Sprite无法移动与调整大小问题咨询

问题原因

作为遮罩的sprite未被添加到PIXI的显示渲染树中,PIXI不会对未加入显示树的对象做矩阵变换计算,你设置的坐标、缩放等属性不会生效,遮罩会默认使用原始(0,0)坐标和原始尺寸裁剪内容。

解决方法

方案1:遮罩坐标相对舞台计算

将遮罩精灵添加到舞台,同时可设置visible = false避免遮罩本身被渲染出来,调整大小直接修改宽高或缩放属性即可,修改后代码如下:

const app = new PIXI.Application({
    width: $(window).innerWidth(),
    height: $(window).innerHeight(),
    backgroundColor: 0x000000,
    antialias: true,
});

app.stage.hitArea = app.screen;
app.stage.interactive = true;
const rect = new PIXI.Graphics().beginFill(0xff0000,1).drawRect(0,0, 500, 500).endFill();
const sprite = PIXI.Sprite.from('Assets/UI/play.png');
sprite.x = 250;
sprite.y = 250;
// 调整遮罩大小示例
sprite.width = 200;
sprite.height = 200;
rect.mask = sprite;

app.stage.addChild(rect);
// 新增:将遮罩加入显示树
app.stage.addChild(sprite);
// 隐藏遮罩本身,不影响遮罩效果
sprite.visible = false;

方案2:遮罩坐标相对被遮罩对象计算

如果希望遮罩的坐标是相对于被遮罩的红色矩形计算,可以将遮罩精灵添加为rect的子元素,此时设置的sprite.x、sprite.y会以rect的左上角为原点计算:

// 前面代码保持不变
rect.mask = sprite;
// 将遮罩加入被遮罩对象的子级
rect.addChild(sprite);
sprite.visible = false;
app.stage.addChild(rect);

尺寸调整说明

遮罩的尺寸调整逻辑和普通显示对象完全一致,直接修改width/height属性,或者修改scale.x/scale.y缩放值都可生效。

内容的提问来源于stack exchange,提问作者kumomomo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:06:03