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

时间:2013-01-29 06:49:19

标签: ios xcode cocoa-touch cocos2d-iphone

我的场景中有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);
}
}

2 个答案:

答案 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