UIScrollView et Cocos2D
J'ai créé un UIScrollView dans un cocos2d application. Je suis ajoutant des sprites de façon dynamique, plus de 3 pages. Sur la première page, le tactile fonctionne parfaitement sur un sprite, mais si j'utilise le défilement de la vue et accédez à la deuxième page, le tactile ne fonctionne pas tout à fait raison... le sprite répondra au toucher quand je touche l'écran, environ le montant que j'ai défile vers la gauche. Si je revenir à la première page, le tactile fonctionne parfaitement pour un sprite. Des idées? Je suis en utilisant le tutoriel suivant: http://getsetgames.com/2009/08/21/cocos2d-and-uiscrollview/ 🙂
Je pense qu'un code peut être utile:-
Je suis en utilisant le code exact de votre démo...
CocosOverlayScrollView et CocosOverlayViewController
Je suis de la création de la CocosOverlayViewController dans ma couche:-
CocosOverlayViewController *scrollView = [CocosOverlayViewController alloc];
[[[Director sharedDirector] openGLView] addSubview:scrollView.view];
Je suis de la création de la couche dans ma scène:-
Scene *scene = [Scene node];
GridLayer *layer = [GridLayer node];
[scene addChild: layer z:-1];
[scene setTag:12];
Je suis entrain de créer les sprites dans ma couche:-
myImage.position = ccp(53 * (coordinate.x + 0.52), 57 * (coordinate.y + 1.45));
[myImage runAction:[FadeIn actionWithDuration:0.3]];
myImage.relativeAnchorPoint = YES;
[self addChild:myImage z:-1];
Le sprite est à l'aide de la TouchesDispatcher et la touche sont résolus dans la classe.
Si j'utilise le cocos2d moveto fonction sur le calque que je peux toucher un sprite et il répond si je sais que ça fonctionne, les choses deviennent un peu bizarre quand j'utilise le UIScrollView.
J'espère que vous comprenez mon problème et peut aider, tous les meilleurs 🙂
Carl
Je suis l'aide d'une page scrollview, mon application ne repose pas sur que si je peux le supprimer. Je ne pense pas que je vous l'explique très bien avant, l'événement tactile de fonctionner parfaitement sur la 1ère page, mais quand je scroll (la moindre), le sprite se déplace, mais l'événement tactile répond encore à les sprites position précédente. Des idées?
J'ai créé un exemple de projet à l'aide de Cocos2d et UIScrollView et a posté un lien sur le cocos2d forums: cocos2d-iphone.org/forum/topic/9417
Cette question est pertinente à mes intérêts. Carl, Rob: Avez-vous arriver à une solution? Si oui, pourriez-vous poster la réponse?
J'ai lu le tutoriel, et je suis prêt à l'essayer et de le mettre en œuvre mais j'ai quelques qestions: faut-il travailler avec Cocos2D iPhone 1.0 rc? Comment utiliser les CocosOverlayViewController dans un Cocos2D projet? Faut-il remplacer la valeur par défaut RootViewController?
OriginalL'auteur Carl | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
J'ai enfin réussi à la mise en œuvre de défilement d'un CCLayer à l'aide d'un UIScrollView classe dérivée, en suivant les tutoriels mentionnés dans cette question:
Deux d'entre eux sont une excellente lecture, et fortement recommandé pour obtenir une meilleure compréhension sur la façon UIScrollViews (et UIViews en général) peut être fait pour gérer les touches en coopération avec Cocos2D.
Cependant, lors de la mise en œuvre de ces solutions, j'ai aussi eu le bug décrit dans la question: si vous n'avez pas de défilement, les touches sont propagées à partir de la UIScrollView à la CCLayer correctement. Si vous faites défiler, la couche de parchemins à merveille, mais non défilement touche sur le UIScrollView se propager à l'CCLayer avec un décalage qui se développe le plus vous faites défiler, ce qui rend le CCLayer (et/ou d'accompagnement CCMenus) inutilisable.
J'ai trouvé la cause de ce problème à un bug dans la façon de Cocos2D se traduit par des touches envoyé à l'OpenGLView local CCNode ou CCMenu systèmes de coordonnées. Ce bug est présent dans 1.0 rc, et n'affecte que les touches qui sont générés sur un OpenGLView de la sous-vue (comme notre UIScrollView) et se propage à la Cocos2D principal de toucher la zone (à savoir la OpenGLView) en appelant la ligne suivante à l'intérieur de la UIScrollView-touchesBegan: méthode
(À noter que l'appel de cette ligne précédente est assez pour la multiplication de nonscrolling et nonzooming touches UIScrollView de Cocos2D, vous n'avez pas besoin d'appeler nextResponder: ci-dessus billets de blog).
La solution vient avec une petite modification sur deux Cocos2D sources:
CCNode.m
CCMenu.m
La clé ici est UITouch de locationInView: la méthode. L'argument de cette méthode devrait être le UIView que vous voulez traduire la touche coordonnées. La plupart des Cocos2D projet ont seulement une UIView: le OpenGLView, de sorte touche générée dans le OpenGLView (= le toucher) et traduit de la même vue. Toutefois, si vous ajoutez la superposition des sous-vues de recevoir des touches, comme un UIScrollView, "touchez afficher" cette valeur, qui ne correspond plus à la valeur souhaitée OpenGLView.
Merci!!!! Fixe.
Je crois que je viens de indépendant ce correctif, depuis que j'ai été aussi à l'aide d'un UIScrollView ainsi que la EAGLView.
OriginalL'auteur Ricardo Sanchez-Saez