2011-01-08 3 views
7

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

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

мой код для плунжера и вращения каноническому на касаний перемещается. (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

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

С помощью этого метода вы можете легко управлять скоростью с помощью аргумента «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

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

[para3 addChild:para6] 

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

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

+0

Я добавил в качестве ребенка. все же его ограничивающий спрайт (плунжер ограничивает пушку), когда он прикасается к методу завершения, он будет работать правильно. в прикосновениях перемещается все еще, он ограничивается после добавления ребенка. – Srinivas