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] = {{}};

  • 相关阅读:
    JS权威指南读书笔记(二)
    JS权威指南读书笔记(一)
    NodeList和HTMLCollection区别
    2016年前端技术展望
    Label标签for属性
    JavaScript Array vs new Array区别
    禁止滚动事件方法
    shim和polyfill 区别解释
    Html5知识精粹纪录
    前端url 相关设置获取总结
  • 原文地址:https://www.cnblogs.com/start530/p/3834362.html
Copyright © 2011-2022 走看看