сенсорный совет - PullRequest
       13

сенсорный совет

0 голосов
/ 25 сентября 2011

Привет, ребята, у меня проблема с моим кодом. У меня есть 6 спрайтов, которые перемещаются снизу вверх. 3 из спрайтов можно потрогать. Когда я коснусь этого счетчика спрайтов, увеличится +1, и этот спрайт будет удален. Проблема, с которой я сталкиваюсь, заключается в том, что когда я выбираю этот спрайт, счетчик увеличивается до 1, но если я выбираю этот спрайт дважды в течение полсекунды, счетчик увеличивается до 2. При первом касании я вижу, что спрайт исчезает, но почему, когда он исчезает, он все равно может обнаружить ограничивающий прямоугольник спрайта (если щелкнуть в течение полсекунды).

Как я могу решить эту проблему? Я использую cocos2d

P.S, если я выберу спрайт через полсекунды, не проблема.

//other code

CGPoint gridu2 =ccp(80,-45);
CGPoint gridu3 =ccp(80,-130);
CGPoint gridu4 =ccp(80,-215);
CGPoint gridu7 =ccp(240,-45);
CGPoint gridu8 =ccp(240,-130);
CGPoint gridu9 =ccp(240,-215);

//left grid up
id actionMoveUp2 = [CCMoveTo actionWithDuration:7 position:ccp(80,winSize.height + 215)];
id actionMoveUp3 = [CCMoveTo actionWithDuration:7 position:ccp(80,winSize.height + 130)];
id actionMoveUp4 = [CCMoveTo actionWithDuration:7 position:ccp(80,winSize.height + 45)];

//right grid down
id actionMoveDown7 = [CCMoveTo actionWithDuration:7 position:ccp(240,winSize.height +255)];
id actionMoveDown8 = [CCMoveTo actionWithDuration:7 position:ccp(240,winSize.height +170)];
id actionMoveDown9 = [CCMoveTo actionWithDuration:7 position:ccp(240,winSize.height +85)];

correctColor1.position=gridu2;
correctColor2.position=gridu3;
correctColor3.position=gridu9;
random4.position=gridu4;
random5.position=gridu7;
random6.position=gridu8;

[correctColor1 runAction:actionMoveUp2];
[correctColor2 runAction:actionMoveUp3];
[correctColor3 runAction:actionMoveDown9];
[random4 runAction:actionMoveUp4];
[random5 runAction:actionMoveDown7];
[random6 runAction:actionMoveDown8];

[self addChild:correctColor1 z:10 tag:1];
[self addChild:correctColor2 z:10 tag:2];
[self addChild:correctColor3 z:10 tag:3];
[self addChild:random4 z:1 tag:14];
[self addChild:random5 z:1 tag:15];
[self addChild:random6 z:1 tag:16];

-(void)addToScore:(int)number
{
score=score+number;
[scoreLabel setString:[NSString stringWithFormat:@"%d",score]];
}

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

// to remove touched sprite
int totalNumberOfItems=3;
for (int y=1; y < totalNumberOfItems; y++){
    CCSprite *temp = (CCSprite*)[self getChildByTag:y];

    CGRect correctColor = [temp boundingBox];

    if (CGRectContainsPoint(correctColor, location)) {
        NSLog(@"touched");
        [self removeChild:temp cleanup:YES ];
        [self addToScore:1];
        return;
    }

}

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

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

0 голосов
/ 25 сентября 2011

Есть несколько вещей, которые вы можете попробовать.Попробуйте ввести [self removeChild:temp cleanup:YES] в метод ccTouchesEnded:.Я не уверен, что это сработает.

Еще одна вещь, которую вы можете сделать, это отключить сенсорный на полсекунды.Позвоните [self setIsTouchEnabled:NO] и затем установите его на Да после задержки в ccTouchesEnded:

Надеюсь, это поможет

...