Cocos2D防止精灵离开屏幕?

时间:2012-01-03 01:21:22

标签: ios cocos2d-iphone ccsprite

是否可以阻止我的CCSprite离开屏幕?我已经允许它在左侧和右侧离屏,所以这很好,但我只是想阻止它从顶部和底部的屏幕上移开。

到目前为止,我所做的只是让精灵卡在顶部或底部。我不希望这会影响精灵的运动,我想要发生的只是CCSprite在它击中顶部或底部时会停止。

有人能告诉我怎么做吗?

谢谢!

修改

CGSize size = [[CCDirector sharedDirector] winSize];

if ((sprite.y <= size.height) && (sprite.y >= 0) ) {
    // Set new position

} else {
   // sprite is colliding with top/bottom limits, do whatever you like, for example change direction

}

2 个答案:

答案 0 :(得分:4)

要限制边界内的精灵,请不要检查当前位置,而是检查新位置。但是,您可以使用钳制方法,而不是使用(可能是多个)if条件:

技术1 - 使用MINMAX组合:

CGPoint newPosition = ... (assign new position here using touch location or something)
sprite.position = ccp(newPosition.x, MAX(0, MIN(size.height, newPosition.y)));

技术2 - 使用clampf

CGPoint newPosition = ... (assign new position here using touch location or something)
sprite.position = ccp(newPosition.x, clampf(newPosition.y, 0, size.height));

答案 1 :(得分:2)

 CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite* sprite = [CCSprite node];
CGSize spriteSize = sprite.boundingBox.size;
if ((sprite.position.y + spriteSize.height/2 < 0 )||(sprite.position.y + spriteSize.height/2 > winSize.height) ) {
    //Sprite is out of screen
}

未经测试,但由于您的锚点位于0.5,0.5作为标准,这应该适合您