是否有可能使图层变暗(cocos2dx)

时间:2013-09-24 11:19:17

标签: cocos2d-x

我希望弹出一个新图层,使图层下的所有图层变暗。

如记分板,对话框面板,我希望它们能更清晰。

有可能吗?

您的评论欢迎

2 个答案:

答案 0 :(得分:1)

在我的项目中,我为暂停层执行了此操作:

CCLayerColor *bgLayer = CCLayerColor::create(ccc4(0,0,0,170));
this->addChild(bgLayer);

//Add other pause menu elements (Title, Resume button, quit button, etc.)

我在按钮点击事件中添加了这个,整个屏幕变暗。只需确保此图层位于其他图层之上。

答案 1 :(得分:0)

我最近为游戏做了这个,我使用了Scale9Sprite作为对话框,并使用了LayerColor来暗淡其他所有内容。

你需要将最低z索引处的LayerColor作为子项添加到YourDialogBoxClassName(它本身需要从Layer继承),我为我添加了LayerColor实例到z索引0。

此外,如果要添加动作(如ScaleTo)以提供弹出效果,请确保覆盖setScaleX和setScaleY以使背景LayerColor具有1.0f的常量比例。如果向对话框添加轻微旋转,您可能还希望对方法setRotationX和setRotationY执行此操作。

您可能还想要禁用背景图层的所有触摸,我是通过覆盖onEnter和onExit方法来完成的:

void YourDialogBoxClassName::onEnter() {
    Director::getInstance()->getTouchDispatcher()->addTargetedDelegate(this, Menu::HANDLER_PRIORITY, true);
    Layer::onEnter();
}

void YourDialogBoxClassName::onExit() {
    Director::getInstance()->getTouchDispatcher()->removeDelegate(this);
    Layer::onExit();
}

然后你需要在YourDialogBoxClassName:

bool YourDialogBoxClassName::ccTouchBegan(Touch * touch, Event * event ) {
    //Consumes the touch
    return true; 
}

因为您将背景添加到较低的z索引,所以触摸仍将在主对话框精灵(或您正在显示的任何内容)中注册菜单项。