-1

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

2 回答 2

2

您在 ccTouchesMoved 中的代码将所有精灵移动到一个触摸位置,因此您只会看到一个精灵,而其余精灵实际上堆叠在下方。

如果你想要实现的是简单地在触摸时拖动精灵,你需要在 ccTouchBegan 中测试触摸位置和每个精灵的边界框之间的交集。一旦你循环并找到一个在你的触摸下的精灵,你保存一个对它的引用,然后在 ccTouchMoved 中,你翻译那个精灵的位置以及自上次调用 ccTouchMoved 以来移动的量。

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

于 2013-01-29T07:13:11.557 回答
0

在您的ccTouchesMoved方法中,您正在所有(1)精灵一起替换为以下行:

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

另外,我认为你的精灵都是相同的大小,所以你无法区分它是一个精灵还是更多。


在您的init方法中,您应该为每个精灵提供一个标签,然后在方法中通过其标签ccTouchesMoved对其进行修改。

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

当多个精灵被触摸时,您可能需要做一些事情。最常见的做法是对顶部的 sprite 执行操作 ( z) 或由 sprite 决定tag


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

于 2013-01-29T07:14:21.160 回答