iPhone: Создание игр для iOS (iPhone и iPad)
GameDev.ru / Сообщества / iPhone / Форум / Неправильная обработка нажатия на спрайт

Неправильная обработка нажатия на спрайт

funnelПользовательwww2 мая 201218:12#0
Всем привет.

Есть спрайт - панель(которая находится за экраном, но при нажатии на определенную кнопку выезжает вниз на экран)
Далее добавляю другой спрайт, который является так сказать частью панели. Добавляя его на сцену в родители ставлю спрайт панели
Пишу с использованием Cocos2d

        itemMenu = [CCSprite spriteWithFile:@"itemMenu.png"];  //  ПАНЕЛЬ
        itemMenu.position = ccp(240,470);
               [self addChild:itemMenu];
       
        pStand=[CCSprite spriteWithFile:@"pStand.png"];  //Данный спрайт должен быть прикреплен к спрайту панели, поэтому выставляю панель как родителя, чтобы при перемещении панели он ездил за ней
        pStand.tag=1;
       pStand.position=ccp(103,105);
              [itemMenu addChild:pStand ]; //!!

        -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{  
   
              UITouch *touch=[touches anyObject];
              CGPoint location=[touch locationInView:[touch view]];
              location = [[CCDirector sharedDirector] convertToGL:location];
                   if (CGRectContainsPoint([[self getChildByTag:1]boundingBox] , location)) {   // Нажатие на панель
                     ...
                     тут происходит опускание панели
                     .   . .
                          }

             if (CGRectContainsPoint([[itemMenu getChildByTag:1]boundingBox],  location)){  //Нажатие на тот другой спрайт который обрабатывается не правильно
                NSLog(@"pStand");
           }
}
Проблема в том, что когда я жму на кнопку и у меня выезжает панель, при нажатии на спрайт ничего не происходит, НО , если пожать мышкой в области координат (103,105) то происходит вывод сообщения через NSLog.
Как сделать правильно, чтобы при нажатии на СПРАЙТ выводилось сообщение, а не при нажатии в пустую область? Насколько я понимаю я что-то не так сделал с привязкой объекта... До этого программировал на ActionScript и решил сделать по аналогии...


Заранее спасибо.

digПостоялецwww2 мая 201222:38#1
Привет, в первой проверке нажатия ты используешь [self getChildByTag:1]boundingBox], и во второй проверке (где как я понял ты хочешь получить границы спрайта), ты тоже используешь [self getChildByTag:1]boundingBox]? Наверное это не очень правильно, т.к. у тебя под тэгом 1, получается, хранится два разных объекта?

Попробуй для начала сделать отдельные ссылки и хранить их как свойства (данные-члены) объекта сцены, т.е. сделать отдельные свойства, в которых у тебя будет храниться сама панель и разные спрайты в таком виде:

@property(..) ... *panel;
@property(..) ... *sprite1;
@property(..) ... *sprite2;
@property(..) ... *sprite3;

А потом уже проверяй "попадания". Конечно этот метод не оптимальный и не лучший в мире, но ясности внесет больше, чем с тэгами, если я правильно понял твою проблему :)

funnelПользовательwww3 мая 20121:30#2
Нет, я во второй проверке проверяю [temPanel getChildByTag:1], так же присваивая pStand в качестве ребенка к itemPanel  - [itemPanel addChild:pStand].
dig, а не могли бы вы по подробнее рассказать или дать ссылку на информацию по
"@property(..) ... *panel;
@property(..) ... *sprite1;
@property(..) ... *sprite2;
@property(..) ... *sprite3;"
А то Obj-C и Cocos2d только начал изучать.
CasDevПостоялецwww3 мая 20123:03#3
funnel
Вообще в кокосе немного неправильно сделана функция boundingBox, насколько я помню.
У меня она выводила boundingBox по отношению к РОДИТЕЛЮ (parent), а не ЭКРАНУ(root parent)!

Намного проще использовать класс обертку типа TouchableSprite (погугли, я не помню, но там буквально поллиста - я у себя использую чрезмерно усложненный вариант, поэтому код не выложу).

funnelПользовательwww3 мая 201212:53#4
CasDev , про TouchableSprite ничего так и не смог найти. Проблему решил по другому, просто родителем делал не спрайт,а self  и каждый кадр через функцию сделал привязку к панели.
И не могли бы вы все такие представить ваше чрезмерно усложненное решение ? Просто интересно посмотреть.

Спасибо за ответы

digПостоялецwww3 мая 201213:07#5
А.. не разглядел, тогда должно быть правильно. Наверное действительно как CasDev написал надо проверить, какие значения возвращаются из boundingBox и соответствуют ли они реальности.

Я писал про свойства - подробнее здесь http://cocoacast.com/?q=node/103

/ Форум / iPhone: Создание игр / Программирование

Тема в архиве.

2001—2018 © GameDev.ru — Разработка игр