希望有人可以帮助我...我正在跟踪here for CCMenuAdvanced所看到的示例,但最终结果很奇怪,我看到了菜单并滚动了,但是使用boundaryRect属性我似乎无法隐藏它菜单的一部分,并显示我想要的内容。

这是我的代码:

// Setup Menu Alignment
[menuA alignItemsVerticallyWithPadding:0 bottomToTop:NO]; //< also sets contentSize and keyBindings on Mac
menuA.isRelativeAnchorPoint = YES;

menuA.boundaryRect = CGRectMake(0, 100, 230, 200);

[menuA fixPosition];
[self addChild:menuA];


我可以滚动并查看整个列表,这很好,但是我无法设置一个区域一次仅查看菜单的一部分,这是boundaryRect应该做的。以前有人使用过,可以给我一些建议吗?!

谢谢!

最佳答案

好吧,不是来自同一个班级,而是来自本地的滚动菜单。我使用menuItems本身的可见性和透明度。向上滚动时,如果菜单标签接近矩形的边缘,则我将其逐渐淡出为0。当menuItem的锚点位于矩形外部时,我将其可见性设置为NO(因此无法单击)。同样下去。夹紧是棘手的。如果menuItems列表的长度小于边界矩形的高度,或者大于矩形的高度,则必须设置这些属性。像这样的东西(经过编辑,不是实际的代码...不知道它是否可以编译:)):

-(void) fixMenuItemOpacity:(CCMenuItemLabel*) mi{

    float theY = mi.position.y ;

    if (fadeOutZoneHeight_<4.0f) {
        if (theY> self.boundaryRect.origin.y+self.boundaryRect.size.height/2 - fadeOutZoneHeight_) {
            mi.visible=NO;
        } else if( theY < self.boundaryRect.origin.y-self.boundaryRect.size.height/2 + fadeOutZoneHeight_) {
            mi.visible=NO;
        } else {
            mi.visible=YES;
        }
        return;
    }
    float delta;
    float percentOpacity;

    float topWindow;
    float bottomWindow;
    float top;
    float bottom;

    /*

     not visible

     --------------------------- top
     visible, variable opacity
     --------------------------- top window




     opacity 100%




     --------------------------  bottomWindow
     visible, variable opacity
     -------------------------   bottom

     */

    top = self.boundaryRect.origin.y + self.boundaryRect.size.height/2;
    topWindow = top - fadeOutZoneHeight_;
    bottom = self.boundaryRect.origin.y - self.boundaryRect.size.height/2;
    bottomWindow=bottom+ fadeOutZoneHeight_;

    if (theY> top ) {
        mi.visible=NO;
    } else if ( (theY > topWindow) && (theY < top)) {
        mi.visible=YES;
        delta = abs((int)top - (int)theY);
        percentOpacity=delta/fadeOutZoneHeight_;
        mi.opacity=(GLubyte )(255.0f*percentOpacity);
    } else if( (theY <= topWindow ) && (theY >= bottomWindow ) ){
        mi.opacity=255;
        mi.visible=YES;

    } else if ( (theY < bottomWindow) && (theY >= bottom) ){
        mi.visible=YES;
        delta= abs((int)bottom - (int)theY);
        percentOpacity = delta/fadeOutZoneHeight_;
        mi.opacity=(GLubyte ) (255.0*percentOpacity);
    } else {
        mi.visible=NO;
    }


}

09-06 02:30