如何在cocos2dx中打印一个二维数组

How to print a two dimensional array in cocos2dx

我有一个二维数组,我想打印到 visual studio 的 output 以在每次修改时查看结果,我尝试使用 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 的调试 windows,这与写入 std::cout 工作的控制台不同。

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

的方法写入输出 windows

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

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

还有另一种方法,您可以使用 std::stringstd::ostringstream 来 "print" 您的变量进行缓冲,然后只需打印您的字符串以输出 windows 通过 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 几乎相同,只是 "print" 进行缓冲,然后您可以使用 str() 获得一个。但是cocos2d::log使用C风格的字符串,所以c_str()会解决这个问题

查看更多关于 std::ostringstream here