专职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 冬瓜 阅读(1797) | 评论 (0)编辑 收藏

     摘要: editplus是一个非常好用的文本编辑器,还一直有更新。bug非常少,稳定性非常不错,功能也很不错。
特别是代码编编,查找(支持正则表达式),语法加亮,文档编码(DOS,unix,utf-8,Unicode,Ansi等,是我目前看到编辑器中最好的一个)。还有强大编辑功能,如空格转tab,tab转空格,去除尾部空格,块选择等等。
在写代码过程中,块选择,真是很不错。最重要的是它的安装包不到2M!
黑字白底的配置方案看烦了,就重新配置了一下。大家可以参考一下:)  阅读全文
posted @ 2014-05-23 16:42 冬瓜 阅读(3287) | 评论 (2)编辑 收藏

     摘要: (基于2.2.2版本)
这步比较麻烦,不像vs2013那样好设置。参考了很多文章。还是不能解决问题。只有慢慢摸索了。在这里贴出来,希望能让大家能少走点弯路。
还是其于前面的文章提到的mylib这个例子。[cocos2dx笔记003] Vs2013增加静态库工程  阅读全文
posted @ 2014-05-11 13:11 冬瓜 阅读(2159) | 评论 (0)编辑 收藏

     摘要: (基于2.2.2版本,用vs2013编辑代码)
在cocos2dx下有一个external目录,里面有一些要用到的cocos2dx静态库,如Box2D,chipmunk,emscripten,libwebsockets,sqlite3等。但是自己以往积累或第三方其它好用的开源库,想用。如果直接到加到现有的cocos2dx,则会破坏现有Cocos2dx的纯洁性,那只有自己建工程了。
下面图,一步一步显示了创建过程。  阅读全文
posted @ 2014-05-11 12:11 冬瓜 阅读(9754) | 评论 (0)编辑 收藏

今天无意先用google找一下自己的文章,正常,然后用百度的找,结果就看到了这个剽窃者:看引擎(http://www.kankanews.com/ICkengine/categories/program),完全无视cppblog作者的版权和辛苦成果。
不反对转载文章,但是最鄙视那么把文章拿过去后,说是自己的原创。我看了一下,他是用工作把cppblog上面的文章,全部复制过去,然后换成自己的名子,并写上原创。
下面附两张截图。希望剽窃者立刻删除剽窃的文章,或要注意原作者是谁,还有文章来源。


posted @ 2014-05-10 12:15 冬瓜 阅读(1532) | 评论 (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 冬瓜 阅读(2412) | 评论 (0)编辑 收藏

     摘要: 一次,在csdn的一个回复里,看到了basic4android(后面简称B4A),我想这个是什么东西。一查,原来是一个外国人搞的用basic开发android应用,安装包非常小,需要Android SDK。语法和VB基本一样。了解了一下,这个B4A还是相当完备的。对basic有兴趣的朋友,可以去了解一下。B4A的主界面如下  阅读全文
posted @ 2014-05-07 11:13 冬瓜 阅读(1843) | 评论 (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 冬瓜 阅读(5053) | 评论 (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 冬瓜 阅读(2228) | 评论 (0)编辑 收藏

     摘要: C++Builder XE6,这个发布了,同时这次破解也很快发布了(以前,每次更新只是更新防破解,搞的人家懒的破解了),于是,我就有兴趣下载下来试用了,我的目的是Fire Monkey的移动应用开发。  阅读全文
posted @ 2014-04-29 14:01 冬瓜 阅读(8648) | 评论 (5)编辑 收藏

仅列出标题
共17页: First 5 6 7 8 9 10 11 12 13 Last