Phaser 3 如何为Phaser.Curves.Path填充颜色并渲染到RenderTexture
Phaser3 Path渲染到RenderTexture无填充效果的解决方法
该问题是Phaser3 API的默认行为导致的:
Phaser.Curves.Path的draw()方法仅会执行描边操作,即使你提前为Graphics对象设置了fillStyle,也不会自动触发填充逻辑。
解决方案
你只需要在调用path.draw()描边之前,主动将Path路径转换为可填充的顶点集合,调用Graphics的填充方法即可,修改步骤如下:
- 完成Path路径定义后,先调用Path的
getPoints()方法获取路径的所有顶点,如果是带曲线的复杂路径,可以传入参数调整细分精度(数值越大曲线越平滑,默认值为16) - 调用Graphics对象的
fillPoints()方法填充路径,第二个参数传true代表自动闭合路径 - 再执行原来的
path.draw(graphics)完成描边操作
修改后的完整代码如下:
function create() { this.add.image(400, 300, 'sky'); graphics = new Phaser.GameObjects.Graphics(this); graphics.lineStyle(4, 0x00ff00); graphics.fillStyle(0x00ff00); rt = this.add.renderTexture(100, 100, 100, 100).setOrigin(0.5); var circle = this.add .circle(0, 0, 50, 0xff7e00) .setAlpha(0.8) .setVisible(false); rt.draw(circle, 50, 50); const path = new Phaser.Curves.Path(); path.lineTo(50, 0); path.lineTo(50, 50); path.lineTo(0, 50); path.closePath(); // 新增填充逻辑 // 如果是曲线路径,可传入细分参数,比如 path.getPoints(32) 提升平滑度 const pathPoints = path.getPoints(); graphics.fillPoints(pathPoints, true); // 原有描边逻辑不变 path.draw(graphics); rt.draw(graphics, 25, 25); }
注意事项
- 如果你的Path包含贝塞尔曲线、样条曲线等非线性路径,调整
getPoints()的参数可以平衡填充精度和性能,一般32-64就可以满足绝大多数场景的平滑度需求 - 填充操作一定要放在描边操作之前,避免描边被填充颜色覆盖
内容的提问来源于stack exchange,提问作者Sedoyjan
相关产品推荐
相关产品推荐

