加载场景后不能改变场景里控件的位置。

请教个问题,我有一个加载了ui界面的场景,程序里读取后,我获得了一个按钮,然后我想更改这个按钮的位置,但无效?但是我在按钮的响应函数里更改位置就可以?
详见代码,第19行改变了位置无效:

 
// 一个 layer 的构造函数 
ctor: function(){
    // 读场景 
    this._curNode = ccs.SceneReader.getInstance().createNodeWithSceneFile('Scene/GameLogin.json');

    // 获取挂着ui组件的对象。
    var uiObj = this._curNode.getChildByTag(10040); 
 
    // 获取ui节点。
    var uiNode = uiObj.getComponent("GUIComponent").getNode();

    // 获取一个按钮 
    var quickLogin_Button = ccui.Helper.seekWidgetByName(uiNode, "quickLogin_Button");
    var pos1 = quickLogin_Button.getPosition(); 
    cc.log('pos1: ' + pos1.x + ', ' + pos1.y); // 这里打印 811, 373 是编辑器里设定的位置  

    // 改变按钮位置不起作用!!!! 
    quickLogin_Button.setPosition(cc.p(110, 111))   

    // 注册响应函数
    quickLogin_Button.addTouchEventListener(function(){
        var pos2 = quickLogin_Button.getPosition(); 
        cc.log('pos2: ' + pos2.x + ', ' + pos2.y); // 这里打印 812.7999877929688, 374.20001220703125 很诡异的值,不知道是谁改的。
 
        quickLogin_Button.setPosition(110, 111); 
        var pos = quickLogin_Button.getPosition(); cc.log(pos.x + ', ' + pos.y); 
    }, this); 
}

hi~你用的是JSB么?

好神奇的感觉,对象也获取到了,还能表现不同。

那个“; // 这里打印 812.7999877929688, 374.20001220703125 很诡异的值,不知道是谁改的。”
是因为编辑器设置的值会因为win平台的问题直接转成double值。

是jsb,cocos2d-x beta1。我主要是想问第 19 行,改变位置后不起作用,不知道又被谁改回去了。

抱歉,JSB暂时没做过,但是请问为什么19行和26行不一致呢?应该是19行写错了吧?

两种写法都可以

我试了下samples 是正常的,可能是我的逻辑有问题 我再查查 囧囧囧

遇见这样不符合思维的bug··实在想不出解决办法···囧

看看你的UI是不是用了相对布局了,相对布局下坐标是无效的

是相对坐标,但是在按钮的回调函数里是可以改变的。

我把我做的资源用samples的代码读了一下也有同样的问题,看来不是代码的问题,是编辑器里哪个属性设置的有问题,我再查查。

真的是像 @孤独の快乐 说的,我把父panel改为“绝对布局” 就正常了!用“相对布局”是存在这个问题的!

然后我测试了下 samples 里 UI Component Test 里的代码,
C++ 和 JSB 都测了哦,都有这个问题!

请斑竹落实下这个bug吧!

既然是相对布局,为什么要自己设置Position呢? 就算要设置,也应该修改LayoutParameter吧。

您好,这个问题已经确认,如果开启了相对布局模式,则position属性失去作用。系统会优先读取 布局属性。请使用getlayoutparameter()获取布局参数并修改布局位置。感谢您对CocoStudio的支持。