Cocos2D Multi-Touch и CCMotionStreak

Я пытаюсь использовать мультитач в своем приложении.... но я должен отображать полосу, когда палец движется по экрану... но я вижу только одну полосу, а не две! Как я могу создавать и перемещать 2 полосы вместе?

Вот мой код:

-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{ 
    NSSet *allTouches = [event allTouches];

    for (int n=0; n < [allTouches count]; n++)
    {
        UITouch *touch = [[allTouches allObjects] objectAtIndex:n];
        CGPoint touchLoc = [touch locationInNode:self];

        streak = [CCMotionStreak streakWithFade:0.3 minSeg:20 width:13 color:[CCColor colorWithUIColor:[UIColor whiteColor]] textureFilename:@"scia.png"];
       [streak setPosition:touchLoc];
       [self addChild:streak z:30];
    }
 }

 -(void)touchMoved:(UITouch *)touch withEvent:(UIEvent *)event
 {
    NSSet *allTouches = [event allTouches];

    for (int n=0; n < [allTouches count]; n++)
    {
        UITouch *touch = [[allTouches allObjects] objectAtIndex:n];
        CGPoint touchLoc = [touch locationInNode:self];

            [streak setPosition:touchLoc];
            [self detectObjects:touchLoc];
    }
 }

1 ответ

Для мультитача внутри CCLayer вы можете использовать мультитач с помощью функции CCStandardTouchDelegate. встроить cocos2d, если вы ищете эффект Fruit Ninja Blade.. используйте CCBlade вместо CCMotionStreak https://github.com/hiepnd/CCBlade

/// .h File
CFMutableDictionaryRef map;

// .m File
void releaseStreak(CFAllocatorRef allocator, const void *value)
{
    [(CCMotionStreak*)value removeFromParentAndCleanup:YES];
}
CFDictionaryValueCallBacks valueCallbacks = {
   0,
   NULL,
   releaseStreak,
   NULL,
   NULL
};

-(id) init
{
   if( (self=[super init])) {
     isTouchEnabled_ = 1;
     [[[CCDirector sharedDirector] openGLView] setMultipleTouchEnabled:YES];
     map = CFDictionaryCreateMutable(NULL,0,NULL,&valueCallbacks);
   }
}

- (void) ccTouchesBegan:(NSSet *) touches withEvent:(UIEvent *) event
{ 
    for (UITouch *touch in touches) {
       CCMotionStreak *streak = [CCMotionStreak streakWithFade:0.3 minSeg:20 width:13 color:[CCColor colorWithUIColor:[UIColor whiteColor]] textureFilename:@"scia.png"];
        CFDictionaryAddValue(map,touch,streak);
        CGPoint pos = [touch locationInView:touch.view];
        pos = [[CCDirector sharedDirector] convertToGL:pos];
       [streak setPosition: pos];
       [self addChild:streak z:30];
    }
 }

- (void) ccTouchesMoved:(NSSet *) touches withEvent:(UIEvent *) event{
 {
    for (UITouch *touch in touches) {
            CGPoint pos = [touch locationInView:touch.view];
            pos = [[CCDirector sharedDirector] convertToGL:pos];
            CCMotionStreak *_streak = (CCMotionStreak *)CFDictionaryGetValue(map, touch);
            [streak setPosition:pos];
            [self detectObjects:pos];
    }
 }
- (void) ccTouchesEnded:(NSSet *) touches withEvent:(UIEvent *) event{
    for (UITouch *touch in touches) {
        CCMotionStreak *_streak = (CCMotionStreak *)CFDictionaryGetValue(map, touch);
        CFDictionaryRemoveValue(map,touch);
        //i already added removeFromParent above no need to add release code.
    }
}

дайте мне знать, если приведенный выше код работает для вас.

Другие вопросы по тегам