Cocos2D мультитач для CCMotionStreak или системы частиц - PullRequest
0 голосов
/ 24 марта 2011

я хочу включить мультитач для своей игры. но я не знаю, как реализовать мультитач-версию CCMotionStreak. каждый раз, когда я касаюсь 2 точек двумя пальцами, между ними появляется лента. то, что я хочу, это одна лента для каждого пальца. было бы лучше, если бы я мог сделать это в системе частиц, но в основном я сталкиваюсь с той же проблемой. кто-нибудь делал это раньше? так же, как фруктовый ниндзя.

1 Ответ

2 голосов
/ 20 декабря 2011

Вам нужно создать узел CCMotionStreak для каждого касания.

Например:

-(void)createMotionStreak:(NSInteger)touchHash
{
    CCMotionStreak* streak = [CCMotionStreak streakWithFade:1.7f minSeg:10 image:@"arrow.png" width:32 length:32 color:ccc4(255, 0, 255, 255)];
    [self addChild:streak z:5 tag:touchHash];
}

-(void)removeMotionStreak:(NSInteger)touchHash
{
    [self removeChildByTag:touchHash cleanup:YES];
}

-(CCMotionStreak*)getMotionStreak:(NSInteger)touchHash
{
    CCNode* node = [self getChildByTag:touchHash];
    if(![node isKindOfClass:[CCMotionStreak class]]) {
        [self createMotionStreak:touchHash];
    }
    return (CCMotionStreak*)node;
}

-(void) addMotionStreakPoint:(CGPoint)point on:(NSInteger)touchHash
{
    CCMotionStreak* streak = [self getMotionStreak:touchHash];
    [streak.ribbon addPointAt:point width:32];
}

-(CGPoint)locationFromTouch:(UITouch*)touch
{
    CGPoint touchLocation = [touch locationInView: [touch view]];
    return [[CCDirector sharedDirector] convertToGL:touchLocation];
}

-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    NSEnumerator* enumerator = [touches objectEnumerator];
    UITouch* oneTouch = nil;
    while (oneTouch = [enumerator nextObject]) {
        [self addMotionStreakPoint:[self locationFromTouch:oneTouch] on:oneTouch.hash];
    }
}

-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSEnumerator* enumerator = [touches objectEnumerator];
    UITouch* oneTouch = nil;
    while (oneTouch = [enumerator nextObject]) {
        [self removeMotionStreak:oneTouch.hash];
    }
}
...