我希望弹出一个新图层,使图层下的所有图层变暗。
如记分板,对话框面板,我希望它们能更清晰。有可能吗?
您的评论欢迎
答案 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索引,所以触摸仍将在主对话框精灵(或您正在显示的任何内容)中注册菜单项。