Точность касания ccmenuitem ниже, когда он расположен рядом с краем экрана

Когда я попытался собрать и запустить свою игру (на основе Cocos2d 1.0.1, встроенной в Xcode 4.5 с iOS 6.0 SDK) в iTouch 5, я обнаружил, что CCMenuItems не ведут себя нормально: когда пункт меню находится рядом с краем экрана, край границы, кажется, не так-то просто нажать внутри, чтобы ответить на событие касания (извините за мое плохое выражение).

Чтобы продемонстрировать проблему, я написал демонстрационное приложение с Xcode 4.3 с использованием шаблона Cocos2d и просто изменил метод инициализации HelloWorldLayer, и это явление все еще происходит. Код ниже:

    -(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;
    }

Я просмотрел весь интернет, и мне не повезло, интересно, кто-то может мне помочь с этим. Большое спасибо!

1 ответ

Решение

Всего несколько догадок:

  • Воздержитесь от установки спрайтов contentSizes. Они должны быть установлены автоматически и могут использоваться CCMenu.
  • Убедитесь, что вы не меняете положение или точку привязки CCMenuItem. Не изменяйте anchorPoint для CCMenu. Это испортит обнаружение касания. Используйте только свойство position CCMenu.
  • Убедитесь, что никакой другой сенсорный код в другом месте вашего проекта не мешает и не может проглотить прикосновения. Распознаватели жестов могут также вызывать неправильное поведение CCMenu.

Если вы хотите свободно размещать свои пункты меню, обязательно оберните каждый из них в узле CCMenu. Затем вы можете позиционировать элемент через меню.

Другие вопросы по тегам