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];
}

但我忘记了 touchesended 只被调用一次。

4

2 回答 2

2

想想什么时候应该检查子弹是否在屏幕外。不是在它被解雇的同时,对吧?

有很多方法可以做到这一点。

  • 您已经有一个 moveTo 操作。CCActions 可以有回调来告诉你它们何时完成;见标题。

  • 您可以定义一个 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 回答