我有一个二维数组,我想将其打印到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做到这一点?

最佳答案

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

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

首选,您必须将项目类型从Win32 Application Project更改为Win32 Console Project。这是Visual Studio的处理方式,在大多数情况下,您的项目是通过cocos2d的控制台自动创建的。您可以看到this post。我不建议采用这种方式IMO。

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

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

CCLOG稍微包装了一下代码,以方便我们在运行时通常记录资源检查,错误,文件处理等情况。如果不是这种情况,则可能应该设置断点以查看值是什么。

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

这是一个示例代码:

#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::ostringstream here

08-03 22:14