2010-11-23 42 views
0

J'ai une scène où il y a un bouton. Une fois que je clique sur le bouton, un sprite rectangulaire glisse du côté gauche: http://img255.imageshack.us/img255/9867/slidei.pngCocos2d: une couche superposée - Est-il possible de désactiver temporairement les touches d'une certaine couche/région?

Sous cette forme, il y a plusieurs boutons tactiles. Je ne veux pas qu'ils soient appelés quand je touche à la forme rectangulaire. Donc, tant que la forme reste sur l'écran, ces touches ne doivent pas répondre. Au lieu de cela, il y a plusieurs autres boutons sur cette forme marron, qui répondent aux touches. Comment puis-je gérer cela?

Est-il possible de désactiver temporairement les touches pour une certaine couche dans une scène? A la forme rectangulaire pour être un objet CCLayer seul?

Je sais que je pourrais créer une nouvelle scène pour cette forme qui a un fond transparent, mais je veux encore le bouton pour réagir à des touches:

Lorsque je clique sur ce bouton, les diapositives de forme quand je. cliquez à nouveau, il glisse hors de l'écran.

Répondre

0

Comme pour toute interface utilisateur, vous devez indiquer aux objets s'ils sont activés ou non. Votre meilleur pari est en fait d'envoyer un message au bouton, lui disant de se mettre en marche ou de l'éteindre.

Idéalement, vous utiliserez un gestionnaire d'entrée tactile global au lieu de permettre à chaque bouton ou glissière de réagir par lui-même. Cela signifie beaucoup de problèmes et de travail supplémentaire. Au lieu de cela, placez tous les objets qui doivent réagir à l'entrée sur le même calque et enregistrez ce calque avec le gestionnaire d'entrée tactile, qui transmettra alors tous les événements tactiles à ce calque particulier et aucun autre.

+0

J'utilise en fait "rects" et vérifie si un certain point est à l'intérieur de ce rect. Comment puis-je désactiver CGRect, ou des objets en général dans cocos2d? À propos de votre deuxième mention: Alors devrais-je créer un calque supplémentaire pour ma forme de diapositive, où il n'y a que les boutons qui peuvent être pressés une fois que la diapositive est à l'écran? Si j'ai une couche au-dessus d'une autre, va-t-elle attraper mon entrée tactile, de sorte que la couche ci-dessous n'obtient pas l'information tactile? – KayO

2

Dépend de si vous utilisez des objets de bouton réels ou des régions CGRect auxquels votre méthode touchesBegan répond. Je suis d'accord avec GamingHorror que l'approche la plus propre serait d'activer/désactiver les objets de bouton directement au besoin.

Cependant, ceci est un kludge réalisable tant que la région tactile glissante est une sous-classe UIView.

Avant qu'il glisse en vous pouvez désactiver toutes les touches de l'utilisateur avec:

[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled: NO]; Après la présentation de votre vue, il se peut que vous deviez définir setUserInteractionEnabled: YES sur cette vue particulière. Quand il glisse, vous pouvez tout remettre avec

[[[UIApplication sharedApplication] keyWindow] setUserInteractionEnabled: YES];