Cocos2D检查精灵是否在屏幕外?

时间:2012-10-31 02:31:18

标签: iphone xcode cocos2d-iphone sprite

我正在使用此代码向上启动:

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

但是我忘记了触摸结束只被调用一次。

2 个答案:

答案 0 :(得分:2)

考虑何时你应该检查子弹是否在屏幕外。不是在同一时刻被解雇了,对吗?

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

  • 您已经有一个moveTo动作。 CCActions可以有回调,告诉你什么时候完成;看到标题。

  • 您可以定义update:方法并使用scheduleUpdates启用它,以便能够每帧测试位置。

  • 如果使用物理引擎,则可以为屏幕边缘制作“墙”并移除子弹以响应碰撞检测。

也可能有其他方法。了解框架提供的内容。

答案 1 :(得分:1)

这个怎么样:

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

(未经测试)