如何在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 做到这一点?
CCLOG
或 cocos2d::log
使用 Visual Studio 的调试 windows,这与写入 std::cout
工作的控制台不同。
因此,有两种方法可以解决您的问题:使用 std::cout
写入控制台或使用不同于 CCLOG
的方法写入输出 windows
首先,您必须将项目类型从 Win32 应用程序项目更改为 Win32 控制台项目。这有点像 Visual Studio 的东西,在大多数情况下,您的项目是通过 cocos2d 的控制台自动创建的。可以看到this post。我不推荐这种方式 IMO。
第二个选择,使用自己的代码写入讨论here的输出。
还有另一种方法,您可以使用 std::string
和 std::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
我有一个二维数组,我想打印到 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 做到这一点?
CCLOG
或 cocos2d::log
使用 Visual Studio 的调试 windows,这与写入 std::cout
工作的控制台不同。
因此,有两种方法可以解决您的问题:使用 std::cout
写入控制台或使用不同于 CCLOG
首先,您必须将项目类型从 Win32 应用程序项目更改为 Win32 控制台项目。这有点像 Visual Studio 的东西,在大多数情况下,您的项目是通过 cocos2d 的控制台自动创建的。可以看到this post。我不推荐这种方式 IMO。
第二个选择,使用自己的代码写入讨论here的输出。
还有另一种方法,您可以使用 std::string
和 std::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