我的场景中有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);
}
}
答案 0 :(得分:2)
ccTouchesMoved中的代码将所有精灵移动到一个触摸位置,因此您只看到一个精灵,而其余精灵实际堆叠在下面。
如果你想要实现的只是在触摸时简单地拖动精灵,你需要测试触摸位置和ccTouchBegan中每个精灵的边界框之间的交集。一旦你完成循环并发现一个位于你触摸下的精灵,你保存一个对它的引用,并在ccTouchMoved中,你转换该精灵的位置以及自上次调用ccTouchMoved以来移动的数量。
查看Ray Wenderlich的教程:http://www.raywenderlich.com/2343/how-to-drag-and-drop-sprites-with-cocos2d
答案 1 :(得分:0)
在ccTouchesMoved
方法中,您移动在行中替换(1)
所有精灵 :
for(CCSprite *s in sprites)
{
s.position=ccp(location.x,location.y);
}
此外,我认为你的精灵大小都相同,所以你无法区分它是一个精灵还是更多精灵。
在init
方法中,您应该为每个精灵提供一个标记,然后通过ccTouchesMoved
方法中的tag对其进行修改。
在该方法中,您应该知道正在触摸哪个精灵,然后相应地采取行动。尝试在location
周围定义一个矩形。类似于this。
当触摸多个精灵时,您可能需要做一些事情。最常见的事情是在顶部(z
)对精灵执行操作或由精灵tag
决定。
(1)
要将您的精灵移至某个位置,您应该使用一些CCAction,最有可能CCMoveTo,在某些情况下CCMoveBy。