移动一个精灵时,所有精灵都不可见

我在我的场景中有7个精灵。所有的精灵都添加到mutablearray。 当我触摸一个精灵来移动,其他精灵在我的触摸移动方法后不可见

这是我的代码

if( (self=[super init])) { sprites=[[NSMutableArray alloc]init]; CCLayer *base=[CCSprite spriteWithFile:@"Base.png"]; base.position=ccp(512,384); [self addChild:base]; x=0; for(int i=1;i<=7;i++) { CCSprite *hole=[CCSprite spriteWithFile:@"ball.png"]; hole.position=ccp(140+x,318); hole.tag=i; [self addChild:hole]; hole.visible=YES; [sprites addObject:hole]; x=x+75; } self.isTouchEnabled=YES; } return self; } My touchesmove method: -(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"count:%i",[sprites count]); UITouch *touch=[touches anyObject]; CGPoint location=[touch locationInView:[touch view]]; location=[[CCDirector sharedDirector]convertToGL:location]; location=[self convertToNodeSpace:location]; for(CCSprite *s in sprites) { s.position=ccp(location.x,location.y); } } 

在你的ccTouchesMoved方法中,你正在 (1)所有的精灵replace成一行:

 for(CCSprite *s in sprites) { s.position=ccp(location.x,location.y); } 

另外,我觉得你的精灵都是一样的大小,所以你无法区分它是一个精灵还是更多。


在你的init方法中,你应该为每个精灵提供一个标签,然后通过在ccTouchesMoved方法中的标签来修改它。

在这种方法中,您应该知道哪个精灵正在被触摸,然后相应地执行。 尝试围绕location定义一个矩形。 像这样的东西。

当多个精灵被触摸的时候,你可能不得不做一些事情。 最常见的做法是在顶部( z )的精灵上执行动作,或者由精灵tag决定。


(1)要将你的精灵移动到某个位置,你应该使用一些CCAction ,最有可能的是CCMoveTo ,在某些情况下可能是CCMoveBy 。

你在ccTouchesMoved中的代码将所有的精灵移动到一个单一的触摸位置,所以你只看到一个精灵,而其余的实际上是堆叠在下面。

如果你想要实现的只是简单的拖动精灵来触摸,你需要testing触摸位置和ccTouchBegan中每个精灵的边界框之间的交集。 一旦循环完成,发现一个正在触摸的精灵,保存对它的引用,在ccTouchMoved中,将该精灵的位置以及自上次调用ccTouchMoved以来移动的数量一起转换。

查看Ray Wenderlich的教程: http ://www.raywenderlich.com/2343/how-to-drag-and-drop-sprites-with-cocos2d