zoukankan      html  css  js  c++  java
  • Cocos2d-x 解惑

    2013-8-17

    一、Http相关:

    1. 1>libExtensions.lib(HttpClient.obj) : error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 "private: bool __thiscall cocos2d::extension::CCHttpClient::lazyInitThreadSemphore(void)" (?lazyInitThreadSemphore@CCHttpClient@extension@cocos2d@@AAE_NXZ) 中被引用  
    2. 1>libExtensions.lib(HttpClient.obj) : error LNK2019: 无法解析的外部符号 __imp__pthread_detach,该符号在函

    解决办法:项目属性->链接器->附加依赖项中添加:libcurl_imp.lib、pthreadVCE2.lib 这两个库。再编译,走你。

    、在程序编译没错,调试的时候却提示到:

    void CCObject::retain(void)
    {
        CCAssert(m_uReference > 0, "reference count should greater than 0");
    
        ++m_uReference;
    }
    通过堆栈调试得到是在:

    cardGlobal_array=CCArray::createWithContentsOfFile("card.plist");
    cardGlobal_array->retain();

    有问题,通过F11进入到源码内部查处原因是图片加载的目录不对,在默认加载目录里并没有card.plist这张图片。

    解决办法:加载时添加子路径,如:plist/card.plist。

    2013-8-22

    程序运行一两秒后出现以下错误提示:

    un-Time Check Failure the value of ESP was not properly saved across a function call. this is usually a result of calling a function 
            declared with one calling convention with a function pointer declared with a different calling convention.
    解决办法:在全局定时器上出了问题(什么是全局定时器?百度以下),在win平台上开发,那么声明函数加上关键字__stdcall,也就是在MyListener对全局定时器的声明和定义前加上:__stdcall

    (PS:科普:__stdcall是函数调用约定的一种,函数调用约定主要约束了两件事:
    1.参数传递顺序
    2.调用堆栈由谁(调用函数或被调用函数)清理
    thiscall仅仅应用于“C++”成员函数。this指针存放于CX/ECX寄存器中,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。)



    2013-8-29

    在ScrollView中,水平拖动的图片会出现突然在竖直方向闪现的情况

    解决办法:

    在ScrollView的定义中,需要把ScrollView包容的layer的高度设置成和scrollView高度大小一致。

    	campContainer_layer->setContentSize(CCSize(140*(campCard_array->count()+3)+60+40,290));
        
            CCScrollView* campScroll = CCScrollView::create(CCSize(400,290),campContainer_layer);


    2013-9-22

    再次出现以下错误提示:

    un-Time Check Failure the value of ESP was not properly saved across a function call. this is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

    但是这次的问题用上述的方法无法解决了,因为错误的函数不是出现在自定义的函数里,而是在ccTouchEnded里,这样就没办法再用 __stdcall的方法了。

    既然这个不行,那就只能在函数的代码中找错误。

    最终用排除法找出错误是在:

    cardLayer_other->runAction(CCSequence::create(
    			CCScaleTo::create(0.1f,0.9f),
    			CCScaleTo::create(0.1f,0.8f)));
    聪明的你肯定发现这样写是不对的。好吧,我承认犯这种错误很低级!谁让我目前还对action较为生疏呢~

    于是我改成这样子:

    CCActionInterval* actionTo = CCScaleTo::create(0.1f,0.9f);
    CCActionInterval* actionBack = actionTo->reverse();
    cardLayer_other->runAction(CCSequence::create(actionTo,actionBack,NULL));
    运行下,又报错。错在第二个恢复动作不能直接用
    actionTo->reverse();
    因为只有CCScaleBy 这种的动作才能直接用reverse();其他的就只能勤快点写完整咯。那么,改吧:

    CCActionInterval* actionTo = CCScaleTo::create(0.1f,0.9f);
    CCActionInterval* actionBack = CCScaleTo::create(0.1f,0.8f);
    cardLayer_other->runAction(CCSequence::create(actionTo,actionBack,NULL));
    好了,完美运行!


    2013-11-28

    应用运行到析构函数的时候经常出现内存早已free等类似的错误,查看array释放有retain(),如果有的话,查看在构造函数中是否有将全局的数组或者字符串 初始化,如果有的话,注释掉它吧。。。(虽然知道这很不科学,但是很有效,呵呵)


    2014-01-13

    VS调试过程中,有些情况设置断点无响应,提示:当前不会命中断点等等,解决办法:

    请在断点选项里设置允许源代码与原始版本不同。这个是针对单个断点进行设置。如果要对所有的断点进行设置,则要在“工具”——〉“选项”——〉“调试”——〉“要求源文件与原始版本完成匹配”去掉勾。如果还不行,就按下面这样试试:

    以前为了调试“C++ Runtime Component”,把属性->调试里的“UI任务”和“代理任务”都改成“仅限本机”了。现在改回来,改成“仅限托管”。


    2014-05-15

    二维数组的初始化问题,

    如果是定义局部的二维数组,则直接初始化,如:

    int star[2][3] = {{}};

    如果是在类中声明的二维数组,则不能像上面这样初始化,应该如下:

    class star

    {

    public:

    static int star[2][3];

    };

    在下面初始化

    int star::star[2][3] = {{}};

  • 相关阅读:
    巴洛克式和哥特式的区别
    推荐阅读书籍,是时候再行动起来了。
    AtCoder ABC 159F Knapsack for All Segments
    AtCoder ABC 159E Dividing Chocolate
    AtCoder ABC 158F Removing Robots
    AtCoder ABC 158E Divisible Substring
    AtCoder ABC 157F Yakiniku Optimization Problem
    AtCoder ABC 157E Simple String Queries
    AtCoder ABC 157D Friend Suggestions
    AtCoder ABC 156F Modularness
  • 原文地址:https://www.cnblogs.com/start530/p/3834362.html
Copyright © 2011-2022 走看看