Cpp-tests中Bugs-458实例有不理解的地方,请教大家

我用的是cocos2d-x-3.2版本,对于cpp-tests---->BugsTest中的Bug-458有不理解的地方,想请教下大家。先看源码:


bool Bug458Layer::init()
{
    if(BugsTestBaseLayer::init())
    {
        // ask director the the window size
        auto size = Director::getInstance()->getWinSize();

        auto question = new QuestionContainerSprite();
        auto question2 = new QuestionContainerSprite();
        question->init();
        question2->init();

//        ;
//        ;
        auto sprite = MenuItemSprite::create(question2, question, CC_CALLBACK_1(Bug458Layer::selectAnswer, this) );
        question->release();
        question2->release();

        auto layer = LayerColor::create(Color4B(0,0,255,255), 100, 100);
        auto layer2 = LayerColor::create(Color4B(255,0,0,255), 100, 100);
        auto sprite2 = MenuItemSprite::create(layer, layer2, CC_CALLBACK_1(Bug458Layer::selectAnswer, this) );

        auto menu = Menu::create(sprite, sprite2, nullptr);
        menu->alignItemsVerticallyWithPadding(100);
        menu->setPosition(Vec2(size.width / 2, size.height / 2));

        // add the label as a child to this Layer
        addChild(menu);

        return true;
    }
    return false;
}

void Bug458Layer::selectAnswer(Ref* sender)
{
    log("Selected");
}

我发现sprite2在按下去时会变成红色的,离开后会恢复到蓝色的,即sprite2的功能是完全与我预期一样的!

  1. 但是同样的创建方法,为什么sprite没有这个效果呢?sprite不管我是否按下去,文字颜色都不会变化,始终是红色!
  2. 为什么question和question2要调用下release,而同样方式创建的layer和layer2却不需要呢?

请知道的朋友指教下!

第2个问题,我有答案了。通过create创建的对象在实现的时候,已经调用了autorelease(),所以不需要再release,但是question是直接new出来的,所以要添加一次release。
第1个问题,还没答案,期待!

再问下,QuestionContainerSprite::init()中layer和corner的position都设了负数值,这是怎么回事,想不明白!?!