2011-01-08 59 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

怎么ü做到这一点,你使用[CCMoveTo actionWithDuration:位置:]方法?

通过此方法,您可以通过“actionWithDuration”参数轻松控制速度,该参数以秒为单位取整数值的时间,而方向可以通过以ccp(x,y)为值的“position”参数进行调整你希望你的柱塞移动到的点。

您可以使用它像这样....

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 2011-01-12 13:18:57