1

我已经解决这个问题将近一周了,但我仍然有 700 多个错误。绝对需要你的帮助!谢谢。

问题:需要使用

适用于 Windows Phone 8 的 Cocos2dx

在我的C++/DirectX Visual Studio 2012 项目中,该项目也使用 C#/XAML UI。

给定:Cocos2dx-wp8 作为 Application .exe 项目从http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download下载

解决方案

  1. 在 Visual Studio 2012 中打开我的 C#/XAML/DirectX Game1 解决方案 .sln 项目。
  2. 在解决方案资源管理器中右键单击解决方案。添加 --> 现有项目...
  3. 选中:\cocos2dx-0.13.0-wp8-0.8\HelloWorld\cocos2d.vcxproj 并点击打开
  4. 将 HelloWorld 项目重命名为“Cocos2dxWp8”之类的其他名称,并删除 HelloWorld Classes 文件夹和您不想要的所有资产(如松鼠和背景图像)
  5. 单击属性--> 配置属性--> 常规--> 配置类型--> 从“应用程序(.exe)更改为“动态库(.dll)”

  6. 添加了属性的新路径 --> C/C++ --> 附加包含目录 -->

$(项目目录); $(中间输出路径); ..\cocos2dx\包括;..\cocos2dx; ..\cocos2dx\platform\third_party\win8_metro\libpng; ..\cocos2dx\platform\third_party\win8_metro\zlib; ..\cocos2dx\平台\第三方\win8_metro;....\Cocos2dxWp8; ..\cocos2dx\平台\win8_metro;..\cocos2dx\platform\third_party\win8_metro\freetype; ..\cocos2dx\platform\third_party\win8_metro\libjpeg; ..\CocosDenshion\include; ..\cocos2dx\平台;公司;%(附加包含目录)

  1. 更新了 Properties --> Linker --> Input --> Additional Dependencies --> 中的路径

..\cocos2dx\platform\third_party\win8_metro\libraries\x86\freetype.lib; ..\cocos2dx\platform\third_party\win8_metro\libraries\x86\zlib.lib; ..\cocos2dx\platform\third_party\win8_metro\libraries\x86\libjpeg.lib; ..\cocos2dx\platform\third_party\win8_metro\libraries\x86\libpng.lib; dxguid.lib;xaudio2.lib;dxgi.lib;uuid.lib;d3d11.lib;%(AdditionalDependencies)

  1. 更新了 VC++ 目录中的路径:

$(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\third_party\win8_metro\freetype; $(解决方案目录); $(项目目录)公司;$(SolutionDir)GameWp8Dx\Cocos2dxWp8\CocosDenshion\include; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\third_party\win8_metro\zlib; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\third_party\win8_metro\libraries; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\third_party\win8_metro\libpng; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\third_party\win8_metro\libjpeg; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\third_party\win8_metro\libxml2; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\third_party\win8_metro\; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform\win8_metro; $(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\platform;$(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx\include;$(SolutionDir)GameWp8Dx\Cocos2dxWp8\cocos2dx; $(包含路径)

从这里,它构建成功! 它输出一个 .dll 文件但没有 .lib 文件,所以...

  1. 在 CCPlatformMacros.h 中,我启用了将类导出到 dll:

    #define CC_DLL __declspec(dllexport)

是的,.lib 正在被写入...

715 个错误,772 个警告

错误 773 er​​ror LNK2001: unresolved external symbol "public: virtual __thiscall cocos2d:: CCKeypadHandler ::~CCKeypadHandler(void)" (??1CCKeypadHandler@cocos2d@UAE@XZ) F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld \CCSpriteBatchNode.obj Cocos2dXWp8Framework Error 774 error LNK2001: 无法解析的外部符号“public: virtual __thiscall cocos2d::CCKeypadHandler::~CCKeypadHandler(void)” (??1CCKeypadHandler@cocos2d@UAE@XZ)

我已经包含了定义 CCKeyHandler 类的头文件(在 CCKeypadDelegate.h 中),并且 CCSpriteBatchNode.h 也在同一个包含文件夹中。

类签名如下所示:

class CC_DLL CCKeypadHandler : public CCObject
class CC_DLL CCSpriteBatchNode : public CCNode, public CCTextureProtocol

错误继续存在...

F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\cocos2dorig.obj Cocos2dXWp8Framework Error 775 error LNK2001: unresolved external symbol "public: virtual __thiscall cocos2d::CCKeypadHandler::~CCKeypadHandler(void)" (??1CCKeypadHandler@cocos2d @@UAE@XZ) F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\CCImage_win8_metro.obj Cocos2dXWp8Framework

...

错误 1482 error LNK2001: unresolved external symbol "public: virtual void __thiscall cocos2d::CCTMXMapInfo::textHandler(void *,char const *,int)" (?textHandler@CCTMXMapInfo@cocos2d@UAEXPAXPBDH@Z) F:\src\WindowsPhone \GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\CCDrawingPrimitives.obj Cocos2dXWp8Framework Error 1483 error LNK2001: unresolved external symbol "public: virtual void __thiscall cocos2d::CCTMXMapInfo::textHandler(void *,char const *,int)" (?textHandler@CCTMXMapInfo @cocos2d@UAEXPAXPBDH@Z) F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\cocos2d.obj Cocos2dXWp8Framework Error 1484 error LNK2019: unresolved external symbol "public: virtual __thiscall cocos2d::CCKeypadDispatcher::~CCKeypadDispatcher(void) “ (??1CCKeypadDispatcher@cocos2d@UAE@XZ) 在函数中引用”public: virtual void * __thiscall cocos2d::CCKeypadDispatcher::`向量删除析构函数'(unsigned int)" (??_ECCKeypadDispatcher@cocos2d@UAEPAXI@Z) F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\CCDirector。 obj Cocos2dXWp8Framework Error 1485 error LNK2001: unresolved external symbol "public: virtual __thiscall cocos2d::CCKeypadDispatcher::~CCKeypadDispatcher(void)" (??1CCKeypadDispatcher@cocos2d@UAE@XZ) F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8 \HelloWorld\CCLayer.obj Cocos2dXWp8Framework Error 1486 error LNK2001: unresolved external symbol "public: virtual __thiscall cocos2d::CCKeypadDispatcher::~CCKeypadDispatcher(void)" (??1CCKeypadDispatcher@cocos2d@UAE@XZ) F:\src\WindowsPhone\ GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\CCEGLView_win8_metro。obj Cocos2dXWp8Framework Error 1487 error LNK1120: 48 unresolved externals F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\Win32\Debug\cocos2d\Cocos2dXWp8Framework.dll Cocos2dXWp8Framework

解决方案/项目路径:

F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx.sln F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\GameWp8Dx\GameWp8Dx.csproj F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\GameWp8DxComponent\GameWp8DxComponent.vcxproj F:\src\WindowsPhone \GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\cocos2d.vcxproj

Cocos2d 包含文件:

F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\cocos2dx\include F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\cocos2dx\platform

此处构建的目标文件:

F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\HelloWorld\Win32\Debug*.obj

.dll / .lib 在这里构建:

F:\src\WindowsPhone\GameWp8Dx\GameWp8Dx\Cocos2dxWp8\Win32\Debug\cocos2d

抱歉,这篇文章很长,但我希望有足够的细节来解决这个问题。谢谢。

4

2 回答 2

1

我创建了一个新的动态库项目,然后复制了这些文件。我构建了 .dll 和 .lib,但不适用于 ARM CPU 构建目标(用于设备)。此外,Cocos2dx 导演和场景层的设置似乎不适用于呈现到 DrawingSurfaceBackgroundGrid 控件的现有 C#/XAML 和 DirectX 项目。所以最后,我没有在我的混合项目设置中使用 Cocos2dx。

如果其他人有更好的建议,请告诉我。谢谢。

于 2012-12-04T07:56:57.890 回答
0

主题:也许您没有在 SLN 中正确设置项目依赖项?

我让 Cocos2d 部分使用 XAML+D3d 互操作,但由于调用从 XAMLComponent DLL 到 Cocos2d DLL 来回调用,它似乎弄乱了指针和内存。现在我试图将所有 Cocos2D 源文件移动到我的 D3Dcomponent 项目中,但是出现了严重错误,并且我得到了一个奇怪的 kernelbase.dll 第一次机会异常。

题外话:我还尝试在 XAML+D3D 互操作项目上通过 cocos2d-x 完成游戏,并使用 Visual Studio 2012 附带的模板。但是,只显示了一个模糊的背景。我使用的是 DrawingSurfaceBackgroundGrid,后来发现在 Windows Phone 8 上,它有一些与 Z-order 相关的问题。我最终用 DrawingSurface 替换它。

于 2013-10-16T16:53:29.640 回答