Относительное расположение CCSprite

Итак, у меня есть игра в версии cocos2dx для Windows Phone. Есть фон (CCLayerColor) и посреди него я помещаю еще один CCLayerColor. Проблема в том, что при перемещении слоя со спрайтами внутри этого среднего слоя движение выполняется относительно всего экрана, а не слоя посередине. Код для создания этого CClayerColor в середине экрана:

mWheelMachine = WheelMachineView::create(symbolMap, path);
mWheelMachine->setContentSize(CCSize(WHEEL_MACHINE_WIDTH , WHEEL_MACHINE_HEIGHT));//values equaling one third of screen size
mWheelMachine->setPosition(ItemManager::sharedItemManager()->getItemPosition(WHEEL_MACHINE_TAG
addChild(mWheelMachine, THEME_WHEEL_MACHINE_ORDER);//position in the middle of the screen

«WheelMachineView» является подклассом «CCLayerColor», а create просто переопределяет соответствующий класс CCLayerColor. Внутри этого класса у меня есть еще один слой, который перемещается вместе с нарисованными внутри объектами CCSprite.

unsigned short o;

for (unsigned short i = 0; i < NUMBER_OF_WHEELS; i++)
{
WheelView* wheelLayer = WheelView::create();
wheelLayer->setIsRelativeAnchorPoint(true);
wheelLayer->setAnchorPoint(ccp(0,0));
wheelLayer->setPosition(i * WHEEL_WIDTH, -100 );
wheelLayer->setContentSize(CCSize(WHEEL_WIDTH, WHEEL_HEIGHT)); //large height value, to have room for making an animation with moving symbols

addChild(wheelLayer);
mWheels.push_back(wheelLayer);

/* Get the wheel symbols */
list<Symbol*> wheelSymbols = mWheelModel->getWheelSymbols(i);

/* Index */
o = 0;
for (list<Symbol*>::reverse_iterator it = wheelSymbols.rbegin(); it != wheelSymbols.rend(); it++)
{
  CCSprite* symbol = CCSprite::spriteWithSpriteFrameName((*it)->getName().c_str());
  symbol->setPosition(ccp(WHEEL_WIDTH / 2, SYMBOL_HEIGHT/2 + (o++ * SYMBOL_HEIGHT) - SYMBOL_HEIGHT));
  symbol->setAnchorPoint(ccp(0.5f, 0.5f));
  symbol->setScale(SYMBOL_SCALE_FACTOR);
  wheelLayer->addChild(symbol, 10, o);     
}

}

Таким образом, при перемещении «wheelLayer» в положение за пределами размера содержимого «mWheelMachine», он будет перемещаться по всему экрану, таким образом, рисуя символы за пределами средней обозначенной области (mWheelMachine) для этого. Поскольку он имеет больший размер, чем его родитель, он рисует символы за пределами родителя. Почему это происходит? Как я могу использовать только размер содержимого mWheelMachine?


person Alexe Mihai    schedule 13.11.2013    source источник


Ответы (1)


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

Я думаю, вы должны просто надеяться, что некоторые из фотографий будут отображаться в регионе. Использование маски будет хорошим решением.

person ShineHe    schedule 14.11.2013
comment
Так ты умеешь пользоваться маской? Я имею в виду, что должен быть какой-то способ привязать некоторые изображения к определенной области экрана, чтобы при перемещении изображений вверх и вниз это движение происходило только внутри этой области. - person Alexe Mihai; 15.11.2013