【cocos2dx原理系列】之初用cocostdio制作排行榜

                   cocos2dx之使用stdio构造排行榜

 

       大家好,我是Lampard

      今天与大家探讨一下如何使用stdio制造一个排行榜

 

      突然收到这个需求,从未使用过cocosstdio的我内心一阵忐忑,还好有这位技术老哥的帮助之下,顺利完成了任务。

      感谢这位大佬的博客

     从stdio创建UI到导出VS的具体代码,这篇博客写地很全面。我也成功写出了这个东西;

     

   今天主要是分析一下具体的代码(已经加了注释):

local RankView = class("RankView")

function RankView:ctor()
    self:init();
end

function RankView:init()
    --加载Rank.json文件
    self.m_uiRoot = ccs.GUIReader:getInstance():widgetFromJsonFile("ui/Rank.json");

    -- 获取整个图层
    local panelMain = self.m_uiRoot:getChildByName("Panel_Main");

    --获得滚动层
    self.m_scrollViewRankList = panelMain:getChildByName("ScrollView_RankList");

    --获得列表项
    self.m_panelRankItem = self.m_scrollViewRankList:getChildByName("Panel_RankItem");
    --引用计数加1,记住retain,必定会release(引用计数减1)
    self.m_panelRankItem:retain();
    --列表项从父节点中移除,此时减一
    self.m_panelRankItem:removeFromParent();

    self:resetScrollViewRankList();
end

function RankView:resetScrollViewRankList()
    --创建10个列表项
    local iTotalNum = 100; 
    local iTotalHeight = 0;  --内容
    for i = 1, iTotalNum do
        local panelRankItem = self.m_panelRankItem:clone();
        local imageRankNum = panelRankItem:getChildByName("Image_RankNum");      --重设置字体
        local labelRankNum = imageRankNum:getChildByName("Label_RankNum");
        labelRankNum:setString(i);

        --getLayoutParameter():getMargin(),得到高度的位置
        -- 从0开始添加,然后每一次加一个高度和一定的间隔
        iTotalHeight = iTotalHeight + panelRankItem:getContentSize().height + panelRankItem:getLayoutParameter():getMargin().bottom;

        --添加到滚动层
        self.m_scrollViewRankList:addChild(panelRankItem);
    end
    --设置滚动层内容的大小
    self.m_scrollViewRankList:setInnerContainerSize(cc.size(self.m_scrollViewRankList:getContentSize().width, iTotalHeight));
    

    --别忘了,引用计数减1
    self.m_panelRankItem:release();
end

return RankView

首先是调用生成出来的json文件,得到我们通过cocostdio创建的滑动层,滑动层上的界面等。

然后我们把原先滑动层上的界面删除掉,只保留滑动层,我们重新创建新的界面放在滑动层上。

为了节省时间,我们可以通过克隆的方式来复制旧的界面,然后在旧的界面上修改要输出的内容。

 

大部分的代码我们都能看懂,但是这个retain是干嘛用的呢?

有了解过cocos内存管理方式的同学可能都知道,每个对象在生成出来的时候,该最终父类Ref中有一个参数ReferenceCount会置为一,这个参数可以通过过retain增加和release减少,每当我们在一个帧没有调用这个对象时就会自动调用release函数,参数减一,当参数为0时引擎回收。一开始生成的时候为一,因为我们调用了removeFromParent()这个函数,所以会减一,为了不让lua把这个对象回收,我们要手动的 retain加一。

至于这个iTotalHeight参数,是记录当前滑动块的位置,通过循环递增,把我们要更新的界面都弄上去。

 

 

其他问题应该不大,有看不懂的可以一起交流交流,谢谢大家!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值