2011-01-08 11 views
7

オブジェクトを起動するためにキャノンを作ります。プランソンが取り付けられているキャノンの後ろにある。プランジャは設定された速度と角度で動作します。キャノンは0〜90度回転し、プランジャは速度を調整するために前後に動く。午前中はタッチでキヤノンを動かすと、うまく動きました。 プランジャが移動して引き戻され、回転すると、プランジャがキャノンの外側にあることを意味します。cocos2dでスプライトを囲んで

これを制御する方法

: - 移動タッチのプランジャとキヤノンの回転のための

私のコード。私は私が正しく質問を理解願ってい

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引数で簡単に速度を制御できます.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

: を問題は大砲とプランジャーの両方が自分の中心点を中心に回転すること、であるならば、あなたが欲しい - :(PARA3はキヤノンで、para6は私のプランジャーです)それらは、あなただけの大砲と回転させる必要がある(これはまた、大砲にplugersの相対位置になります)を溶液がプランジャ大砲の子スプライトを作るためにする必要があり、一緒にすなわち

[para3 addChild:para6] 

を回転させますプランジャーはそれで回転します。

私はあなたの質問は完全に間違って得た場合、多分あなたは

+0

私は子供として追加しました。接触が終了したときにスプライト(プランジャーは大砲の境界を定めています)を囲んでいますが、正しく機能します。タッチではまだ子供を追加した後に移動します。 – Srinivas

関連する問題