связывание спрайта в cocos2d - PullRequest
7 голосов
/ 08 января 2011

создаю канон, чтобы стрелять объектами.Задняя часть канона плунжера прилагается.поршень действует для заданной скорости и угла.Канон поворачивается на 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];
    }
}

Ответы [ 2 ]

2 голосов
/ 14 января 2011

как насчет того, чтобы сделать это, если вы используете метод [CCMoveTo actionWithDuration: position:] ??

С помощью этого метода вы можете легко контролировать скорость с помощью аргумента «actionWithDuration», который принимает целочисленные значения времени в секундах, а направление можно регулировать с помощью аргумента «position», который принимает ccp (x, y) в качестве значений для Точка, в которую вы хотите, чтобы ваш поршень переместился.

Вы можете использовать это так ....

    CCSprite *plunger = [[CCSprite alloc] initWithFile:@"plunger.png"];
    plunger.position = ccp(240,240);
    [self addChild:plunger z:10];
    [plunger release];

    id = [CCMoveTo actionWithDuration:3 position:ccp(300,240)];

Указанные значения являются моими по выбору. Вы можете использовать их по своему усмотрению.

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

1 голос
/ 09 января 2011

Надеюсь, я правильно понял вопрос: если проблема заключается в том, что пушка и плунжер вращаются вокруг своих собственных центральных точек, но вы хотите, чтобы они вращались вместе, то решение должно заключаться в том, чтобы сделать плунжер дочерним спрайтом пушки (это также делает положение плагинов относительно пушка) т.е.

[para3 addChild:para6]

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

если я правильно понял ваш вопрос, возможно, вы могли бы опубликовать скриншот: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...