Phaser中sprite缩放调用scale方法报错is not a function解决方法
报错原因
这个错误的核心原因是API用法搞错了:Phaser 3 里Sprite等所有游戏对象的scale是属性不是方法,你写plane.scale(0.1, 0.1)等于把一个对象类型的属性当函数调用,自然会抛类型错误。
Phaser 3 游戏对象的scale默认是存储横向、纵向缩放比的对象,结构为{x: 1, y:1},1代表原始尺寸,本身不支持加括号传参执行。
正确缩放实现方法
官方提供了两种合规的缩放设置方式,任选其一即可:
- 直接修改缩放属性
// 单独修改横向、纵向缩放值 plane.scaleX = 0.1; plane.scaleY = 0.1; // 直接给scale赋值,传单个数值代表横纵用相同缩放比 plane.scale = 0.1; // 需要不同横纵缩放比时可以传对象 plane.scale = { x: 0.1, y: 0.15 }; - 调用
setScale实例方法(最推荐)
这是Phaser官方封装的缩放设置方法,支持传1个或2个参数,语义更清晰:function create () { // 修正原代码背景偏移问题:原点对齐左上角,坐标设为(0,0)即可铺满画布 const background = this.add.image(0, 0, 'background').setOrigin(0, 0); const plane = this.add.sprite(200, 200, 'aircraft', 'Glider2.png'); // 传1个参数:横纵统一缩放为原尺寸的10% plane.setScale(0.1); // 传2个参数时,第一个为横向缩放比,第二个为纵向缩放比 // plane.setScale(0.1, 0.1); }
小提示:缩放值小于1是缩小,大于1是放大,传入负数还可以实现精灵的水平/垂直镜像翻转效果。
内容的提问来源于stack exchange,提问作者James6666
相关产品推荐
相关产品推荐

