用vs2012编译cocos2dx-3.9
这几天想玩一下cocos2dx3.9新版本的东西,但是公司电脑配置不够,开个vs2012都卡的不行,更别提高版本的了。因为cocos2dx-3.9中使用了好多c++11的规范,而vs2012有好多C++11规范不支持,所以生成解决方案失败。只需要修改一些代码的写法就可以了,C++11规范的写法只是新奇了一些,编译器不支持,换个写法我们照样可以实现。下面是代码的修改对比。
---------------------------------------------------------------------------------------------------------
第一处:
NavMeshTest.cpp中:
void NavMeshBaseTestDemo::createAgent(const Vec3 &pos)
{
...
AgentUserData *data = new AgentUserData{ 0.0f };
...
}
改成:
void NavMeshBaseTestDemo::createAgent(const Vec3 &pos)
{
...
AgentUserData *data = new AgentUserData; data->time = 0.0f;
...
}
--------------------------------------------------------------------------------------------------------
第二处:
DrawPrimitivesTest.cpp中:
PrimitivesCommandTest::PrimitivesCommandTest()
{
// draws a quad
V3F_C4B_T2F data[] = {
{{0, 0,0}, {255, 0, 0,255}, {0,1}},
{{200, 0,0}, {0, 255,255,255}, {1,1}},
{{200,200,0}, {255,255, 0,255}, {1,0}},
{{0, 200,0}, {255,255,255,255}, {0,0}},
};
...
}
改成:
PrimitivesCommandTest::PrimitivesCommandTest()
{
V3F_C4B_T2F data[4];
data[0].vertices = Vec3(0,0,0); data[0].colors = Color4B(255,0,0,255); data[0].texCoords = Tex2F(0,1);
data[1].vertices = Vec3(200,0,0); data[1].colors = Color4B(0,255,255,255); data[1].texCoords = Tex2F(1,1);
data[2].vertices = Vec3(200,200,0); data[2].colors = Color4B(255,255,0,255); data[2].texCoords = Tex2F(1,0);
data[3].vertices = Vec3(0,200,0); data[3].colors = Color4B(255,255,255,255); data[3].texCoords = Tex2F(0,0);
...
}
上面两处修改中原来的版本用到了C++11中初始化列表(Initializer lists)的部分。这个构想是结构或是数组能够依据成员在该结构内定义的顺序通过给予的一串引数来产生。这些初始化列表是递归的,所以结构的数组或是包含其他结构的结构可以使用它们。这对静态列表或是仅是把结构初始化为某值而言相当有用。C++有构造函数,能够重复对象的初始化。但单单只有那样并不足以取代这项特色的所有机能。在C++03中,只允许在严格遵守POD的定义和限制条件的结构及类型上使用这项机能,非POD的类型不能使用,就连相当有用的STL容器std::vector也不行。C++11将会把初始化列表的概念绑到类型上,称作std::initializer_list。这允许构造函数或其他函数像参数般地使用初始化列表。因为初始化列表是真实类型,除了类型构造式之外还能够被用在其他地方。正规的函数能够使用初始化列表作为引数。vs2013及以上版本支持初始化列表功能,但是vs2012不支持。
--------------------------------------------------------------------------------------------------------
第三处:
ActionManagerTest.h中
class StopActionsByFlagsTest : public ActionManagerTest
{
...
const unsigned int kMoveFlag = 0x01;
const unsigned int kScaleFlag = 0x02;
const unsigned int kRotateFlag = 0x04;
const unsigned int kRepeatForeverFlag = 0x08;
};
改成:
// 并将类成员的初始化放到构造函数初始化列表中
class StopActionsByFlagsTest : public ActionManagerTest
{
StopActionsByFlagsTest::StopActionsByFlagsTest()
: kMoveFlag(0x01)
, kScaleFlag(0x02)
, kRotateFlag(0x04)
, kRepeatForeverFlag(0x08)
{
}
...
const unsigned int kMoveFlag;
const unsigned int kScaleFlag;
const unsigned int kRotateFlag;
const unsigned int kRepeatForeverFlag;
};
这里原来的版本用到了C++11中非静态成员初始化(Non-static data member initializers)的部分,在C++11标准中,类的非静态成员可以在类的定义中声明并直接初始化类的非静态成员初始化。vs2013中支持这个部分,但是vs2012不支持所以将初始化放到构造函数中。
作者:郭小雷
出处:http://www.cnblogs.com/Ray1024/
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的作者及详细链接,否则作者将保留追究其法律责任。
欢迎大家学习、共享,如果文章中有错误或漏洞,请大家在评论区留言!!
出处:http://www.cnblogs.com/Ray1024/
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的作者及详细链接,否则作者将保留追究其法律责任。
欢迎大家学习、共享,如果文章中有错误或漏洞,请大家在评论区留言!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?