Перемещение спрайта из группы спрайтов

У меня есть 15 спрайтов в моем слое. Я добавил эти спрайты к изменяемому массиву. Я хочу переместить один спрайт с помощью ccTouchesMoved . Когда прикосновение закончилось ccTouchesEnded sprite вернется к его началу точку или ее происхождение.

Мое кодирование:

if( (self=[super init])) {

    collection=[[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;
        [collection addObject:hole];
        x=x+75;
    }

    self.isTouchEnabled=YES;

}
return self;
 }
-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch=[touches anyObject];
CGPoint location=[touch locationInView:[touch view]];
location=[[CCDirector sharedDirector]convertToGL:location];
location=[self convertToNodeSpace:location];
p=location;


}
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"count:%i",[collection count]);
UITouch *touch=[touches anyObject];
CGPoint location=[touch locationInView:[touch view]];
location=[[CCDirector sharedDirector]convertToGL:location];

location=[self convertToNodeSpace:location];


 for(CCSprite *s in collection)
 {
   if(CGRectContainsPoint([s boundingBox], location))
    s.position=ccp(location.x,location.y);

 }
}
 -(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
for(CCSprite *s in collection)
{

        s.position=p;

 }
}

когда я перемещаю один спрайт, другие спрайты также видны на слое, чтобы не скрываться.  пожалуйста, помогите мне с кодом.

2
nl ja de
Когда контакт заканчивается, вы установите все (!) Спрайты в одно и то же положение.
добавлено автор LearnCocos2D, источник

1 ответы

for(CCSprite *s in collection)
 {
   if(CGRectContainsPoint([s boundingBox], location))
    s.position=ccp(location.x,location.y);

 }

Поскольку все ваши спрайты находятся в одном месте, приведенный выше код перемещает все спрайты в этом месте.

for(CCSprite *s in collection)
{
    if(CGRectContainsPoint([s boundingBox], location))
    {
        s.position=ccp(location.x,location.y);
        break;
    }
}

Вышеприведенный код выйдет из цикла после обнаружения первого спрайта, поэтому он должен только перенести первый спрайт в массив.

Не уверен, что это именно то, что вы хотите, но надеюсь, что это поможет.

----редактировать

Лично я хотел бы иметь переменную экземпляра для спрайта.

CCSprite * touchedSprite;

и сделайте следующее ...

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch=[touches anyObject];
    CGPoint location=[touch locationInView:[touch view]];
    location=[[CCDirector sharedDirector]convertToGL:location];
    location=[self convertToNodeSpace:location];

    for((CCSprite * sprite in collection)
    {
        if(CGRectContainsPoint([sprite boundingBox], location))
        {
            touchedSprite = sprite;
            p = sprite.position;
            break;
        }
    }
}
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"count:%i",[collection count]);
    UITouch *touch=[touches anyObject];
    CGPoint location=[touch locationInView:[touch view]];
    location=[[CCDirector sharedDirector]convertToGL:location];

    location=[self convertToNodeSpace:location];

    touchedSprite.position = location;
}

-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    touchedSprite.position = p;
}

я не тестировал код, поэтому не уверен, что он будет работать только путем копирования и вставки, но я думаю, что это даст вам правильную идею. Есть, конечно, другие способы сделать это, но я думаю, что это самый простой, если вы хотите сделать кучу вещей для спрайта, который тронут.

0
добавлено
Кодирование полезно для меня во время движения. когда мое касание закончилось, все спрайты находятся в том же положении. Я также использовал тот же код в методе cctouchesEnd, но не получил решение
добавлено автор Krishnan8190, источник
Ладно, что именно вы хотите сделать при кончиках? Я предполагаю, что вы просто хотите переместить спрайт, который вы переместили, в исходное положение ... плохо отредактировать мой ответ
добавлено автор hjm, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.