Cocos2d x 是否可以使图层变暗(cocos2dx)
我希望弹出一个新的图层,使图层下的所有图层都变暗 比如记分板,对话框面板,我希望它们能更清晰 可能吗Cocos2d x 是否可以使图层变暗(cocos2dx),cocos2d-x,Cocos2d X,我希望弹出一个新的图层,使图层下的所有图层都变暗 比如记分板,对话框面板,我希望它们能更清晰 可能吗 您的评论欢迎我最近在一个游戏中这样做,我使用Scale9Sprite作为对话框,并使用LayerColor使其他颜色变暗 您需要将z索引最低的LayerColor作为子对象添加到YourDialogBoxClassName(本身需要从Layer继承),我将LayerColor实例添加到z索引0中 此外,如果要添加动作(如ScaleTo)以提供弹出效果,请确保覆盖setScaleX和setScal
您的评论欢迎我最近在一个游戏中这样做,我使用Scale9Sprite作为对话框,并使用LayerColor使其他颜色变暗 您需要将z索引最低的LayerColor作为子对象添加到YourDialogBoxClassName(本身需要从Layer继承),我将LayerColor实例添加到z索引0中 此外,如果要添加动作(如ScaleTo)以提供弹出效果,请确保覆盖setScaleX和setScaleY,使背景层颜色的比例恒定为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();
}
然后在DialogBoxClassName中需要:
bool YourDialogBoxClassName::ccTouchBegan(Touch * touch, Event * event ) {
//Consumes the touch
return true;
}
因为您将背景添加到较低的z索引中,所以触摸仍将注册主对话框精灵(或您正在显示的任何内容)中的菜单项。在我的项目中,我为暂停层执行了以下操作:
CCLayerColor *bgLayer = CCLayerColor::create(ccc4(0,0,0,170));
this->addChild(bgLayer);
//Add other pause menu elements (Title, Resume button, quit button, etc.)
我在一个按钮点击事件中添加了这个,整个屏幕变暗了。只需确保该层位于其他层的顶部。您可以设置弹出层的z顺序,也可以设置所有其他层的不透明度。我认为,这样您就可以实现您想要的效果,您必须使用一个黑色图像。您必须将其放在任何层之前,然后使用不透明度将其设置为半透明。然后在上面添加记分卡层。同时,您必须禁用其他层上的所有按钮。例如,查看我的游戏的最后一个屏幕截图: