棋牌游戲的結(jié)算界面由于局?jǐn)?shù)不固定水援,需要?jiǎng)討B(tài)設(shè)置ScrollView,并且在局?jǐn)?shù)過(guò)多時(shí)默認(rèn)播放一個(gè)滾動(dòng)到底部的動(dòng)畫(huà),達(dá)到比較好的顯示和交互效果
cocos2d-lua引擎繼承自Node的對(duì)象阀趴,如果使用了ignoreAnchorPointForPosition方法忽略錨點(diǎn),那么默認(rèn)錨點(diǎn)在控件左下角(0冲秽,0)位置舍咖,有點(diǎn)像directx的坐標(biāo)體系
(這個(gè)就比較坑了)
局?jǐn)?shù)較多的情況下,ScrollView的contentSize大于WidgetSize的大小锉桑,在彈賬單界面的時(shí)候需要?jiǎng)討B(tài)生成ContentView的值排霉。
但是由于這個(gè)不太方便的錨點(diǎn)設(shè)置,所以如果在UI編輯器(Cocos Studio等)中設(shè)計(jì)好了顯示界面(16局的結(jié)算界面)民轴,此時(shí)去裁剪ScrollView的大小攻柠,自然是裁去Y值較大的地方,也就是裁去ContentView的上半部分后裸。瑰钮。嗯。微驶。很合理浪谴。开睡。
所以如果在不使用純代碼構(gòu)建UI界面的情況下,解決辦法就是每次在裁剪ContentSize的值之后苟耻,重新設(shè)置ScrollView里每一個(gè)子控件的坐標(biāo)篇恒。
WidgetSize大小可以顯示8局的對(duì)戰(zhàn)內(nèi)容,而ContentView中有16局的對(duì)戰(zhàn)信息凶杖。所以在局?jǐn)?shù)大于8局的情況下setTouchEnabled(true).
如果在結(jié)算界面有9局的時(shí)候開(kāi)啟滾動(dòng)并且裁剪ContentView胁艰,將會(huì)剪去ContentView中前8局的結(jié)算信息,于是界面上就只有一個(gè)第9局智蝠。腾么。。
解決辦法:
Init.將所有子控件杈湾,向下移動(dòng)8個(gè)Cell的高度解虱,因?yàn)榍懊?個(gè)Cell被裁了
child:setPosition(currentY - 8 * cellY) //沒(méi)錯(cuò)是減號(hào)。毛秘。
Update.當(dāng)局?jǐn)?shù)大于8局時(shí)饭寺,每增加一局,向上移動(dòng)一個(gè)Cell的高度
1.ScrollView:setInnerContentSize(cc.size(InnerContainerX, cellY * (roundIndex))) //增加ContentSize(裁剪區(qū)域減少)叫挟;
2.child:setPosition(currentY + cellY)
最后ScrollToBottom(1,true)
完成