0

このコードを使用して上向きに発射します:

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent* )event
{

//Spawn the bullet
CCSprite * projectile = [CCSprite spriteWithFile:@"Projectile.png" rect:CGRectMake(0, 0,    17.5, 10)];
projectile.position = ccp(donk.position.x , 50);
[self addChild:projectile];

//Actualy Fire
[projectile runAction: [CCMoveTo actionWithDuration:.2 position: ccp (donk.position.x , 350)]];


}

それは私が望むように動作しますが、どのように if ステートメントを使用して、発射物が画面の上部にあるかどうかを確認して、削除できるようにするにはどうすればよいですか?

私はこれを使ってみました:

    if (projectile.position.y >= 330) {
    CCLOG(@"Removed");
    [self removeChild:projectile cleanup:YES];
}

しかし、終了したタッチは一度しか呼び出されないことを忘れていました。

4

2 に答える 2

2

弾丸が画面外にあるかどうかをいつ確認する必要があるかを考えてください。同時に解雇されたわけではありませんよね?

これを行うには多くの方法があります。

  • すでにmoveToアクションがあります。CCActionには、完了したときに通知するコールバックを含めることができます。ヘッダーを参照してください。

  • update:メソッドを定義し、scheduleUpdatesで有効にして、フレームごとに位置をテストできるようにすることができます。

  • 物理エンジンを使用している場合は、画面の端に「壁」を作成し、衝突検出に応じて弾丸を取り除くことができます。

おそらく他の方法もあります。フレームワークが提供するものを調べてください。

于 2012-10-31T04:27:12.093 に答える
1

これはどうですか:

[projectile runAction:[CCSequence actions:
                       [CCMoveTo actionWithDuration:.2 position:ccp(donk.position.x,350)], 
                       [CCCallBlock actionWithBlock:^{
        [projectile removeFromParentAndCleanup:YES];
    }], 
                        nil]];

(未検証)

于 2014-01-14T13:19:10.847 に答える