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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:18:04