0

当我尝试在 iTouch 5 上构建和运行我的游戏(基于 Cocos2d 1.0.1,内置 Xcode 4.5 和 iOS 6.0 SDK)时,我发现 CCMenuItems 行为不正常:当菜单项与屏幕边缘相邻时,边缘边框似乎不太容易在里面被点击来响应触摸事件(对不起我的糟糕表达)。

为了演示这个问题,我用 Cocos2d 模板用 Xcode 4.3 编写了一个 demo 应用程序,只是修改了 HelloWorldLayer 的 init 方法,现象仍然存在。代码如下:

    -(void) init
    {
            // always call "super" init
            // Apple recommends to re-assign "self" with the "super" return value
            if( (self=[super init])) {

            CCLayerColor *cl = [CCLayerColor layerWithColor:ccc4(ccWHITE.r, ccWHITE.g, ccWHITE.b, 255)];
            [self addChild:cl];
                    // create and initialize a Label
                    CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World" fontName:@"Marker Felt" fontSize:64];

                    // ask director the the window size
                    CGSize size = [[CCDirector sharedDirector] winSize];

                    // position the label on the center of the screen
                    label.position =  ccp( size.width /2 , size.height/2 );

                    // add the label as a child to this Layer
                    [self addChild: label];

                    float width = 160;

                    CCSprite *sp1 = [CCSprite node];
                    [sp1 setContentSize:CGSizeMake(width, width)];
                    [sp1 setTextureRect:CGRectMake(0, 0, width, width)];
                    [sp1 setColor:ccc3(0xff, 0xff, 0)];

                    CCSprite *sp2 = [CCSprite node];
                    [sp2 setContentSize:CGSizeMake(width, width)];
                    [sp2 setTextureRect:CGRectMake(0, 0, width, width)];
                    [sp2 setColor:ccc3(0, 0, 0xff)];

                    CCMenuItemSprite *button = [CCMenuItemSprite itemFromNormalSprite:sp1 selectedSprite:sp2 target:nil selector:nil];
                    CCMenu *menu = [CCMenu menuWithItems:button, nil];
                    [self addChild:menu];
                    menu.position = ccp(0, 0);
                    button.anchorPoint = ccp(1, 1);
                    button.position = ccp([[CCDirector sharedDirector] winSize].width,
                                  [[CCDirector sharedDirector] winSize].height);


            }
            return self;
    }

我查看了整个互联网并且没有运气,不知道有人可以帮助我。非常感谢!

4

1 回答 1

2

只是一些预感:

  • 避免设置精灵 contentSizes。它们应该是自动设置的,并且可以被 CCMenu 使用。
  • 确保不要更改 CCMenuItem 的位置或锚点。也不要更改 CCMenu 的 anchorPoint。这会弄乱触摸检测。仅使用 CCMenu 的位置属性。
  • 确保项目中其他地方没有其他触摸代码干扰并可能吞食触摸。手势识别器也可能导致 CCMenu 行为不端。

如果您想自由放置菜单项,请确保将每个菜单项包装在 CCMenu 节点中。然后您可以通过菜单定位项目。

于 2012-11-05T23:59:26.013 回答