1

希望有人能帮我解决这个问题......我正在关注这里看到的 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 应该做的。有没有人用过这个,可以给我一些建议吗?!?

谢谢!

4

1 回答 1

0

好吧,不是来自同一个班级,而是一个自制的滚动菜单。我使用 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;
    }


}
于 2012-06-08T12:29:17.800 回答