Как прокрутить фон по вертикали, используя Cocos2d с Touches?
Я довольно близок к тому, чтобы разобраться с этим, и мне просто нужен последний бит (логика). В следующем коде фон прокручивается по вертикали (касаниями) И движется в правильном направлении (то есть вниз).
Проблема в том, что он не прекращает прокрутку, когда выходит за рамки размера содержимого фонового изображения...
(CGPoint)boundLayerPos:(CGPoint)newPos {
CGSize winSize = [CCDirector sharedDirector].winSize;
CGPoint retval = newPos;
retval.y = -MAX(retval.y, -background.contentSize.height+winSize.height);
retval.y = -MIN(retval.y, 0);
retval.x = self.position.x;
return retval;
}
Мне также интересно, как сделать прокрутку более естественной... то есть способ продолжить какое-то время, но замедлиться до остановки, когда происходит TouchesEnded...
1 ответ
Этот вопрос сбивает с толку, потому что интуитивно ваш мозг думает, что передний план движется, но на самом деле это фон, который вам нужно переместить, чтобы он выглядел так, как будто передний план движется... следовательно, легко потеряться в x/y, -x/y, x/-y, -x/-y комбинации. Также немного сбивает с толку общение с другими (т.е. вы имели в виду "вверх" или "вниз")...
Для меня мне нужно, чтобы передний план, казалось, шел вниз, когда он прокручивался, пока не достигал дна. Я понял, что это означало, что фон (self) должен был двигаться вверх, пока не достиг самой высокой точки (1539.0), что означало, что теперь он отображает нижнюю часть фонового изображения. В конечном итоге я использовал следующее в моем методе tick/update, и он работает (т.е. предотвращает любую прокрутку):
if (self.position.y > 1539.0f) {
//CCLOG(@"My position is greater than 1539");
self.position = ccp(self.position.x, 1539.0f);
}
Не уверен, как сделать прокрутку более естественной, однако...