• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            專(zhuān)職C++

            不能停止的腳步

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            在手機(jī)上調(diào)試,不能所見(jiàn)所得日志,這個(gè)是一個(gè)比較麻煩的事,于是想到了,用多行文本做日志。
            下面是日志的代碼。從CCLabelTTF派生。這里主要提供了VLog和Log兩個(gè)日志輸出函數(shù)。
            定義如下
            void VLog(const char * paramFormat, va_list param_argptr);
            void Log(const char * paramFormat, ...);
            其中VLog主要應(yīng)用于已經(jīng)有va_list的情況下。

            #ifndef _X_LOG_VIEW_H_
            #define _X_LOG_VIEW_H_
            #include <cocos2d.h>
            #include <vector>
            #include <cstring>
            #include <cstdarg>
            USING_NS_CC;
            namespace zdh
            {
                using std::vector;
                using std::string;
                ///滾動(dòng)文本日志
                /*
                    這是一個(gè)模板類(lèi),模板參數(shù)N主要是設(shè)置一行日志緩沖的字節(jié)數(shù)。
                
            */
                template<int N = 128>
                class XLogView : public CCLabelTTF
                {
                public:
                    XLogView()
                        :m_LogMaxLine(10)
                    {
                    }
                    //一組create,直接從CCLabelTTF復(fù)制過(guò)來(lái)
                    static XLogView * create(const char *stringconst char *fontName, float fontSize)
                    {
                        return XLogView::create(string, fontName, fontSize,    CCSizeZero, kCCTextAlignmentCenter, kCCVerticalTextAlignmentTop);
                    }

                    static XLogView * create(const char *stringconst char *fontName, float fontSize, const CCSize& dimensions, CCTextAlignment hAlignment)
                    {
                        return XLogView::create(string, fontName, fontSize, dimensions, hAlignment, kCCVerticalTextAlignmentTop);
                    }
                    static XLogView * create(const char *stringconst char *fontName, float fontSize, const CCSize& dimensions, CCTextAlignment hAlignment, CCVerticalTextAlignment vAlignment)
                    {
                        XLogView *pRet = new XLogView();
                        if (pRet && pRet->initWithString(string, fontName, fontSize, dimensions, hAlignment, vAlignment))
                        {
                            pRet->autorelease();
                            return pRet;
                        }
                        CC_SAFE_DELETE(pRet);
                        return NULL;
                    }
                    static XLogView * createWithFontDefinition(const char *string, ccFontDefinition &textDefinition)
                    {
                        XLogView *pRet = new XLogView();
                        if (pRet && pRet->initWithStringAndTextDefinition(string, textDefinition))
                        {
                            pRet->autorelease();
                            return pRet;
                        }
                        CC_SAFE_DELETE(pRet);
                        return NULL;
                    }
                    //設(shè)置滾動(dòng)日志的最大行數(shù)
                    void setLogMaxLine(int param_max_line)
                    {
                        if (param_max_line < 1)
                        {
                            m_LogMaxLine = 1;
                        }
                        else if (param_max_line > 1024)
                        {
                            m_LogMaxLine = 1024;
                        }
                        else m_LogMaxLine = param_max_line
                    }
                    //取滾動(dòng)日志的最大行數(shù)
                    int getLogMaxLine() const
                    {
                        return m_LogMaxLine;
                    }
                    //清除日志
                    void Clear()
                    {
                        m_LogList.clear();
                        setString("");
                    }
                    //生成日志
                    void VLog(const char * paramFormat, va_list param_argptr)
                    {
                        char sTemp[N];
                        vsnprintf(sTemp, sizeof(sTemp), paramFormat, param_argptr);
                        //刪除超出行數(shù)的日志
                        while ((int)m_LogList.size() > m_LogMaxLine)
                        {
                            m_LogList.erase(m_LogList.begin());
                        }

                        m_LogList.push_back(sTemp);
                        //生成日志
                        m_LogTemp = "";
                        size_t iCount = m_LogList.size();
                        for (size_t i = 0; i < iCount; i++)
                        {
                            if (m_LogTemp.length() >0) m_LogTemp += "\n";
                            m_LogTemp += m_LogList[i];
                        }
                        setString(m_LogTemp.c_str());
                        //輸出到控制臺(tái)窗口
                        #ifdef _MSC_VER
                            OutputDebugStringA(sTemp);
                        #endif
                    }
                    void Log(const char * paramFormat, )
                    {
                        va_list argptr;
                        va_start(argptr, paramFormat);
                        VLog(sTemp, sizeof(sTemp), paramFormat, argptr);
                        va_end(argptr);
                    }
                private:
                    string m_LogTemp;                //生成日志的臨時(shí)變量
                    int m_LogMaxLine;                //日志最大的行數(shù)
                    vector<string> m_LogList;       //日志內(nèi)容
                };
            }
            #endif
            在Scene里面,初始化的時(shí)候,調(diào)下面的函數(shù)void HelloWorld::InitLog()
            {
                auto visibleSize = CCDirector::sharedDirector()->getVisibleSize();
                auto pLog = THelloWorldLogView::create("", "宋體", 12, CCSizeMake(200,200), kCCTextAlignmentLeft);
                if (pLog != nullptr)
                {
                    pLog->setAnchorPoint(ccp(0.5, 1));
                    pLog->setPosition(ccp(visibleSize.width - 200, visibleSize.height - 10));
                    this->addChild(pLog);
                }
                m_Log = pLog;
            }
            然后定義m_log 指針和一個(gè)PrintLog方法void HelloWorld::PrintLog(const char * paramFormat, )
            {
                if (m_Log != NULL)
                {
                    va_list argptr;
                    va_start(argptr, paramFormat);
                    m_Log->VLog(paramFormat, argptr);
                    va_end(argptr);
                }
            }
            這樣,就可以在代碼中,輸出日志了
            posted on 2014-03-16 23:15 冬瓜 閱讀(4042) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 原創(chuàng)cocos2dx
            久久高清一级毛片| 久久综合噜噜激激的五月天| 精品99久久aaa一级毛片| 婷婷久久精品国产| 亚洲国产精品高清久久久| 97久久超碰成人精品网站| 久久国产成人| AV色综合久久天堂AV色综合在| 国产精品无码久久久久| 91亚洲国产成人久久精品网址| 亚洲国产成人久久一区久久| 久久精品毛片免费观看| 久久久99精品一区二区| 精品久久久久久无码中文字幕一区| AA级片免费看视频久久| 东方aⅴ免费观看久久av| 999久久久国产精品| 无码人妻精品一区二区三区久久| 久久综合久久鬼色| 青青青国产精品国产精品久久久久| 久久精品国产AV一区二区三区| 久久97久久97精品免视看秋霞| 久久国产精品一国产精品金尊| 合区精品久久久中文字幕一区| 97久久精品人人做人人爽| 无码超乳爆乳中文字幕久久| 免费一级欧美大片久久网| 国产精品久久国产精麻豆99网站| 久久夜色精品国产噜噜噜亚洲AV| 久久亚洲AV无码精品色午夜麻豆| 久久精品亚洲乱码伦伦中文| 久久久久国产一级毛片高清版| 久久99精品国产自在现线小黄鸭| 一本一道久久综合狠狠老| 思思久久99热免费精品6| 一本久久a久久精品综合夜夜| AAA级久久久精品无码区| 九九99精品久久久久久| 久久国产精品成人免费| 99久久国产综合精品麻豆| 99久久婷婷免费国产综合精品|