Cocos2D предотвращает выход спрайта за пределы экрана? - PullRequest
2 голосов
/ 03 января 2012

Можно ли предотвратить вывод моего 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 ]

4 голосов
/ 04 января 2012

Чтобы ограничить спрайт в пределах границы, не проверяйте текущую позицию, а проверяйте новую позицию. Но вместо использования (возможно, нескольких) if условий можно использовать метод зажима:

Техника 1 - с использованием MIN и MAX комбо:

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));
2 голосов
/ 22 октября 2012
 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
}

не тестировался, но так как у вас есть anchorpoint на уровне 0,5, 0,5, это должно работать для вас

...