菜鸟教程小白 发表于 2022-12-13 09:09:46

c++ - Cocos2d-x 3.7 C++ CCLoad UIPageView 崩溃


                                            <p><p>这发生在所有平台上,但此描述适用于 iPhone 5s 8.4 模拟器,通过 Xcode。</p>

<p>我一直在使用 C++ 和 cocos2d-x 3.6 版和 Cocostudio 2.3.1 开发游戏。一切都很好,直到我更新到 cocos 3.7 的正式版本。应用程序开始崩溃。其中之一是关于 UIPageView 的特别有趣的。所以我的头文件和cpp文件是这样的:</p>

<p>MKEpochSelectionScene.h</p>

<pre><code>#include &#34;cocos2d.h&#34;
#include &#34;cocos-ext.h&#34;
#include &lt;cocos/ui/CocosGUI.h&gt;

class MKEpochSelectionScene : public cocos2d::Scene {

public:
    bool init();
    CREATE_FUNC(MKEpochSelectionScene);
private:
    cocos2d::ui::PageView * mainPageView;
    void previousEpoch(Ref* pSender, cocos2d::ui::Widget::TouchEventType eEventType);
    void nextEpoch(Ref* pSender, cocos2d::ui::Widget::TouchEventType eEventType);
    void showEpoch(Ref* pSender, cocos2d::ui::Widget::TouchEventType eEventType);
};
</code></pre>

<p>MKEpochSelectionScene.cpp</p>

<pre><code>#include &#34;MKEpochSelectionScene.h&#34;
#include &lt;editor-support/cocostudio/CocoStudio.h&gt;
#include &#34;MKGameScene.h&#34;
#include &#34;MKLevelSelectionScene.h&#34;

USING_NS_CC;

bool MKEpochSelectionScene::init()
{
    if(!Scene::init()) return false;

    auto node = CSLoader::createNode(&#34;UI/Epoch/Layer.csb&#34;);
    this-&gt;addChild(node);

    auto buttonLeft = node-&gt;getChildByName&lt;ui::Button *&gt;(&#34;Button_Left&#34;);
    CCASSERT(buttonLeft != nullptr, &#34;Button left is null&#34;);
    buttonLeft-&gt;addTouchEventListener(CC_CALLBACK_2(MKEpochSelectionScene::nextEpoch,this));

    auto buttonRight = node-&gt;getChildByName&lt;ui::Button *&gt;(&#34;Button_Right&#34;);
    CCASSERT(buttonRight != nullptr, &#34;Button right is null&#34;);
    buttonRight-&gt;addTouchEventListener(CC_CALLBACK_2(MKEpochSelectionScene::previousEpoch,this));

//******CRASHING LINE

    mainPageView = (cocos2d::ui::PageView *)node-&gt;getChildByName(&#34;selectEpoch&#34;);

//******CRASHING LINE

    CCASSERT(mainPageView != nullptr, &#34;Main pageview is nil&#34;);
    CCASSERT(mainPageView-&gt;getPages().size() &gt; 0, &#34;Page view has zero pages&#34;);

return true;
}

//Other methods
//....

}
</code></pre>

<p>Sooo.... 事情发生在 mainPageView 上。崩溃发生在我从设计文件中引用 UIPageView 并将其分配给 mainPageView ivar 的行上。 Crash 什么也没说,但在 NavMesh 文件中崩溃如下:</p>

<p> <a href="/image/tfJ2q.png" rel="noreferrer noopener nofollow"><img src="/image/tfJ2q.png" alt="enter image description here"/></a> </p>

<p>所以当我尝试 pushscene 以从 mainMenu 切换到该场景时,它会崩溃。还有一件事......如果我在 init() 方法中使用局部变量,例如:auto mainPageView 而不是 ivar,它不会崩溃。如果我评论 UIPageView 引用,例如崩溃线 - 它不会崩溃。</p>

<p>我尝试过的:将 Cocostudio 更新为 2.3.1.1,这是最新的。使用该新版本重新发布了所有 UI。清理所有缓存和构建的东西。通过使用新版本创建新项目并从旧版本复制文件并导入到项目中来更新到新的 cocos 引擎版本。这只是说我尝试了几件事。</p>

<p>任何帮助将不胜感激。而且我确信这可能是我的一个愚蠢的错误......</p>

<p>干杯!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为您正在触发此错误:
<a href="https://github.com/cocos2d/cocos2d-x/issues/12962" rel="noreferrer noopener nofollow">https://github.com/cocos2d/cocos2d-x/issues/12962</a> </p>

<p>它将在 v3.7.1 中修复</p></p>
                                   
                                                <p style="font-size: 20px;">关于c&#43;&#43; - Cocos2d-x 3.7 C&#43;&#43; CCLoad UIPageView 崩溃,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31610456/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31610456/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c&#43;&#43; - Cocos2d-x 3.7 C&#43;&#43; CCLoad UIPageView 崩溃