当设置了 cc.Widget align 时,setPosition() 不会生效。

3.4.1 下,这也许是 api 接口设计如此,对 api 含义的第一反应是 position 会改变,也就是说 setPosition() 以后 widget 再生效,不知道大家的第一反应是什么。

@ccclass('SetPositionTest')
export default class SetPositionTest extends cc.Component {

    onLoad() {
    }

    onDestroy() { }

    start() {
        this.test().then(instance => {
            (instance as cc.Node).setPosition(new cc.Vec3(0, cc.view.getVisibleSize().height / 4, 0)); // 当设置了 cc.Widget align 时,坐标设置没有生效
            (instance as cc.Node).angle = 45; // 角度设置生效了
        });
    }

    async test() {
        return new Promise((resolve, reject) => {
            cc.assetManager.resources.load('SpriteSplash', cc.Prefab, (err, prefab) => {
                if (err) {
                    reject(err);
                }

                const instance = cc.instantiate(prefab as cc.Prefab);
                this.node.addChild(instance);
                resolve(instance);
            });
        });
    }
}

set-position-test-prefab.zip (4.2 KB) set-position-test.zip (12.4 KB)

你的 widget 适配模式是不是 always ?

on_windows_resize