Cocos2d iPhone. Scrollayer contentSize. Слои - PullRequest
0 голосов
/ 17 января 2012

Я хочу установить размер содержимого слоя прокрутки.

У меня есть слой прокрутки, его тип CCLayer и перемещение задается с помощью ccTouchMove.У меня есть один график для сглаживания.НО.

Проблема в том, что слой прокрутки большой, как весь экран.Я хочу установить размер содержимого прокрутки.Контент в этом слое будет прокручиваться и показываться ТОЛЬКО в этом слое.Не занимая весь дисплей.Примерно так

enter image description here

Прокрутка только серым CCLayer (скроллер) .... НЕ ВСЕ ЭКРАН.

Можете ли вы помочь мне?

PS: настройка CCLayerColor и initWithColor: ширина: высота: не работает.Он просто делает какую-то глупую цветную коробку и тоже движется.

Ответы [ 2 ]

0 голосов
/ 18 января 2012

После отчаянных попыток с маскированием и GL_SCISSOR я остановился на вырезании отверстия на переднем плане и перемещении фонового объекта только при обновлении onTouchMoved.

Чтобы увидеть его в действии, взгляните на страницу статистики Angry Gran .

0 голосов
/ 18 января 2012

хорошо, честно говоря, я бы поставил оконную раму на более высокий z, чем прокручиваемый объект ... если у вас нет, возможно, вам придется обрезать и изменять спрайт на лету для содержимого окна, неприятно (по крайней мере, это тот, который как я мог это сделать, без дальнейших исследований).

так:

// initialize this logic somewhere useful

CCNode scrollableContent;
CCSprite windowFrame; 
BOOL isScrollPossible;
[self addChild:scrollableContent z:0];
[self addChild:windowFrame z:1];

// and in the touch delegate methods

-(void) ccTouchBegan:{
  check if the touch happened in the window, if yes, scrolling is possible
}
-(void) ccTouchMoved:{
  if (isScrollPossible) {

    compute displacement
    compute nextPosition for scrollableContent node;
    if ( nextPosition in window ) {
      // make scrollableContent follow touch
      scrollableContent.position=nextPosition;
    } else {
      // stop any further scrolling until the next 'touch began'
      isScrollPossible=NO; 
    }
  } else {
    // scroll not possible, do nothing
  }
}

Это основная идея. Возможно, вам понадобится логика ограничения, чтобы предотвратить распространение scrollableContent за края окна.

Отредактировано для опечаток.

...