【问题标题】:Cocos2dx 3.x button sprite [C++]Cocos2dx 3.x 按钮精灵 [C++]
【发布时间】:2015-03-07 16:03:06
【问题描述】:

我找不到从给定 .plist 文件而不是普通纹理加载按钮图像的方法。 使用

Button::create("normal_image.png", "selected_image.png", "disabled_image.png");
//or
button->loadTextures("normal_image.png", "selected_image.png", "disabled_image.png");

搜索一个 png 并且不使用缓存中的精灵文件。

我只想放一个精灵而不是 png。 Button 类运行良好,是解决我实际问题的最佳解决方案。

【问题讨论】:

    标签: c++ cocos2d-x cocos2d-x-3.0


    【解决方案1】:

    你应该传递一个 TextureResType

    Button::create("normal_image.png", "selected_image.png", "disabled_image.png", TextureResType::PLIST);
    

    button->loadTextures("normal_image.png", "selected_image.png", "disabled_image.png", TextureResType::PLIST);
    

    【讨论】:

    【解决方案2】:

    好的,在首先创建按钮之前,您需要确保加载 plist,否则它将无法工作。好的,现在让我们创建一个简单的按钮。

    让我们加载 plist 文件。

    "AppDelegate.cpp"
    SpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("yourSprites.plist");
    
    
    "PauseLayer.h"
     #ifndef LEVELCHOOSER_H_
     #define LEVELCHOOSER_H_
    
     #include "cocos2d.h"
     #include "Popup.h"
    
     using namespace cocos2d;
    
     class LevelChooser:public cocos2d::Layer
    {
    Size s;
    Popup *popup;
    cocos2d::MenuItemSprite *pauseButton;
    public:
    virtual bool init();
    virtual void showPopup(cocos2d::Ref* pSender);
    virtual void closePopup(cocos2d::Ref* pSender);
    virtual void playGame(cocos2d::Ref* pSender);
    virtual void playTimeGame(cocos2d::Ref* pSender);
    CREATE_FUNC(LevelChooser);
    };
    
    #endif /* LEVELCHOOSER_H_ */
    

    然后加载按钮。 在源文件中。

        "LevelChooser.cpp"
    bool LevelChoser()
    {
     Size s = Director::getInstance->getWinSize();
     pauseButton = MenuItemSprite::create(
            Sprite::createWithSpriteFrameName("ButtonPauseNormal.png"), "ButtonPauseActive.png", this,
            menu_selector(LevelChooser::showPopup));
     pauseButton->setPosition(s.width/2,s.heigh/2);
     return true;
    }
    void LevelChooser::showPopup(cocos2d::Ref* pSender)
    {
    //do Something
    }
    

    希望你能明白这一点,有什么就写评论吧。

    【讨论】:

    • 感谢您的解决方案。所以我必须使用 MenuItemSprite 而不是 Button?因为 Button 构造的签名不允许我传递 Sprite。
    • 我不能像按钮一样使用 MenuItem。例如,回调函数仅在“touch Up”时调用。按下按钮时我不想调用函数
    • 哦,所以你使用的是 ui::Button 类?因为那个班级有你需要的一切。也许分享更多你的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多