cocos2d-x坑的集合

坑1:

如果提示找不到"extensions/ExtensionExport.h",那麼請在附加包含目錄里加上$(EngineRoot)路徑。

坑2:

新版本的Scale9Sprite在cocos2d::ui裏面。

坑3:

cocos2d-x的緩存機制:
原帖地址:
http://blog.csdn.net/natsu1211/article/details/27092903

坑4:

cocos2d-x的觸摸機制:
原帖地址:
http://www.tuicool.com/articles/Rjim6z
http://blog.csdn.net/tom_and_jerry_zhao/article/details/51140561
//添加觸摸響應
    auto listener1 = cocos2d::EventListenerTouchOneByOne::create();
    listener1->setSwallowTouches(true); //不向下傳遞觸摸
    listener1->onTouchBegan = [&](cocos2d::Touch* touch, cocos2d::Event* evt)->bool
    {
        if (_curState == Button::ButtonState::ButtonState_Disable)
            return false;
        auto target = evt->getCurrentTarget();//獲取目前的點擊對象
        //獲取點擊的座標在target的座標系中的位置
        cocos2d::Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
        cocos2d::Size targetSize = target->getContentSize();
        cocos2d::Rect rct = { 0,0,targetSize.width,targetSize.height };
        bool isClicked = rct.containsPoint(locationInNode);
        if (isClicked)
        {
            if (_curState == Button::ButtonState::ButtonState_Up)
            {
                this->setButtonState(Button::ButtonState::ButtonState_Down);
                this->onButtonPressed();
            }
            return true;
        }

        return false;//這裏返回false那麼後面的onTouchMoved,onTouchEnded就不會被調用了
    };

    listener1->onTouchEnded = [&](cocos2d::Touch* touch, cocos2d::Event* evt)->void
    {
        auto target = evt->getCurrentTarget();//獲取目前的點擊對象
                                              //獲取點擊的座標在target的座標系中的位置
        cocos2d::Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
        cocos2d::Size targetSize = target->getContentSize();
        cocos2d::Rect rct = { 0,0,targetSize.width,targetSize.height };
        bool isInRegion = rct.containsPoint(locationInNode);
        if (isInRegion)
        {
            if (_curState == Button::ButtonState::ButtonState_Down)
            {
                this->setButtonState(ButtonState::ButtonState_Up);
                this->onButtonReleased();
            }
        }
    };

    listener1->onTouchMoved = [&](cocos2d::Touch* touch, cocos2d::Event* evt)->void
    {
        auto target = evt->getCurrentTarget();//獲取目前的點擊對象
                                              //獲取點擊的座標在target的座標系中的位置
        cocos2d::Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
        cocos2d::Size targetSize = target->getContentSize();
        cocos2d::Rect rct = { 0,0,targetSize.width,targetSize.height };
        bool isInRegion = rct.containsPoint(locationInNode);
        if (!isInRegion)
        {
            if (_curState == Button::ButtonState::ButtonState_Down)
            {
                this->setButtonState(ButtonState::ButtonState_Up);
                this->onButtonMoveOutsideRange();
            }
        }
    };

    //添加按鍵響應
    cocos2d::Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener1, _upSprite);

別忘了在onExit裏面把這個不用的listener1註銷掉,否則會報錯

void Button::onExit()
{
    //在exit之前,得釋放一些不用的資源
    cocos2d::Director::getInstance()->getEventDispatcher()->removeEventListenersForTarget(_upSprite);
    UIObject::onExit();
}

cocos2d-x打包android包命令

進入proj.android目錄
運行cocos compile -p android

在cocos2d-x c++項目中集成lua

1.首先去lua的官網下載lua源碼
這裏寫圖片描述
2.將源碼解壓出來放入我們的項目Classes目錄裏面
這裏寫圖片描述
3.修改adnroid.mk文件
這裏寫圖片描述
4.運行cocos compile -p android
期間可能會遇到llex.c文件中出錯,照下面這樣改即可:
這裏寫圖片描述
當然,這樣處理比較暴力,如果有更好的辦法,請告知在下。這樣修改之後,應該就能正確的打包了。但是打出來的包運行時候黑屏了,我的天哪,待我找找辦法。

有些文件在android平臺上找不到

請使用cocos2d::FileUtils::fullPathForFilename(filename),一次性解決所有煩惱。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章