• <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>

            專職C++

            不能停止的腳步

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

            終于有時間,開始全力投入cocos2dx開發了,之前也積累了不少,不過都是基于2.2.2的,3.1.1的版本也出來一段時間,應該算是成熟了,今天就試試。一個最大的變化就是不需要cygwin了,直接使用ndk中的。要選安裝好python,ant,ndk,andoroid sdk等。
            同樣,使用設置ANDROID_SDK_ROOT,ANT_ROOT,NDK_ROOT等三個環境變量,這個和以前有些不一樣。
            下載cocos2dx 3.1.1,然后解壓,我這里是解壓到G:\cocos2dx\cocos2d-x-3.1.1。運行setup.py,這個會設置cocos運行依賴的環境。3.1.1使用\tools\cocos2d-console\bin\cocos.py創建工程。運行setup.py后,cocos.py就加到PATH,可以直接當命令直接輸入了。
            為了簡化創建,我這里寫了一個批處理,批處理名稱就是工程名,這樣要創建的時候,只要改一下批處理名就可以了。批處理放的位置不限,主要是改目標目錄和包名,就可以了。
            我這里批處理的名稱是:MyTest.bat
            cocos new  %~n0 -p com.zdhsoft -l cpp -d g:\cocos2dx\cocos3
            然后打G:\cocos2dx\cocos3\MyTest\proj.win32\MyTest.sln,就可以編譯運行一個空的cocos2dx了。
            同樣,在G:\cocos2dx\cocos3\MyTest\proj.android運行build_native.py,雙擊就可以了, 然后再運行ant debug,就可以得到一個apk了,就可以放到手機上跑了。
            posted @ 2014-06-24 21:00 冬瓜 閱讀(1834) | 評論 (0)編輯 收藏

                 摘要: editplus是一個非常好用的文本編輯器,還一直有更新。bug非常少,穩定性非常不錯,功能也很不錯。
            特別是代碼編編,查找(支持正則表達式),語法加亮,文檔編碼(DOS,unix,utf-8,Unicode,Ansi等,是我目前看到編輯器中最好的一個)。還有強大編輯功能,如空格轉tab,tab轉空格,去除尾部空格,塊選擇等等。
            在寫代碼過程中,塊選擇,真是很不錯。最重要的是它的安裝包不到2M!
            黑字白底的配置方案看煩了,就重新配置了一下。大家可以參考一下:)  閱讀全文
            posted @ 2014-05-23 16:42 冬瓜 閱讀(3308) | 評論 (2)編輯 收藏

                 摘要: (基于2.2.2版本)
            這步比較麻煩,不像vs2013那樣好設置。參考了很多文章。還是不能解決問題。只有慢慢摸索了。在這里貼出來,希望能讓大家能少走點彎路。
            還是其于前面的文章提到的mylib這個例子。[cocos2dx筆記003] Vs2013增加靜態庫工程  閱讀全文
            posted @ 2014-05-11 13:11 冬瓜 閱讀(2196) | 評論 (0)編輯 收藏

                 摘要: (基于2.2.2版本,用vs2013編輯代碼)
            在cocos2dx下有一個external目錄,里面有一些要用到的cocos2dx靜態庫,如Box2D,chipmunk,emscripten,libwebsockets,sqlite3等。但是自己以往積累或第三方其它好用的開源庫,想用。如果直接到加到現有的cocos2dx,則會破壞現有Cocos2dx的純潔性,那只有自己建工程了。
            下面圖,一步一步顯示了創建過程。  閱讀全文
            posted @ 2014-05-11 12:11 冬瓜 閱讀(9818) | 評論 (0)編輯 收藏

            今天無意先用google找一下自己的文章,正常,然后用百度的找,結果就看到了這個剽竊者:看引擎(http://www.kankanews.com/ICkengine/categories/program),完全無視cppblog作者的版權和辛苦成果。
            不反對轉載文章,但是最鄙視那么把文章拿過去后,說是自己的原創。我看了一下,他是用工作把cppblog上面的文章,全部復制過去,然后換成自己的名子,并寫上原創。
            下面附兩張截圖。希望剽竊者立刻刪除剽竊的文章,或要注意原作者是誰,還有文章來源。


            posted @ 2014-05-10 12:15 冬瓜 閱讀(1547) | 評論 (2)編輯 收藏

            對應的CentOS 6.x也就可能使用!
            下載地址:
            第一步:安裝
            wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.5.4.1/source/syslog-ng_3.5.4.1.tar.gz
            wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.5.4.1/source/eventlog_0.2.12%2B20120504%2B1700.tar.gz
            tar xvf eventlog_0.2.12+20120504+1700.tar.gz 
            cd eventlog-0.2.12+20120504+1700
            ./configure --prefix=/usr/local/services/eventlog 
            make 
            make install 
            cd ..
            tar -xvf syslog-ng_3.5.4.1.tar.gz 
            cd syslog-ng-3.5.4.1/
            export PKG_CONFIG_PATH=/usr/local/services/eventlog/lib/pkgconfig 
            ./configure --prefix=/usr/local/services/syslog-ng
            #如果提示no package 'glib-2.0' found centos
            #那么就用yum install libgnomeui-devel
            make
            make install
            第二步:添加服務
            配置
            將syslog-ng添加為系統服務, 
            vim /etc/init.d/syslog-ng  #內容如下 
            ################################################################################
            #!/bin/bash 
            #  
            # chkconfig: -  60 27 
            # description: syslog-ng SysV script.  
            . /etc/rc.d/init.d/functions 
             
            syslog_ng=/usr/local/services/syslog-ng/sbin/syslog-ng 
            prog=syslog-ng 
            pidfile=/usr/local/services/syslog-ng/var/syslog-ng.pid 
            lockfile=/usr/local/services/syslog-ng/var/syslog-ng.lock 
            RETVAL=0 
            STOP_TIMEOUT=${STOP_TIMEOUT-10} 
             
            start() { 
                    echo -n $"Starting $prog: " 
                    daemon --pidfile=$pidfile $syslog_ng $OPTIONS 
                    RETVAL=$? 
                    echo 
                    [ $RETVAL = 0 ] && touch ${lockfile} 
                    return $RETVAL 
             
            stop() { 
                echo -n $"Stopping $prog: " 
                killproc -p $pidfile -d $STOP_TIMEOUT $syslog_ng 
                RETVAL=$? 
                echo 
                [ $RETVAL = 0 ] && rm -f $lockfile $pidfile 
             
            case "$1" in 
              start) 
                start 
                ;; 
              stop) 
                stop 
                ;; 
              status) 
                    status -p $pidfile $syslog_ng 
                RETVAL=$? 
                ;; 
              restart) 
                stop 
                start 
                ;; 
              *) 
                echo $"Usage: $prog {start|stop|restart|status}" 
                RETVAL=2 
            esac 
            exit $RETVAL 
            ##################################################################################
            #啟動服務
            chmod a+x /etc/init.d/syslog-ng 
            killall syslogd 
            chkconfig --add syslog-ng 
            chkconfig syslog-ng on 
            service syslog-ng start 
            第三步:實際配置
            命令 vi /usr/local/services/syslog-ng/etc/syslog-ng.conf
            #################################################################################################### 
            #############################################################################
            # Default syslog-ng.conf file which collects all local logs into a
            # single file called /var/log/messages.
            #
            @version: 3.5
            @include "scl.conf"
            options {
                    create_dirs(yes);
                    dir_perm(0755);
                    use_dns(no);
                    perm(0644);
                    chain_hostnames(off);
                    stats_freq(30);
            };
            source s_local {
                    system();
                    internal();
            };
            source s_network {
                    udp(ip("0.0.0.0") port(514));
            };
            destination d_local {
                    file("/var/log/messages");
            };
            log {
                    source(s_local);
                    # uncomment this line to open port 514 to receive messages
                    source(s_network);
                    destination(d_local);
            };
            template t_onlymsgip { template("$MSGONLY|$SOURCEIP\n"); };
            template t_onlymsg { template("$MSGONLY\n"); };
            filter f_cgioss { program("CGI") and level(crit); };
            destination d_cgioss { file("/usr/local/services/lzlog/cgioss/$YEAR$MONTH/$YEAR$MONTH$DAY-$HOUR.oss" template(t_onlymsg)); };
            log { source(s_network); filter(f_cgioss); destination(d_cgioss); flags(final);};
            ##### CGI ERR #####
            filter f_cgierr { program("CGI") and level(err); };
            destination d_cgierr { file("/usr/local/services/lzlog/cgierr/$YEAR$MONTH/$YEAR$MONTH$DAY-$HOUR.err" template(t_onlymsgip)); };
            log { source(s_network); filter(f_cgierr); destination(d_cgierr); };
            ##### CGI LOG #####
            filter f_cgilog { program("CGI") ; };
            destination d_cgilog { file("/usr/local/services/lzlog/cgilog/$YEAR$MONTH/$YEAR$MONTH$DAY-$HOUR.log" template(t_onlymsgip)); };
            destination d_minutecgilog { file("/usr/local/services/lzlog/cgilog/$YEAR$MONTH/$YEAR$MONTH$DAY-$HOUR-$MIN.log" template(t_onlymsgip)); };
            #log { source(s_network); filter(f_cgilog); destination(d_minutecgilog); };
            log { source(s_network); filter(f_cgilog); destination(d_cgilog); flags(final);};
            #### SVR BILL #####
            #現在量少,不用分10個文件
            filter f_svrbill { program("SVR") and level(info); };
            destination d_svrbill { file("/usr/local/services/lzlog/svrbill/$YEAR$MONTH/$YEAR$MONTH$DAY-$HOUR.oss" template(t_onlymsg)); };
            log { source(s_local); filter(f_svrbill); destination(d_svrbill); flags(final);};
            filter f_paybill { program("PAY"); };
            destination d_paybill { file("/usr/local/services/lzlog/paybill/$YEAR$MONTH/$YEAR$MONTH$DAY-$HOUR.oss" template(t_onlymsg)); };
            log { source(s_local); filter(f_paybill); destination(d_paybill); flags(final);};
            ###########################################################################################################
            posted @ 2014-05-07 18:32 冬瓜 閱讀(2444) | 評論 (0)編輯 收藏

                 摘要: 一次,在csdn的一個回復里,看到了basic4android(后面簡稱B4A),我想這個是什么東西。一查,原來是一個外國人搞的用basic開發android應用,安裝包非常小,需要Android SDK。語法和VB基本一樣。了解了一下,這個B4A還是相當完備的。對basic有興趣的朋友,可以去了解一下。B4A的主界面如下  閱讀全文
            posted @ 2014-05-07 11:13 冬瓜 閱讀(1865) | 評論 (0)編輯 收藏

            (基于cocos2dx2.2.2)cocos2dx的按鈕類定義在extensions\GUI\CCControlExtension\CCControlButton.h
            在需要用的時候,包括就可以了。
            我們在相應的申明的地方,包含下面三個頭文件

            #include "GUI/CCControlExtension/CCControlButton.h"
            #include "GUI/CCControlExtension/CCScale9Sprite.h"
            #include "GUI/CCControlExtension/CCControl.h"
            然按鈕的事件有如下定義
            enum 
            {
                CCControlEventTouchDown           = 1 << 0,    // A touch-down event in the control.
                CCControlEventTouchDragInside     = 1 << 1,    // An event where a finger is dragged inside the bounds of the control.
                CCControlEventTouchDragOutside    = 1 << 2,    // An event where a finger is dragged just outside the bounds of the control. 
                CCControlEventTouchDragEnter      = 1 << 3,    // An event where a finger is dragged into the bounds of the control.
                CCControlEventTouchDragExit       = 1 << 4,    // An event where a finger is dragged from within a control to outside its bounds.
                CCControlEventTouchUpInside       = 1 << 5,    // A touch-up event in the control where the finger is inside the bounds of the control. 
                CCControlEventTouchUpOutside      = 1 << 6,    // A touch-up event in the control where the finger is outside the bounds of the control.
                CCControlEventTouchCancel         = 1 << 7,    // A system event canceling the current touches for the control.
                CCControlEventValueChanged        = 1 << 8      // A touch dragging or otherwise manipulating a control, causing it to emit a series of different values.
            };
            事件原型定義:typedef void (CCObject::*SEL_CCControlHandler)(CCObject*, CCControlEvent); 并用宏cccontrol_selector定義了 #define cccontrol_selector(_SELECTOR) (SEL_CCControlHandler)(&_SELECTOR) 事件的兩個參數分別的產生事件的對象,具體的事件,這是一個無符號32位整數,事件值就是CCControlEventTouchDown等定義的值。
            在這里,定義了事件函數    void OnTouchDown(CCObject* pSender, extension::CCControlEvent event);
                void OnTouchDragEnter(CCObject* pSender, extension::CCControlEvent event);
                void OnTouchDragExit(CCObject* pSender, extension::CCControlEvent event);
                void OnTouchDragInside(CCObject* pSender, extension::CCControlEvent event);
                void OnTouchDragOutside(CCObject* pSender, extension::CCControlEvent event);
                void OnTouchUpInside(CCObject* pSender, extension::CCControlEvent event);
                void OnTouchUpOutside(CCObject* pSender, extension::CCControlEvent event);
                void OnTouchCancel(CCObject* pSender, extension::CCControlEvent event);
            具體事件實現如下

            void HelloWorld::OnTouchDown(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchDown:%u", event);
            }

            void HelloWorld::OnTouchDragEnter(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchDragEnter:%u", event);

            }

            void HelloWorld::OnTouchDragExit(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchDragExit:%u", event);

            }

            void HelloWorld::OnTouchDragInside(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchDragInside:%u", event);
            }

            void HelloWorld::OnTouchDragOutside(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchDragOutside:%u", event);
            }

            void HelloWorld::OnTouchUpInside(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchUpInside:%u", event);
            }

            void HelloWorld::OnTouchUpOutside(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchUpOutside:%u", event);
            }

            void HelloWorld::OnTouchCancel(CCObject* pSender, extension::CCControlEvent event)
            {
                PrintLog("OnTouchCancel:%u", event);
            }
            然后定義一個按鈕,在init中實現 

                        {
                            extension::CCScale9Sprite * pBtnNormal = extension::CCScale9Sprite::create("up.png");
                            extension::CCScale9Sprite * pBtnDown = extension::CCScale9Sprite::create("up.png");
                            CCLabelTTF * pBtnCaption = CCLabelTTF::create("", "宋體", 30);
                            extension::CCControlButton * pBtn = extension::CCControlButton::create(pBtnCaption, pBtnNormal);
                            pBtn->setBackgroundSpriteForState(pBtnDown, extension::CCControlStateSelected);
                            pBtn->setPosition(GetPosition(pPlayerLayer, "UpPoint"));
                            pBtn->setAnchorPoint(CCPointZero);
                            pBtn->setPreferredSize(CCSizeMake(32, 32));
                            pBtn->setTag(100);
                            this->addChild(pBtn);

                            pBtn->addTargetWithActionForControlEvents(this,    cccontrol_selector(HelloWorld::OnTouchDown), CCControlEventTouchDown);
                            pBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::OnTouchDragEnter), CCControlEventTouchDragEnter);
                            pBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::OnTouchDragExit), CCControlEventTouchDragExit);
                            pBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::OnTouchDragInside), CCControlEventTouchDragInside);
                            pBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::OnTouchDragOutside), CCControlEventTouchDragOutside);
                            pBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::OnTouchUpInside), CCControlEventTouchUpInside);
                            pBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::OnTouchUpOutside), CCControlEventTouchUpOutside);
                            pBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(HelloWorld::OnTouchCancel), CCControlEventTouchCancel);


                            
                        }
            需要注意的事件,不要開啟touch事件,否則會找不到。 也就是這句//CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
            具體的按鈕事件實驗結果說明:
            CCControlEventTouchDown:鼠標該處于按下并曾經點中按鈕時,則觸發一次 
            CCControlEventTouchDragEnter:當鼠標處于按下并曾經點中按鈕的狀態下,鼠標進入按鈕范圍,則觸發一次 ,也就是處于按下狀態,回到該按鈕區域
            CCControlEventTouchDragExit:當鼠標處于按下并曾經點中按鈕的狀態下,鼠標離開按鈕范圍,則觸發一次 ,也就是處于按下狀態,離開該按鈕區域
            CCControlEventTouchDragInside:當鼠標處于按下并曾經點中按鈕的狀態下,鼠標進入按鈕范圍,則觸發,每產生移動,就會觸發 ,
            CCControlEventTouchDragOutside: 當鼠標處于按下并曾經點中按鈕的狀態下,鼠標離開按鈕范圍,則觸發,每產生移動,就會觸發 
            CCControlEventTouchUpInside:當鼠標處于按下并曾經點中按鈕的狀態下,鼠標松開且在按鈕范圍內,則觸發一次,也就是處于按下狀態,并在該按鈕區域放起
            CCControlEventTouchUpOutside:當鼠標處于按下并曾經點中按鈕的狀態下,鼠標松開且在按鈕范圍外,則觸發一次 也就是處于按下狀態,但是已經離開該按鈕區域,再放起
            CCControlEventTouchCancel:暫時沒有發現能用鼠標觸發這個事件的操作
            了解后,就可以根據實際要求實現了
            posted @ 2014-05-05 23:49 冬瓜 閱讀(5078) | 評論 (0)編輯 收藏

            因為要用到調試json的解析結果,所以在這里寫了一個,結果近似json格式

            void PrintJsonList(const string & paramPre, Json::Value & paramValue)
            {
                Json::Value::Members mem = paramValue.getMemberNames();  
                for (auto iter = mem.begin(); iter != mem.end(); iter++)  
                {  
                    cout<<paramPre<<"\""<<*iter<<"\":";  
                    if (paramValue[*iter].type() == Json::objectValue)  
                    {  
                        cout<<paramPre<<"{"<<endl;  
                        PrintJsonList(paramPre + "   ", paramValue[*iter]);  
                        cout<<paramPre<<"},"<<endl;
                    }  
                    else if (paramValue[*iter].type() == Json::arrayValue)  
                    {  
                        cout<<paramPre<<"["<<endl;  
                        auto cnt = paramValue[*iter].size();  
                        for (auto i = 0; i < cnt; i++)  
                        {  
                            Json::Value & pElem = paramValue[*iter][i];
                            if (pElem.type() == Json::arrayValue)
                            {
                                cout <<paramPre<< "["<<endl;
                                PrintJsonList(paramPre + "   ", pElem);  
                                cout <<paramPre<< "],"<<endl;
                            }
                            else if (pElem.type() == Json::objectValue)
                            {
                                cout <<paramPre<< "{"<<endl;
                                PrintJsonList(paramPre + "   ", pElem);  
                                cout <<paramPre<< "},"<<endl;
                            }
                            else PrintJsonList(paramPre + "   ", pElem);  
                        }  
                        cout<<paramPre<<"]"<<endl;  
                    }  
                    else if (paramValue[*iter].type() == Json::stringValue)  
                    {  
                        cout<<"\""<<paramValue[*iter].asString()<<"\""<<endl;  
                    }  
                    else if (paramValue[*iter].type() == Json::realValue)  
                    {  
                        cout<<paramValue[*iter].asDouble()<<endl;  
                    }  
                    else if (paramValue[*iter].type() == Json::uintValue)  
                    {  
                        cout<<paramValue[*iter].asUInt()<<endl;  
                    }  
                    else
                    {  
                        cout<<paramValue[*iter].asInt()<<endl;  
                    }  
                }  
                return;  
            }
            posted @ 2014-04-29 16:30 冬瓜 閱讀(2262) | 評論 (0)編輯 收藏

                 摘要: C++Builder XE6,這個發布了,同時這次破解也很快發布了(以前,每次更新只是更新防破解,搞的人家懶的破解了),于是,我就有興趣下載下來試用了,我的目的是Fire Monkey的移動應用開發。  閱讀全文
            posted @ 2014-04-29 14:01 冬瓜 閱讀(8730) | 評論 (5)編輯 收藏

            僅列出標題
            共17頁: First 5 6 7 8 9 10 11 12 13 Last 
            91久久精品电影| 久久亚洲精品视频| 亚洲狠狠婷婷综合久久久久 | 久久精品国产亚洲AV电影 | 91久久国产视频| 香蕉久久永久视频| 国产精品无码久久综合| AA级片免费看视频久久| 久久综合亚洲鲁鲁五月天| 国产精品久久网| 久久人人爽人人爽人人片av麻烦| 欧美熟妇另类久久久久久不卡 | 久久香蕉国产线看观看精品yw| 精品综合久久久久久97超人| 久久亚洲国产成人精品无码区| 精品一二三区久久aaa片| 久久久久夜夜夜精品国产| 色老头网站久久网| 亚洲欧美日韩精品久久| 亚洲愉拍99热成人精品热久久| 久久精品国产99久久丝袜| 久久天天躁狠狠躁夜夜网站| 亚洲精品国产第一综合99久久| 好属妞这里只有精品久久| 亚洲AV成人无码久久精品老人| 精品久久久无码中文字幕| 国产亚洲精久久久久久无码| 伊人久久成人成综合网222| 日本久久久久久中文字幕| 久久人人爽爽爽人久久久| 国产精品久久婷婷六月丁香| 久久久久国产视频电影| 精品国产一区二区三区久久蜜臀| 成人综合伊人五月婷久久| 亚洲色大成网站WWW久久九九| 久久这里的只有是精品23| 久久噜噜久久久精品66| 久久午夜无码鲁丝片午夜精品| 精品无码久久久久久国产| 曰曰摸天天摸人人看久久久| 国产精品久久久99|