2012-01-17 3 views
0

Я хочу установить содержимое прокрутки.Cocos2d iPhone. Размер прокрутки. Слои

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

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

enter image description here

Scrolling только в сером CCLayer (scrollayer) .... НЕ ВЕСЬ ЭКРАН.

Помогите мне?

P.S .: Установка CCLayerColor и initWithColor: Ширина: Высота: не работает. Это просто делает какую-то тупую коробку с цветом, и она тоже движется.

+0

Что такое белый прямоугольник? это маска, маскирующая часть слоя прокрутки, которая остается на месте во время действия прокрутки, или вы имели в виду, что будет показана только обрезанная часть слоя прокрутки, но фон (за прокручиваемым изображением) будет отображаться там, где белый прямоугольник? – YvesLeBorg

+0

z-index: 0 --- фоновое содержимое, для exmaple white CCSprite, z-index: 1 --- CCLayer ScrollLayer - INSIDE scrollllayer будет объектом для exlaple CCLabelTTF. ....... Внутри означает, что CCLabelTTF будет дочерним элементом scrollllayer CCLayer – mayoxy

+0

, но .. если я думаю об этом сейчас, ... scrolllayer перемещается, прокручивается. так... – mayoxy

ответ

0

нормально, я бы поставил рамку окна на более высокий 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 
    } 
} 

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

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

0

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

Чтобы увидеть это в действии, просмотрите страницу статистики Angry Gran.