cocos不打印信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cocos不打印信息相关的知识,希望对你有一定的参考价值。

参考技术A 新建的是一个lua的项目 但是使用print方法打印的时候居然在控制台没有输出 。 在config.lua里面 debug也是设置正确的

思来想去找原因 在appbase.lua里面发现了一个debug>1的判断 把里面的注释掉 使用print就可以打印了

后来又去查找资料 原来我们构建的模拟器是release版本 所以输出不了log 只有debug模式的版本怎么构建 还没有研究 等以后奉上

PS:Framework 里面的预编译库都是 release 版本的,所以使用 LOG() 这个宏打印的 log 都没有输出。
开发者如果需要使用 log 输出进行调试,对于不同语言的工程使用相应的接口:
cpp : log(“any string”)
lua : release_print(“any string”)
js : cc.log(“any string”)

如果大家在xcode上面运行的项目 一定记得要设为debug模式 不然也打印不出log

如何在 cocos2dx 中打印二维数组

【中文标题】如何在 cocos2dx 中打印二维数组【英文标题】:How to print a two dimensional array in cocos2dx 【发布时间】:2017-08-21 10:29:37 【问题描述】:

我有一个二维数组,我想打印到 Visual Studio 的 输出 以查看每次修改的结果,我尝试使用 std::cout,但它不起作用,如果我使用CCLOG,该函数会在每次调用它时自动写一个换行符,这不是一个二维数组的漂亮解决方案,我也尝试过CClog,不确定与CCLOG有什么区别,但这次它甚至给出编译错误:(

我希望输出是:

1,2,4,4,5
5,5,4,3,0
4,4,4,4,7
6,6,6,6,6

这是我尝试过的:

void HelloWorld::PrintBrickArray() 
    CCLOG("will print brick array");
    std::cout << "===Begin of Array ====" << std::endl;
    for (int i = 0; i < MATRIX_Y; i++) 
        for (int j = 0; j < MATRIX_X; j++) 
            //CCLog("%d", this->brickArray[i][j]);
            std::cout << this->brickArray[i][j] << ' ';
        
        std::cout << std::endl;
    
    std::cout << "*****END OF Array *****" << std::endl;
    std::cout.flush();

如何用 coco2dx 做到这一点?

【问题讨论】:

【参考方案1】:

CCLOGcocos2d::log 使用 Visual Studio 的调试窗口,这与写入 std::cout 工作的控制台不同。

因此,有两种方法可以解决您的问题:使用std::cout 写入控制台或使用与CCLOG 不同的方法写入输出窗口

第一选择,您必须将项目类型从 Win32 应用程序项目更改为 Win32 控制台项目。这有点像 Visual Studio 的东西,在大多数情况下,您的项目是通过 cocos2d 的控制台自动创建的。你可以看到this post。我不推荐这种方式 IMO。

第二种选择,使用您自己的代码写入讨论here的输出。

还有另一种方法可以使用std::stringstd::ostringstream 将变量“打印”到缓冲区,然后通过CCLOG 将字符串打印到输出窗口

CCLOG 对代码进行了一点包装,以便于我们记录资源检查、错误、文件处理等通常在运行时发生的情况。如果不是在这些情况下,您可能应该设置断点来查看值是什么。

已编辑:由于您选择了第二种方法,我建议使用std::ostringstream 而不是sprintf,并使用CCLog 而不是OutputDebugString(因为您只需将其打印出来并且独立操作系统,不需要额外的参数)

这是一个示例代码:

#include <vector>
#include <sstream> // for ostringstream
#include <Windows.h> // for OutputDebugStringA
using namespace std;

int main(void)

    // Assuming that you have this 2d array
    vector< vector<int> > arr2d;
    arr2d.push_back( 2,2,1,4 );
    arr2d.push_back( 2,4,1,5 );
    arr2d.push_back( 2,4,7,2 );
    arr2d.push_back( 3,2,0,1 );

    ostringstream buffer;
    for (int i = 0; i < arr2d.size(); i++)
    
        for (int j = 0; j < arr2d[i].size(); j++)
        
            buffer << arr2d[i][j] << '\t';
        
        buffer << endl;
    

    // Assuming that you use OutputDebugString for windows-only
    //OutputDebugStringA(buffer.str().c_str());

    // I recommend this
    cocos2d::log(buffer.str().c_str());

    return 0;

现在,buffer 的工作方式与cout 几乎相同,只是“打印”到缓冲区,然后您可以使用str() 获得一个。但是cocos2d::log使用的是C风格的字符串,所以c_str()会解决这个问题

查看更多关于std::ostringstreamhere

【讨论】:

嘿,我尝试使用sprintfstring +来实现你给出的第二个选择,但没有一个正确的,你能举一个更具体的例子,真的是c ++的新手,谢谢

以上是关于cocos不打印信息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cocos2dx 中打印二维数组

小白问题:cocos2d-x中怎么打印日志

Cocos2d 使用控制台打印的方法

cocos2dx Mac平台 打印长字符串,游戏卡死

Java中打印日志的坑(不打印堆栈信息)

手机调试Android程序出异常时不打印堆栈信息