【问题标题】:Error C++ Cocos2D Sprite::create()错误 C++ Cocos2D Sprite::create()
【发布时间】:2015-09-21 16:15:13
【问题描述】:

我正在使用 Cocos2Dx 开发一个游戏,但我遇到了一些问题,比如为 Sprite 打开一个图像。

auto background = Sprite::create("images/MainMenuScreen/Background.png");

错误是:

"Debug Assertion Failed!

Program:
...mbsCocos\TheCatacombs\proj.win32\Debug.win32\TheCatacombs.exe
File: f:\dd\vctools\crt\crtw32\startup\crt0dat.c
Line: 1035

Expression: _wpgmptr != NULL

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts."

错误不会出现在 Visual Studio 上,而是在游戏启动时出现在游戏本身上。

问题是那行,如果我评论它,错误就会消失。

路径正确且文件存在,我已经检查过了,而且错误不涉及图像或路径。

有什么想法吗?

【问题讨论】:

  • 该错误看起来与该行无关。这个 sprite 创建上方的行发生了什么?
  • 这是在“Size visibleSize = Director::getInstance()->getVisibleSize();”上方发生的情况。但我不认为这是问题所在。如果我在帖子中评论该行,错误就会消失。
  • 您是否尝试在发布模式下运行程序?此外,您的代码中的错误可能在其起源很久之后就出现了。所以我可能会检查所有与精灵相关的代码
  • 那你能包含更多代码吗?这很奇怪。
  • Blake_Lead:是的,我尝试在发布模式下运行,同样的错误。 TankorSmash:还有什么其他代码?

标签: c++ cocos2d-x assertion


【解决方案1】:

通常由 c++ 运行时的堆内部产生的错误表明程序中其他地方发生了问题,并且现在您正试图分配更多内存。

Microsoft C/C++ 运行时提供了验证堆的调试方法,通过允许您在应用程序的关键点显式测试堆的状态,它们可以非常有助于隔离堆损坏的来源。

_CrtValidateHeap

【讨论】:

    【解决方案2】:

    您有用于搜索该图像的文件夹吗? 尝试: 在 AppDelegate.cpp 函数 applicationDidFinishLaunching() 中添加这一行:

    FileUtils::getInstance()->addSearchPath("images");
    

    如果图片文件夹在Re​​sources文件夹里,还是试试

    FileUtils::getInstance()->addSearchPath("images/MainMenuScreen");
    

    【讨论】:

      【解决方案3】:

      this MSDN page发现_wpgmptr包含了可执行文件的完整路径,但必须和wmain()一起使用,而不是main()

      我的项目使用的是tWinMain()。当我更改为 wmain() 时,问题就消失了。这是一个快速修复,因为“hello world”项目使用tWinMain()并正常运行。

      如果有人知道此修复程序为何有效,请告诉我们!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-07
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 2011-11-14
        • 1970-01-01
        • 1970-01-01
        • 2014-03-16
        相关资源
        最近更新 更多