2011-12-29 11 views
3

私はCocos2dを新しくしているので、ほとんどのクラスと関数を意識していません。私のアプリケーションでは、バレルの方向にボールを触れてドラッグするようなモジュールを実装して、ボールを通過させ、ボールをバレルに入れます。私は方向にボールを通過することができますが、座標(x.y)に続いて画面から出るだけです。私はそれがバレルの位置のアイデアを得るとバレルの上部を見つけて、ボールを動かしながらも、バレルの中央にボールを入れてます、の大きさになるような何かをする必要がありバケツにボールを投げるような効果を与えるには?

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
    { 
     // Choose one of the touches to work with 
     UITouch *touch = [touches anyObject]; 
     CGPoint location = [touch locationInView:[touch view]]; 
     location = [[CCDirector sharedDirector] convertToGL:location]; 

     // Determine offset of location to projectile 
     int offX = location.x - ball.position.x; 
     int offY = location.y - ball.position.y; 

     // Bail out if we are shooting down or backwards 
     if (offX <= 0) 
      return; 

     // Determine where we wish to shoot the projectile to 
     int realX = winSize.width + (ball.contentSize.height/2); 
     float ratio = (float) offY/(float) offX; 
     int realY = (realX * ratio) + ball.position.y; 
     CGPoint realDest = ccp(realX, realY); 

     if(realX>=320) 
      realX = 320; 
     if(realY>=480) 
      realY = 480; 
     CGPoint realDest = ccp(realX, realY); 

     int good = goodBarrel.position.x; 
     int bad = badBarrel.position.x; 

     int destY = realDest.x; 
     if(destY<=good) 
      destY = good; 

     if(destY>=bad) 
      destY = bad; 

     realDest.x = destY+10; 

     // Determine the length of how far we're shooting 
     int offRealX = realX - ball.position.x; 
     int offRealY = realY - ball.position.y; 
     float length = sqrtf((offRealX*offRealX)+(offRealY*offRealY)); 
     float velocity = 480/1; // 480pixels/1sec 
     float realMoveDuration = length/velocity; 

     // Move projectile to actual endpoint 
     [ball runAction:[CCSequence actions: 
           [CCMoveTo actionWithDuration:realMoveDuration position:realDest], 
           [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)], 
           nil]];       
} 

ボールを遠くの場所に投げる効果を与えるためにボールが減少する。グッドバレルとバッドバレルはボールの反対側に置いた2本のバレルで、同じボールを入れます。私が取り組むことができる機能や方法はありますか?

+0

この記事を見て、[紙の投げ方のベストな方法](http://www.cocos2d-iphone.org/forum/topic/21966#post-122109)をご覧ください。 – ccscanf

答えて

0

[ball runAction:....]の直後。同じオブジェクトに対して別のアクションを同時に実行することができます。あなたが作成しようとしている距離の錯覚を提供して、両方のアクションが同時に完了する両方のアクションは、同時に完了します:

+0

私は同じコードでサイズを減らすことができます。しかし、私がしたいのは、私はバケツを投げ込むような効果を与える必要があるということです。動きのあるオブジェクトが別のオブジェクトを検出すると、そのオブジェクトは削除されます。バケツを投げるような効果が必要なのですが。いくつかのピクセルのために上に移動し、効果を与えるために戻ってくるように。私のオブジェクトはバケツの裏側に隠れています。 – Sarah

+0

ああ、私はあなたの質問を誤解しました。あなたは、飛行物体が後ろの壁に跳ね返った後、バケツの中に落ちることを意味しましたか?それともあなたが振りたいバケツそのものですか? 2Dエンジンで偽造するのは非常に難しく、何らかの認知的な切断を引き起こすことはありません。 – YvesLeBorg

+0

私は、あなたの声明「ユーザの認知切断」を理解できませんでした。また、私はバケツのボールをバウンスするような効果を与える必要があります。あなたが聞いたことがある場合、それはペーパートスと呼ばれる1つのアプリで起こります。 – Sarah

0

あなたは衝突検出を使用することができ、または他の言葉でボールとバレルのCGRectは

- (void)collisionDetection:(ccTime)dt{ 
CGRect ballRect = CGRectMake(
            ball.position.x, 
            ball.position.y, 
            10, 
            10); 


    CGRect barrelRect = CGRectMake(
            barrel.position.x, 
            barrel.position.y, 
            50, 
            10); 

    if (CGRectIntersectsRect(ballRect, barrelRect)) 
{ 
     // Run Animation of Ball Dropping in the Barrel 

     [self removeChild:ball cleanup: YES]; 


} 
} 

と交差するかどうかをチェックし、これは何が必要であると思います。

+0

これはバレルの中にボールを入れるコードですか?また、ボールのサイズを小さくしたり小さくしたりして消えていくうちに、ボールのサイズをどのように小さくすることができますか?どんな手掛かり? – Sarah

+1

あなたはtouchesEndedメソッドでそれを呼び出すことができます。それは、ボールがcollisionDetectionメソッドで移動を開始するときです。この行を追加します。 '[ball setScale:0.5];'これはテストされていません..しかし、動作する必要があります – Bonnie

+0

私はそうしていますが、そのメソッドが呼び出されると、(CGRectIntersectsRect(ballRect、barrelRect))条件は決して真ではないので、この条件ループには入りません。 – Sarah

関連する問題