2012-10-31 75 views
0

林这段代码向上火:Cocos2D检查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

想想你应该检查子弹是否在屏幕外。不是在同一时刻它被解雇了,对吧?

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

  • 您已经执行了moveTo操作。 CCActions可以有回调,告诉你它们何时完成;看到标题。

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

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

也有其他的方法。看看框架提供了什么。

1

这个什么:

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

(未测试)

+0

一个快速和肮脏的解决方案,这正是你的回答虽然 – igrek

+0

或不准确的问题,因为它没有检查它是否在屏幕上或不 – igrek