ограничиваю спрайт в cocos2d

делаю канон для стрельбы по объектам. К задней части пушки прикреплен поршень. плунжер действует для заданной скорости и угла. canon вращается на 0-90 градусов, а поршень перемещается вперед и назад для регулировки скорости. когда я поворачиваю пушку на ощупь, перемещается нормально работает. , когда плунжер отводится назад при перемещении касаний, и он вращается, это означает, что плунжер находится за пределами канона.

как это контролировать: -

мой код для вращения поршня и канона при касании перемещен. (para3 - канон, para6 - мой толкатель): -

    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];
    if (CGRectContainsPoint(CGRectMake(para6.position.x-para6.contentSize.width/2, para6.position.y-para6.contentSize.height/2, para6.contentSize.width, para6.contentSize.height), touchLocation) && (touchLocation.y-oldTouchLocation.y == 0))
    {
        CGPoint diff = ccpSub(touchLocation, oldTouchLocation);
        CGPoint currentpos = [para6 position];
        NSLog(@"%d",currentpos);
        CGPoint destination = ccpAdd(currentpos, diff);
        if (destination.x < 90 && destination.x >70)
        {
            [para6 setPosition:destination];
            speed = (70 + (90-destination.x))*3.5 ;
        }

    }
if(CGRectIntersectsRect((CGRectMake(para6.position.x-para6.contentSize.width/8, (para6.position.y+30)-para6.contentSize.height/10, para6.contentSize.width, para6.contentSize.height/10)),(CGRectMake(para3.position.x-para3.contentSize.width/2, para3.position.y-para3.contentSize.height/2, para3.contentSize.width, para3.contentSize.height))))

            {

        [para3 runAction:[CCSequence actions:
                          [CCRotateTo actionWithDuration:rotateDuration angle:rotateDiff],
                          nil]];
        CGFloat plungrot = (rotateDiff);
        CCRotateTo *rot = [CCRotateTo actionWithDuration:rotateDuration angle:plungrot];
        [para6 runAction:rot];
    }
}
7
задан LearnCocos2D 17 November 2011 в 01:45
поделиться